
Gibt es eine „einfache“ Möglichkeit, Dinge in einer overprint
Umgebung vertikal zu zentrieren?
Basierend auf der aktuellen Antwort ist dies mein Testdokument
\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}
Und das Problem liegt jetzt bei Absatzumbrüchen (ein Ersatz für \smash
?) und wörtlichen Inhalten ( listings
).
Antwort1
Die Idee ist, \smash
die Höhe des Textes zu verbergen, \vfill
s zu verwenden, um ihn vertikal zu zentrieren und dannminibox
um Zeilenumbrüche im Text zu erhalten.
Sie können minipage
anstelle von auch verwenden minibox
, für Ersteres ist jedoch die Angabe der Breite erforderlich.
\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}