问题
当我使用 Beamer 类在 LaTeX 中创建演示文稿幻灯片时,我喜欢使用如下构造overprint
:
\begin{frame}
\begin{block}{}
\begin{itemize}
\item Some general remarks about ALL plots
\end{itemize}
\end{block}
\begin{block}{}
\begin{center}
\begin{overprint}
\only<+>{
\incgraphics{width=7cm}{plot1.pdf}\\
Explanation of Figure 1
}
\only<+>{
\incgraphics{width=7cm}{plot2.pdf}\\
Explanation of Figure 2
}
% maybe more plots...
\end{overprint}
\end{center}
\end{block}
\end{frame}
问题是这样的从一张幻灯片创建的所有幻灯片frame
都分配有相同的页码这使得人们抱怨很难跟踪我正在看的幻灯片(当通过电话等进行演讲时)。
我该如何改变这种情况?
重现问题的最小示例
\documentclass{beamer}
\usetheme{Madrid}
\begin{document}
\begin{frame}
Common text\\
\begin{overprint}
\only<+>{
Figure 1 and explanation of Figure 1
}
\only<+>{
Figure 2 and explanation of Figure 2
}
\end{overprint}
\end{frame}
\end{document}
部分答案
人们可以随意\setbeamertemplate
使用 和\insertpagenumber{}
来代替\insertframenumber{}
,但是这样就失去了通用性(例如,您无法轻松地在主题之间切换)。
也许有更好的解决办法?
答案1
好问题。似乎没有内置功能可以做你想做的事。一定有一个计数器来保存幻灯片编号,但手册似乎没有公开它,我不想深入研究源代码。
我的解决方案可能会被归类为“瞎搞”,但如下所示:
\documentclass{beamer}
\usetheme{Madrid}
\newcounter{slidenumber}
\defbeamertemplate*{footline}{infolines theme frame plus slide}{
\setcounter{slidenumber}{\insertpagenumber}%
\addtocounter{slidenumber}{-\insertframestartpage}%
\addtocounter{slidenumber}{1}%
\leavevmode%
\hbox{%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{author in head/foot}%
\usebeamerfont{author in head/foot}\insertshortauthor~~(\insertshortinstitute)
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{title in head/foot}%
\usebeamerfont{title in head/foot}\insertshorttitle
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,right]{date in head/foot}%
\usebeamerfont{date in head/foot}\insertshortdate{}\hspace*{2em}
\insertframenumber.\arabic{slidenumber}{}/ \inserttotalframenumber\hspace*{2ex}
\end{beamercolorbox}}%
\vskip0pt%
}
\setbeamertemplate{footline}[infolines theme frame plus slide]
\begin{document}
\begin{frame}
Common text\\
\begin{overprint}
\only<+>{
Figure 1 and explanation of Figure 1
}
\only<+>{
Figure 2 and explanation of Figure 2
}
\end{overprint}
\end{frame}
\begin{frame}
Common text on frame 2\\
\begin{overprint}
\only<+>{
Figure 1 and explanation of Figure 1
}
\only<+>{
Figure 2 and explanation of Figure 2
}
\end{overprint}
\end{frame}
\end{document}
因此,任何使用 infolines 内部主题的主题都可以进行修改。如果你不想触碰任何模板,你可以可以重新定义\insertframenumber
以返回帧号.幻灯片号,但我不知道这是否会破坏其他任何东西。
答案2
我有同样的问题,并使用内置的 beamer 宏\insertpagenumber
和\insertsectionendpage
或\insertpresentationendpage
分别显示当前页码和部分或演示文稿的总页数。页码使用叠加层递增,而帧号则不递增。您可以在 footlines 中使用此命令。下面是 MWE。我知道这个问题很老了,但我花了一段时间才找到这些命令,所以我想引起大家的注意。
\documentclass{beamer}
\usetheme{Madrid}
\setbeamertemplate{footline}{% set footline options
\insertpagenumber/\insertsectionendpage
}
\begin{document}
\begin{frame}
Common text\\
Frame - \insertframenumber{} of \inserttotalframenumber \\
Page - \insertpagenumber{} of \insertpresentationendpage \\
\begin{overprint}
\only<+>{
Figure 1 and explanation of Figure 1
}
\only<+>{
Figure 2 and explanation of Figure 2
}
\end{overprint}
\end{frame}
\end{document}
答案3
虽然这个问题很老了,但我想我可以做出贡献。每次需要时,只需手动将帧号增加一。通过编写来执行此操作,\addtocounter{framenumber}{1}
请确保在范围内执行此操作\only{}
,否则它将应用于所有幻灯片。并确保它是正确的\only{}
。您的 MWE 可以修改为:
\documentclass{beamer}
\usetheme{Madrid}
\begin{document}
\begin{frame}
Common text\\
\begin{overprint}
\only<+>{
Figure 1 and explanation of Figure 1
}
\only<+>{\addtocounter{framenumber}{1}
Figure 2 and explanation of Figure 2
}
\end{overprint}
\end{frame}
\end{document}
这也会增加您的总页数。
让我们明确一点,因为它很重要:它必须在内\only{}
,使用\onslide
或\pause
还不够,只能\only{}
确保代码不会在其他幻灯片中执行。如果您使用除以外的其他方式实现叠加\only{}
,在最坏的情况下,您只需添加一系列\only{}
具有精确页码的,例如:
\only<2>{\addtocounter{framenumber}{1}}
\only<3>{\addtocounter{framenumber}{1}}
\only<4>{\addtocounter{framenumber}{1}}
等等。
编辑:
而不是\addtocounter{framenumber}{1}
,您可以直接使用\stepcounter{framenumber}
。此外,要将每张幻灯片编号为单独的帧,而不是像我上面指出的那样插入整个序列,您可以这样写:
\only<2-|handout:0>{\stepcounter{framenumber}}
因为此命令将应用于第一张幻灯片之后的每一张幻灯片。我添加了 handout:0 以避免讲义模式的混乱。
总结一下:
如果您想让所有幻灯片都编号为单独的帧,只需\only<2-|handout:0>{\stepcounter{framenumber}}
在顶部添加即可。但请注意,只在实际使用叠加层时使用它,否则会\only<2->
导致叠加,并且帧将在两个相同的幻灯片中重复。
答案4
我不确定这是否正是您想要的,但您也可以使用标签和覆盖规范\begin{frame}
:\againframe
\documentclass{beamer}
\usetheme{Madrid}
\begin{document}
\begin{frame}<1>[label=somelabel]
Common text\\
\begin{overprint}
\only<+>{
Figure 1 and explanation of Figure 1
}
\only<+>{
Figure 2 and explanation of Figure 2
}
\end{overprint}
\end{frame}
\againframe<2>{somelabel}
\end{document}
通过这个解决方案,您至少可以选择哪些覆盖应该具有相同的帧号,哪些不应该。