我正在制作一个beamer
基本上是单页框架的文档。由于不想在环境中明确调用框架,所以我\begin{frame}[t]
在文档的开头和\end{frame}
结尾处(加上两个\vfill
命令)调用了该框架。这是代码:
\documentclass{beamer}
\AtBeginDocument{\begin{frame}[t]\vfill}
\AtEndDocument{\vfill\end{frame}}
\begin{document}
Cogito ergo sum.
\end{document}
返回以下错误消息:
File ended while scanning use of \beamer@collect@@body.
这是日志档案。
我想,这意味着我无法document
以这种方式将环境挂钩到环境中。正确的做法是什么?是否有一种适用于任何环境的通用方法?(也就是说,不仅适用于frame
。)
先谢谢您的帮助。
更新:
感谢@koleygr,我可以使用以下代码:
\documentclass{beamer}
\let\olddocument\document
\let\oldenddocument\enddocument
\renewenvironment{document}{\olddocument\begin{frame}[t]\vfill}
{\vfill\end{frame}\oldenddocument}
\begin{document}
Cogito ergo sum.
\end{document}
但是,当我添加另一个环境时,它不能很好地工作,如下所示:
\newcommand{\spacer}{\begin{column}{.02\textwidth}\end{column}}
\let\olddocument\document
\let\oldenddocument\enddocument
\renewenvironment{document}%
{\olddocument\begin{frame}[t]\vfill%
\begin{columns}[t]\spacer}
{\spacer\end{columns}%
\vfill\end{frame}\oldenddocument}
\begin{document}
Cogito ergo sum.
\end{document}
这将返回以下错误消息:
File ended while scanning use of \frame.
这是日志档案。
我该如何处理这个问题?我是否应该定义一些命令\oldolddocument
并\oldoldenddocument
存储最近重新定义的document
环境,或者是否有更直接的解决方案?
答案1
原帖编辑后进行编辑:
在这种情况下这应该有效:
\documentclass{beamer}
\newcommand{\Lspacer}{\columns[t]\column{.02\textwidth}\column{0.96\textwidth}}
\newcommand{\Rspacer}{\column{.02\textwidth}\endcolumns}
\let\olddocument\document
\let\oldenddocument\enddocument
\renewenvironment{document}%
{\olddocument\begin{frame}[t]\vfill\par%
\Lspacer%
}
{\Rspacer%
\vfill\end{frame}\oldenddocument
}
\begin{document}
Cogito ergo sum.
\end{document}
旧答案:
这种情况下你可以尝试以下方法:
\documentclass{beamer}
\let\olddocument\document
\let\oldenddocument\enddocument
\renewenvironment{document}{\olddocument\begin{frame}[t]\vfill}
{\vfill\end{frame}\oldenddocument}
\begin{document}
Cogito ergo sum.
\end{document}
\AtEndDocument
您的问题可能是使用内部类的命令较多,因此框架环境和命令beamer
的顺序不是预期的。\begin
\end