我尝试使用列在 Beamer 中提供一个专门的框架。代码如下:
\documentclass[mathserif]{beamer}
\newenvironment{questionframe}[1]{
\begin{frame}{#1}\begin{columns}[t]
}{
\end{columns}\end{frame}
}
\newenvironment{question}
{\begin{column}{0.5\textwidth}}
{\end{column}}
\newenvironment{answer}
{\begin{column}{0.5\textwidth}}
{\end{column}}
\begin{document}
\begin{questionframe}{Question frame, very long, very long}
\begin{question}
This is a question!
\end{question}
\begin{answer}
This is the answer!
\end{answer}
\end{questionframe}
\end{document}
我收到以下错误:
!扫描使用 \beamer@collect@@body 时文件结束。
但是,如果我将“列”环境从问题框架环境定义中直接移到文档中的问题上,则编译就可以了......
有人能解释一下这个问题吗?有什么办法可以防止这种情况发生吗?
任何提示都会受到欢迎。
答案1
将框架环境隐藏在另一个环境中可能会导致各种问题,特别是当您需要在框架中放置易碎内容时,例如列表或一些 tikz 图片。
如果你真的必须这么做,beamer 有一个特殊的框架选项,environment
你可以在其中告诉它新环境的名称。(有关更多信息,请参阅 beamer 用户指南,第 62 页)
其他一些评论:
该
mathserif
选项已过时,日志文件中会显示警告,提示您应\usefonttheme[onlymath]{serif}
改用您无法将两列宽度为 .5\textwidth 的列放在一起,这样就没有空间用于列内空间。要么让它们小一点,要么使用
onlytextwidth
选项
\documentclass{beamer}
\usefonttheme[onlymath]{serif}
\newenvironment{questionframe}[1]
{\begin{frame}[environment=questionframe]\frametitle{#1}\begin{columns}[t,onlytextwidth]}
{\end{columns}\end{frame}}
\newenvironment{question}
{\begin{column}{0.48\textwidth}}
{\end{column}}
\newenvironment{answer}
{\begin{column}{0.48\textwidth}}
{\end{column}}
\begin{document}
\begin{questionframe}{Question frame, very long, very long}
\begin{question}
This is a question!
\end{question}
\begin{answer}
This is the answer!
\end{answer}
\end{questionframe}
\end{document}