当代码和图像在投影仪中重叠时,会出现奇怪的溢出 vbox 消息

当代码和图像在投影仪中重叠时,会出现奇怪的溢出 vbox 消息

参见以下代码。前两帧内容(第一个代码,第二个图像)不会产生任何溢出 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}

相关内容