参见以下代码。前两帧内容(第一个代码,第二个图像)不会产生任何溢出 vbox 消息。
\documentclass{beamer}
\usepackage{filecontents}
\usepackage{listings}
\lstset{
language=XML,
basicstyle=\small
}
\begin{document}
\begin{filecontents}{\jobname code.xml}
<document>
<part>
<chapter>
<section>
<subsection>
<subsubsection>
<paragraph>
text
</paragraph>
</subsubsection>
</subsection>
</section>
</chapter>
</part>
</document>
\end{filecontents}
\def\putcode{\begin{center}\lstinputlisting{\jobname code.xml}\end{center}}
\def\putimage{\begin{center}\rule{0.9\textwidth}{0.8\textheight}\end{center}}
\begin{frame}
\putcode
\end{frame}
\begin{frame}
\putimage
\end{frame}
\begin{frame}
\begin{overprint}
\onslide<+>
\putcode
\onslide<+>
\putcode
\end{overprint}
\end{frame}
\begin{frame}
\begin{overprint}
\onslide<+>
\putimage
\onslide<+>
\putimage
\end{overprint}
\end{frame}
\begin{frame}
\begin{overprint}
\onslide<+>
\putcode
\onslide<+>
\putimage
\end{overprint}
\end{frame}
\end{document}
当您编译代码时,您将能够很容易地看到,当代码覆盖代码或图像覆盖图像时,不会生成溢出消息。
但是对于最后的覆盖,即代码上的图像,我们得到了一个溢出的 vbox 消息(每张幻灯片一个)。
Overfull \vbox (187.1715pt too high) detected at line 68
虽然我可以决定忽略该消息,但这还不够,因为图像会以一种相当尴尬的方式向上移动(超出量?)。
我知道可以通过命令或类似的东西来补救这种情况\vspace
,但我真的很想了解原因。
答案1
问题是,当要将图像放在最后一张幻灯片中时,TeX 处于垂直模式;使用\leavevmode
可解决问题:
\documentclass{beamer}
\usepackage{filecontents}
\usepackage{listings}
\lstset{
language=XML,
basicstyle=\small
}
\begin{document}
\begin{filecontents}{\jobname code.xml}
<document>
<part>
<chapter>
<section>
<subsection>
<subsubsection>
<paragraph>
text
</paragraph>
</subsubsection>
</subsection>
</section>
</chapter>
</part>
</document>
\end{filecontents}
\def\putcode{\begin{center}\lstinputlisting{\jobname code.xml}\end{center}}
\def\putimage{\begin{center}\rule{0.9\textwidth}{0.8\textheight}\end{center}}
\begin{frame}
\putcode
\end{frame}
\begin{frame}
\putimage
\end{frame}
\begin{frame}
\begin{overprint}
\onslide<+>
\putcode
\onslide<+>
\putcode
\end{overprint}
\end{frame}
\begin{frame}
\begin{overprint}
\onslide<+>
\putimage
\onslide<+>
\putimage
\end{overprint}
\end{frame}
\begin{frame}
\begin{overprint}
\onslide<+>
\putcode
\onslide<+>
\leavevmode\putimage
\end{overprint}
\end{frame}
\end{document}