在“document”环境中挂接环境

在“document”环境中挂接环境

我正在制作一个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

相关内容