创建启动/结束另一个环境的新环境时出现问题

Tho*_*oni 7 latex beamer

我目前正在使用Beamer和列表包将漂亮的代码打印到Beamer块中.所以我在做什么看起来像:

\begin{block}{}
\begin{lstlisting}
int foobar(void) { return 0; }
\end{lstlisting}
\end{block}
Run Code Online (Sandbox Code Playgroud)

现在,我发现每次启动blocklstlisting环境都很麻烦.我想拥有一个简单的codeblock环境:

\begin{codeblock}
int foobar(void) { return 0; }
\end{codeblock}
Run Code Online (Sandbox Code Playgroud)

所以,我尝试过类似的东西:

\lstnewenvironment{codeblock}
{\begin{block}{}}
{\end{block}}
Run Code Online (Sandbox Code Playgroud)

但不幸的是,Beamer文档不再编译,出现以下错误:

! Missing } inserted.
<inserted text> 
                }
l.178 \end{frame}

? 
Run Code Online (Sandbox Code Playgroud)

有办法做到这一点吗?

LaTeX中创建新环境的问题中,Andreas Grech遇到了同样的问题,但它可以解决它,因为还有另一种进入/退出封闭环境的方法.但就blockBeamer环境而言,似乎除此之外别无他法\begin{block}...\end{block}.

ypn*_*nos 0

我遇到了同样的问题,但找不到解决方案。我的解决方法是使用 \lstinputlisting 命令并将代码放在单独的文件中。如果您有想要包含的真实代码,那就太好了。对于小例子则不然。

另一种解决方法是在启动 {frame} 环境之前将代码片段放入变量中,然后引用它。Latex-beamer 文档中解释了如何执行此操作。它还允许您使用自定义环境/命令。