我正在写一个 Beamer 演示文稿,并尝试(但没有成功)使用\pause
它来逐步完成编号方程式数组,方程式依次出现,并且相应的数字在正确的时间出现(即方程式首次出现时)。
编辑\alt
:我已经部分解决了这个问题,使用了所述技巧的变体这里,但有一些垂直摆动。
该解决方案应该比我下面提出的解决方案更优雅一些,因为文档的最终用户(不是我)可能需要进行更改,并且不是高级(La)TeX 用户。
\documentclass{beamer}
\begin{document}
\begin{frame}
\begin{gather}
1\alt<2->{\\2\alt<3>{\\3}{}}{}
\end{gather}
\end{frame}
\end{document}
答案1
在beamer
用户指南中,对其的解释\pause
是:
amsmath
此命令在像这样的环境中不起作用align
,因为它们会做出非常邪恶的事情。
align
和它的朋友们做的一件坏事gather
是,它们对环境的内容进行了两次评估。特别是,诸如 之类的覆盖命令\pause
被执行了两次,这可能会造成混乱。在第一次运行中,环境的内容只是被测量;实际的排版是在第二次运行中完成的。
由于第一次运行中的测量以 开始\begingroup \measuring@true
,因此可以很容易地修复问题(尽管根据beamer
用户指南“没有修复此问题”!):只需\measuring@true
停用相应的覆盖命令即可。(当然,必须找出什么正是要停用...)下面的代码执行此操作,并给出所需的输出:
\documentclass{beamer}
\makeatletter
\let\save@measuring@true\measuring@true
\def\measuring@true{%
\save@measuring@true
\def\beamer@sortzero##1{\beamer@ifnextcharospec{\beamer@sortzeroread{##1}}{}}%
\def\beamer@sortzeroread##1<##2>{}%
\def\beamer@finalnospec{}%
}
\makeatother
\begin{document}
\begin{frame}
\begin{gather}
1 \\ \pause
2 \\ \pause
3
\end{gather}
\end{frame}
\end{document}
答案2
这可能不是您想要的答案,但它很有用。这个想法是使用\onslide
而不是\pause
;然而,这仍然会产生不良效果:最后一个方程编号将出现在每张幻灯片上,如以下示例所示:
\documentclass{beamer}
\begin{document}
\begin{frame}
\begin{gather}
\onslide<1->{1\\}
\onslide<2->{2\\}
\onslide<3->{3}
\end{gather}
\end{frame}
\end{document}
一种解决方法是在末尾添加一个新的“虚拟”行,并且不带编号(使用\notag
),然后调整垂直空间,以便这个新的虚拟行不会添加不需要的垂直空间,如下例所示:
\documentclass{beamer}
\begin{document}
\begin{frame}
\begin{gather}
\onslide<1->{1\\}
\onslide<2->{2\\}
\onslide<3->{3\\[-\baselineskip]\notag}
\end{gather}
\end{frame}
\end{document}