当我在 Beamer 中创建一个列表(或列表类型)并在每项之间自动暂停时,之后的暂停似乎有问题。如果我在\pause
之后添加一个,那么我会得到双暂停,但如果我省略它,那么就不会有暂停。
以下是一个例子:
\documentclass{beamer}
\begin{document}
\begin{frame}
\begin{itemize}[<+->]
\item On the first slide
\end{itemize}
\pause
On the first or third slide
\end{frame}
\end{document}
有了\pause
,我得到三页。没有 ,我只能得到一页。我想要两页。
另一个类似的令人讨厌的行为的例子(在编辑中添加)是试图暂停之内一个物品:
\documentclass{beamer}
\begin{document}
\begin{frame}
On the first slide
\pause
\begin{itemize}[<+->]
\item On the second slide.
\pause
Should be on the third slide, actually on the fourth
\item On the fourth slide
\end{itemize}
\end{frame}
\end{document}
发生了什么事?更重要的是,我该如何阻止它这样做?这真的很烦人!
(编辑时添加):回应 Michael Underwood 的回答:这个\pause
命令非常有用且直观,我真的很想使用它。我知道对于复杂的东西,我需要使用更精细的命令,但这不感觉很复杂。似乎只要我使用自动列表(它本身就是更复杂命令的有用快捷方式),我就必须放弃使用该\pause
命令。为什么我不能同时使用两者?
我正在使用 TeXLive 2008 的 beamer 3.07 版本。如果能解决这个问题,我很乐意升级。
答案1
如果没有该\pause
命令,“在第一张或第三张幻灯片上”没有指定何时出现,这意味着它总是会出现。使用该\pause
命令,它会一次显示一个列表项,直到它们全部显示出来,然后再次暂停,这就是您有重复幻灯片的原因(因为在显示最后一个项目和暂停之间没有任何变化)。
解决方案是指定您希望列表后面的项目何时出现。实现此目的的一种方法是使用命令将其括起来\uncover
:
\documentclass{beamer}
\begin{document}
\begin{frame}
\begin{itemize}[<+->]
\item On the first slide
\end{itemize}
\uncover<+->{
On the second slide
}
\end{frame}
\end{document}
编辑
针对您的编辑,这里有另一种解决问题的方法。您正在\pause
与列表选项结合使用[<+->]
,这会添加自己的暂停,因此有时会导致双暂停。如果您真的不想放弃\pause
,那么您可以通过专门使用它来修复示例的行为:
\documentclass{beamer}
\begin{document}
\begin{frame}
On the first slide
\pause
\begin{itemize}
\item On the second slide.
\pause On the third slide
\pause\item On the fourth slide
\end{itemize}
\end{frame}
\end{document}
这在您的第一个例子中也有效:
\documentclass{beamer}
\begin{document}
\begin{frame}
\begin{itemize}
\item On the first slide
\pause\item On the second slide
\end{itemize}
\pause On the third slide
\end{frame}
\end{document}
这种方法的潜在缺点是\pause
停止一切直到暂停过去,它才会在当前帧中出现,即使您指定它应该更早出现。例如,
\documentclass{beamer}
\begin{document}
\begin{frame}
Here are important points:
\begin{itemize}
\item Point on Slide 1
\pause\item Point on Slide 2
\pause\item Point on Slide 3
\end{itemize}
\uncover<1-3>{
I want to emphasize this on every slide:\\ Always remember these points!\\ (But it only appears on the third slide)
}
\end{frame}
\end{document}
另一方面,使用更少的代码就可以简单地实现这种效果:
\documentclass{beamer}
\begin{document}
\begin{frame}
Here are important points:
\begin{itemize}[<+->]
\item Point on Slide 1
\item Point on Slide 2
\item Point on Slide 3
\end{itemize}
Always remember these points!
\end{frame}
\end{document}
答案2
我最终想到的解决方案是定义两个命令细化\pause
,一个用于列表内部,一个用于列表之后,这样就可以让暂停按我预期的方式工作。它们会进行beamerpauses
相应的调整。
定义如下:
% For after a list
\newcommand{\itpause}{%
\addtocounter{beamerpauses}{-1}%
\pause
}
% For within a list
\newcommand{\iitpause}{%
\addtocounter{beamerpauses}{-1}%
\pause
\addtocounter{beamerpauses}{1}%
}
用于:
\documentclass{beamer}
%\url{https://tex.stackexchange.com/q/682/86}
% For after a list
\newcommand{\itpause}{%
\addtocounter{beamerpauses}{-1}%
\pause
}
% For within a list
\newcommand{\iitpause}{%
\addtocounter{beamerpauses}{-1}%
\pause
\addtocounter{beamerpauses}{1}%
}
\begin{document}
\begin{frame}
\begin{itemize}[<+->]
\item First slide
\iitpause Second slide
\item Third slide
\end{itemize}
\itpause
Fourth slide
\end{frame}
\end{document}
答案3
个人意见:我不喜欢默认的覆盖规范,
\item<+->
类似的规范更加灵活,如果其他方法都失败了,仍然可以使用硬编码值,例如\item<3->
使用类似覆盖规范,[<.->]
您可以\pause
在逐项列举后照常使用。但是,如果您想在逐项列举之前暂停,则\pause
必须在此处添加。
\documentclass{beamer}
\begin{document}
\begin{frame}
text
\pause
\begin{itemize}[<.->]
\item On the first slide
\end{itemize}
\pause
On the first or third slide
\end{frame}
\end{document}
对于项目内暂停:
\documentclass{beamer}
\begin{document}
\begin{frame}
On the first slide
\pause
\begin{itemize}[<.->]
\item On the second slide.
\pause
Should be on the third slide, actually on the fourth
\pause
\item On the fourth slide
\end{itemize}
\end{frame}
\end{document}