我对 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}
我使用可选参数只是为了展示如何使用它。