我想我基本上有同样的问题这里。但.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
,我创建了您希望在每个演示文稿开始时显示的框架。
因此,我没有使用\AtBeginDocument
let 来\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}