在使用 Beamer 准备讲座时,我经常发现自己必须将一个框架拆分成两个不同的框架。例如,我的幻灯片的第一个版本包含:
\begin{frame}
\begin{block}{Theorem}
Blah, blah, blah
\end{block}
\begin{block}{Corollary}
Etc, etc, etc
\end{block}
\end{frame}
当我完成幻灯片并将证明添加到这些结果中时,我必须将其分成两个不同的框架
\begin{frame}
\begin{block}{Theorem}
Blah, blah, blah
\end{block}
\begin{block}{Proof}
Blah, blah, blah
\end{block}
\end{frame}
\begin{frame}
\begin{block}{Corollary}
Etc, etc, etc
\end{block}
\begin{block}{Proof}
Etc, etc, etc
\end{block}
\end{frame}
我认为如果可以简单地定义一个命令来关闭然后打开框架环境将会非常有帮助:
\def\newframe{ \end{frame} \begin{frame} }
\begin{frame}
\begin{block}{Theorem}
Blah, blah, blah
\end{block}
\begin{block}{Proof}
Blah, blah, blah
\end{block}
\newframe
\begin{block}{Corollary}
Etc, etc, etc
\end{block}
\begin{block}{Proof}
Etc, etc, etc
\end{block}
\end{frame}
但是这种方法不管用。有谁知道有没有什么办法可以定义这样的命令?
答案1
有不定义发出的宏的\end{frame}\begin{frame}
方法beamer
。
这是因为frame
它是一个非常特殊的环境:当beamer
找到时\begin{frame}
,它会寻找下一个\end{frame}
并将整个内容存储在内存中没有扩展宏;宏扩展将在稍后处理框架内容时进行。这种处理方式是必要的,因为内容需要处理多次,框架中的每个幻灯片都需要处理一次。
因此\end{frame}
必定会出现明确地,不隐藏在宏中;如果你使用\newframe
定义为
\def\newframe{ \end{frame} \begin{frame} }
\end{frame}
当 LaTeX 已经在处理一个帧时,将会出现 ,其中和\end{frame}
没有\begin{frame}
任何意义:所以会引发错误。