如何在 beamer 中的列表后获取正确的暂停次数?

如何在 beamer 中的列表后获取正确的暂停次数?

当我在 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}

相关内容