在 beamer 中对每一帧运行宏

在 beamer 中对每一帧运行宏

如何修补 beamer\frame命令(frame环境),使其\note{}在每一帧上执行。这个问题与这个\note{}但是,我希望执行附加宏(在我的情况下),而不是每一帧,即:

\begin{frame}
    % empty dummy note, ensures that beamer renders a note page for this frame
    % if compiled with \setbeameroption{show notes}
    \note{}

    % frame content (may contain "real" \note commands, which accumulate)

\end{frame}

我正在尝试在生成的 PDF 中实现这一点每一个幻灯片(即使来自未指定注释的框架)后面都有注释页,这样我就可以使用pdfnup --nup 1x2(或类似工具)将它们配对在同一页上。也就是说,以下最小示例应生成一个 4 页 PDF 文件:

\documentclass{beamer}
\setbeameroption{show notes}

\begin{document}

\begin{frame}{Slide with notes}
  Slide content
  \note{Cool note!}
\end{frame}

\begin{frame}{Slide without a single note (a notes page should follow nevertheless!)}
  More slide content:
\end{frame}

\end{document}

附注:我愿意不是想要任何基于此的解决方案pgfpages(例如“在第二个屏幕上显示注释”),因为此包在发货级别与textpos包发生干扰,而对于绝对定位,我绝对需要这个包。结果看起来最多“有趣”!

欢迎任何想法!

答案1

这似乎对你的小例子有用:

\makeatletter
\def\beamer@framenotesbegin{% at beginning of slide
  \gdef\beamer@noteitems{}%
  \gdef\beamer@notes{{}}% used to be totally empty.
}
\makeatother

请注意,我并没有对此考虑太多,因此如果它不起作用,请抱怨。:)

答案2

一个巧妙的方法是将代码放在其他地方,每帧都会进行评估,而不是尝试挂接到框架环境本身。例如,模板可以包含任意代码,因此您可以重新定义一个经常使用的模板以包含相关命令。

在类似情况下,我已连接到命令,\frametitle因为这样更强大一些。我不知道是否在内部\begin{frame}{Some Title}调用\frametitle,所以我不知道这是否适合您。

答案3

也许最简单的方法是创建一个包装器环境。基本示例:

\documentclass{beamer}
\newenvironment{nframe}[1]{%
\begin{frame}[environment=nframe]\frametitle{#1}\note{}%
}{%
\end{frame}%
}
\begin{document}
\begin{nframe}{Title}
  Foo
\end{nframe}
\end{document}

我认为如果你提供一个框架标题,这很尴尬...将第二个参数留空则没有框架标题。


这是一个显然不起作用的解决方案,为了后代,我将其保留在这里。

调整链接问题中的答案,你不能使用etoolbox就像\appto这样:\appto{\frame}{\note{}}在每一帧的开头都包含一个注释?

相关内容