尝试在 \AtBeginDocument 中添加框架会破坏幻灯片布局

尝试在 \AtBeginDocument 中添加框架会破坏幻灯片布局

我想我基本上有同样的问题这里。但.sty手动将内容复制到标题中似乎不是正确的解决方案。所以让我们重新开始:

对于我创建的一些幻灯片,第一张幻灯片总是相同的。所以我尝试通过\AtBeginDocument标题将它们包含进来。但是,此处定义的幻灯片被向下移动了一点。我无法解释原因,我找到的唯一解决方法如上所述。

这是一个最小(可工作)的例子:

%%%%% THIS WOULD BE THE HEADER %%%%%%
\documentclass[xcolor=dvipsnames]{beamer}
\usetheme{metropolis}
\metroset{block=fill}

\AtBeginDocument{
    \begin{frame}{wrong}
        This doesn't work.
    \end{frame}
}

%%%%% THIS THE ACTUAL DOCUMENT %%%%%%%

\begin{document}
    \begin{frame}{right}
        This works.
    \end{frame}
\end{document}

结果如下:

在此处输入图片描述

编辑:根据要求艾伦·芒恩我将尝试提供更多背景信息来解释为什么我认为这\AtBeginDocument对我来说是正确的解决方案:

标记为标题的部分实际上只是我文档的输入。如果我不使用类似的东西来\AtBeginDocument从标题文件向我的文档添加内容,我将需要在每个文档中复制这段代码。在我看来,这似乎不是正确的代码设计。

提前感谢你的帮助:)
Pascal

答案1

此示例执行以下操作:

  • 的原始定义\begin{frame}存储为\oldframe
  • \begin{frame}被重新定义为首先将其定义重置为\oldframe,然后调用宏\mystartframe,然后调用原始的\begin{frame}。这意味着:第一次\begin{frame}出现在文档中时,\mystartframe执行宏,并且从所有后续调用开始,\begin{frame}只是\begin{frame}
  • 在 中\mystartframe,我创建了您希望在每个演示文稿开始时显示的框架。

因此,我没有使用\AtBeginDocumentlet 来\begin{document}触发第一张幻灯片的输出,而是使用 的第一次出现来\begin{frame}达到此目的。当然,如果您的演示文稿通常不以 开头,\begin{frame}但例如以 开头\section,您可以将其用作钩子。

\documentclass[xcolor=dvipsnames]{beamer}
\usetheme{metropolis}
\metroset{block=fill}
\let\oldframe\frame
\def\frame{\let\frame\oldframe\mystartframe\frame}
\newcommand{\mystartframe}{
    \begin{frame}{wrong}
        This doesn't work.
    \end{frame}
}
\begin{document}
    \begin{frame}{right}
        This works.
    \end{frame}
\end{document}

在此处输入图片描述

相关内容