
Существует ли «простой» способ вертикального центрирования объектов в 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
, чтобы скрыть высоту текста, использовать \vfill
s для вертикального центрирования, а затем использовать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}