叠印内部垂直居中

叠印内部垂直居中

有没有一种“简单”的方法可以让overprint环境中的东西垂直居中?

根据目前的答案,这是我的测试文档

\documentclass{beamer}
\usepackage{listings}
\long\def\opcenter#1{\vfill\smash{\begin{minipage}[c]{\linewidth}#1\end{minipage}}}
\begin{document}
\begin{frame}[fragile]
  \begin{overprint}
    \onslide<1>
      \opcenter{A short paragraph}
    \onslide<2>
      \opcenter{A\\
        longer\\
        paragraph\\
        with\\
        a\\
        few\\
        lines}
    \onslide<3>
      \opcenter{
        \begin{block}{Title}
          A block \\
          with\\
          a\\
          few lines
        \end{block}
      }
    \onslide<4>
      \opcenter{
        One paragraph

        Plus something else
      }
     \onslide<5>
       \opcenter{
         \begin{lstlisting}
And verbatim stuff
         \end{lstlisting}
       }
  \end{overprint}
\end{frame}
\end{document}

现在的问题在于段落分隔符(替代\smash?)和逐字内容(listings)。

答案1

这个想法是用来\smash隐藏文本的高度,使用\vfills 垂直居中,然后使用minibox在文本中换行。

您也可以使用minipage代替minibox,但前者需要指定宽度。


\documentclass{beamer}
\usepackage{minibox}
\begin{document}
\long\def\opcenter#1{\vfill\smash{\minibox{#1}}}
\begin{frame}
  \begin{overprint}
    \onslide<1>
    \opcenter{A short paragraph}
    \onslide<2>
    \opcenter{A\\
        longer\\
        paragraph\\
        with\\
        a\\
        few\\
        lines}

% This frame uses minipage instead of minibox. minibox
% does not accept a block as its argument.
\onslide<3>
      \vfill\smash{\begin{minipage}[c]{1.0\linewidth}
        \begin{block}{Title}
          A block \\
          with\\
          a\\
          few lines
        \end{block}
      \end{minipage}}\vfill
  \end{overprint}
\end{frame}
\end{document}

相关内容