Centrado vertical dentro de una sobreimpresión

Centrado vertical dentro de una sobreimpresión

¿Existe una forma "fácil" de centrar elementos verticalmente en un overprintentorno?

Según la respuesta actual, este es mi documento de prueba.

\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}

Y el problema ahora son los saltos de párrafo (¿un reemplazo de \smash?) y el contenido textual ( listings).

Respuesta1

La idea es usar \smashpara ocultar la altura del texto, usar \vfills para centrar verticalmente y luego usarminiboxpara obtener saltos de línea en el texto.

También puedes usarlo minipageen lugar de minibox, pero el primero requiere especificar el ancho.


\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}

información relacionada