定义新的 lstlisting 环境时出现问题

定义新的 lstlisting 环境时出现问题

我对 Latex 还比较陌生,在 beamer 演示文稿中使用列表时遇到了麻烦。我知道我必须使用 [fragile] 框架才能在框架内获取逐字环境,但由于某些原因,它不起作用(我读到过它可以防止使用覆盖,但我不确定)。

我找到了一个可行的解决方案,通过在框架外定义一个保存框并在之后使用它:

\newsavebox{\mybox}
\begin{lrbox}{\mybox}
\begin{lstlistings}
blah blah blah
\end{lstlistings}
\end{lrbox}

\begin{frame}
    \usebox\mybox
\end{frame}

我想要为此创建一个环境。例如:

\begin{code}{\mybox}
blahblahblah
\end{code}

我尝试了\newenvironment,但显然它没有起作用,因为 verbatim 环境的工作方式(寻找匹配的最终环境模式,但在扩展期间不存在)。 Listings 给出了\lstnewenvironment,但问题是我希望我的盒子围绕着创建的环境,所以这不是正确的解决方案。

由于我是新手,我不太清楚它的内部工作原理,所以我不知道从哪里开始搜索。

答案1

您不能将lstlisting环境直接放入中lrbox,但可以将其放入\vbox(较低级别的对象)中。

\documentclass{beamer}
\usepackage{listings}

\lstnewenvironment{code}[2][]
 {\lstset{#1}\global\setbox#2\vbox\bgroup}
 {\egroup}

\newsavebox{\mybox}

\begin{document}

\begin{code}[basicstyle=\ttfamily]{\mybox}
blahblahblah
\end{code}

\begin{frame}

\usebox{\mybox}

\end{frame}

\end{document}

我使用可选参数只是为了展示如何使用它。

在此处输入图片描述

相关内容