我在 beamer 中有一个框架,当我不使用暂停 (\pause) 时,它可以正确编译。但是,当我暂停不同的列表项时,最后的项目不再出现在框架上(实际上,它们在框架可视部分之外)。似乎在包含暂停的情况下,beamer 在计算如何在页面上容纳不同的项目时遇到了一些问题。
知道如何避免这个问题吗?
编辑:一些表现出该问题的源代码:
\documentclass[slidetop,11pt]{beamer}
\linespread{1.2}
\begin{document}
\begin{frame}{Kubo-Greenwood Transport Formalism : Derivation}
Mott Method :
\begin{itemize}
\pause \item Electric field :
\footnotesize
\begin{equation*}
E(t) = E_0 cos(\omega t) u_x
\end{equation*}
\normalsize
\pause \item Coulomb gauge ($E=\delta A / \delta t$) :
\footnotesize
\begin{equation*}
A(t) = -\frac{E_0}{2 i \omega} (e^{i \omega t} - e^{-i \omega t}) u_x
\end{equation*}
\normalsize
\pause \item First order perturbation of H :
\footnotesize
\begin{equation*}
\delta \widehat{H} (t) = \frac{2e \widehat{P}.A(t)}{2 m} = e \widehat{V}.A(t) = -\frac{e E_0}{2 i \omega}(e^{i\omega t} - e^{-i \omega t}) \widehat{V}_x
\end{equation*}
\normalsize
\pause \item Transition from a state at t=0 to a state at t :
\footnotesize
\begin{equation*}
p_{nm} (t) = \frac{1}{\hbar^2} \left |\int_0^t d\tau e^{i(E_m-E_n) \tau / \hbar} \langle m|\delta \widehat{H}(\tau)|n \rangle \right |^2
\end{equation*}
\normalsize
\pause \item At long times :
\footnotesize
\begin{equation*}
\frac{p_{nm}(t)}{t} = \frac{2 \pi}{\hbar} \left(\frac{e2E_0}{2 \omega}\right)^2 \langle m|\widehat{V}_x|n \rangle \left[ \delta(E_m-E_n+\hbar \omega) + \delta(E_m-E_n-\hbar \omega)\right]
\end{equation*}
\normalsize
\end{itemize}
\end{frame}
\end{document}
实际上,多亏了 vanden 的评论,我尽量少提供软件包和评论,我才设法找到了导致此编译错误的原因。使用 \pause 时,是“\linespread{1.2}”命令搞乱了一切。如果没有可用的修复方法,我想我会将其注释掉。
答案1
item 有特殊的语法 -pause
出于这个原因,我从未尝试过列表,但我猜这是造成麻烦的原因。尝试删除所有停顿并替换\begin{itemize}
为
\begin{itemize}[<+->]
这将逐一显示每一项。如需更细粒度的控制,请使用例如以下代码代替上述更改:
\item<3->
要使项目出现在幻灯片 3 及以上。还有其他变体,请参阅 Beamer 用户指南。
答案2
您观察到了这种奇怪的行为!您使用的语法本身没有错——不过,我将在下面解释为什么输出会出错。Neil 建议使用 ,这\begin{itemize}[<+->]
是您示例中的一个很好的替代方案\pause
。如果您想使用\pause
相同的方法,那么有一个简单的解决方法:添加一个空行(或\par
) 前有问题的\pause
s 将删除额外的垂直空间,即
\pause\item
一切都会好的!
那么,是什么导致了不必要的垂直空间呢?额外的空行消除空格?问题是前面显示的方程式和\item
后面显示的方程式的组合\pause
:显示后,TeX 进入水平模式,准备构建一行新文本。(这意味着这\lastskip
是最后一个水平的skip,即0pt
;见下文。)在该行上\pause
添加一些s,以 结尾。这已经提供了一个额外的垂直空间。除此之外,还添加了一个(因为位于之后,另见下文)。\pdfliteral
\item
\par
\baselineskip
\item
\itemsep
\lastskip
0pt
\par
如果没有\pause
,这些垂直空格就不会出现:显示的等式后面的行保持为空,因此\par
不会添加\baselineskip
。此外,最后一个垂直跳过\lastskip
现在是\belowdisplayskip
(或\belowdisplayshortskip
),它大于\itemsep
,并且在这种情况下\item
设计为不添加。\itemsep
\par
为什么 help前面有一个空行(即) \pause
?它结束了 TeX 在显示后开始的行,使 TeX 进入垂直模式。该行仍然是空的,因此没有\baselineskip
添加!此外,在垂直的模式,\lastskip
又是最后一个垂直的跳过\belowdisplay(short)skip
。现在\pause
会做一些\unskip
神奇的事情,这样\pdfliteral
s 就不会影响\lastskip
。然后\item
发出另一个\par
,但这不会做任何事情,因为 TeX 已经处于垂直模式。最后,\lastskip
仍然与没有 相同\pause
,因此也\item
不会添加\itemsep
。
总之: \pause
可能在水平模式下(当 TeX 构建行和段落时)会出现问题,但在垂直模式下使用是安全的¹。这就是为什么 a\par
之前的 a\pause
在某些情况下会有所帮助。
只是为了好玩,这里重新定义了一个,\pause
它向前看,\par
如果看到一个\item
(或一个\par
),就会自动插入一个:
\makeatletter
\AtBeginDocument{%
\let\saved@pause\pause
\renewcommand\pause{\futurelet\pause@next@char\pause@i}%
\newcommand\pause@i{%
\ifx\pause@next@char\par\par\fi
\ifx\pause@next@char\item\par\fi
\saved@pause
}%
}
\makeatother
¹然而,在盒子顶部\vtop
,当 TeX 在内部的垂直模式,\pause
可以造成问题。