
¿Existe una forma "fácil" de centrar elementos verticalmente en un overprint
entorno?
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 \smash
para ocultar la altura del texto, usar \vfill
s para centrar verticalmente y luego usarminibox
para obtener saltos de línea en el texto.
También puedes usarlo minipage
en 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}