如何在存在 \uncover 的情况下更正 \insertpresentationendpage

如何在存在 \uncover 的情况下更正 \insertpresentationendpage

该命令\insertpresentationendpage应该插入演示文稿最后一页的页码(不包括附录)。但是,如果\uncover在演示过程中使用,其值会被错误地增加。有谁知道这个问题的良好修复或解决方法吗?

例子:

\documentclass{beamer}
\setbeamertemplate{footline}{\insertframenumber/\insertpresentationendpage}
\begin{document}
\begin{frame}
  Slide one
  %Comment out next line to get desired behaviour
  \uncover<2>{still} 
\end{frame}
\appendix
\begin{frame}
  Slide two (appendix)
\end{frame}
\begin{frame}
  Slide three (appendix)
\end{frame}
\end{document}

答案1

这实际上是预期的行为。\inserttotalframenumber比较\insertpresentationendpagebeamer手册(第 66 页)

\inserttotalframenumber将帧(不是幻灯片)的总数插入模板。该数字只有在您的文档上第二次运行 TeX 时才正确。

对阵

\insertpresentationendpage插入演示文稿最后一页的页码(不包括附录)。

因此\inserttotalframenumber计算框架,这意味着在有叠加的帧中它不会增加,而\insertpresentationendpage计算绝对数量页面在演示文稿中,每个覆盖层都作为一个页面。

您正在寻找的是一个命令,不幸的是它在 中不可用。但是,您可以自己定义它:\insertpresentationendframebeamer

\def\insertpresentationendframe{\inserttotalframenumber}
\makeatletter
\g@addto@macro{\appendix}{\immediate\write\@auxout{\string\@writefile{nav}{\noexpand\headcommand{\noexpand\def\noexpand\insertpresentationendframe{\the\c@framenumber}}}}}
\makeatother

将此代码插入文档的前言部分,即\documentclass{beamer}和之间的某个位置\begin{document}。它定义了一个宏\insertpresentationendframe,默认为总帧数,但如果遇到附录,则“锁定”为主演示文稿的最后一帧的帧数。

使用非常简单:

\documentclass{beamer}

\def\insertpresentationendframe{\inserttotalframenumber}
\makeatletter
\g@addto@macro{\appendix}{\immediate\write\@auxout{\string\@writefile{nav}{\noexpand\headcommand{\noexpand\def\noexpand\insertpresentationendframe{\the\c@framenumber}}}}}
\makeatother

\setbeamertemplate{footline}{\insertframenumber/\insertpresentationendframe}

\begin{document}
\begin{frame}
  Slide one
  \uncover<2>{still} 
\end{frame}
\appendix
\begin{frame}
  Slide two (appendix)
\end{frame}
\begin{frame}
  Slide three (appendix)
\end{frame}
\end{document}

请注意,帧计数器现在可以正确显示,1/1而不是1/2

相关内容