Avoiding jumping frames in beamer
This issue is addressed in the beamer
manual in section 9.5 Dynamically Changing Text or Images, p.85 for v.3.10.
You need to use either the overlayarea
environment which is "more flexible but less user friendly" or the overprint
environment.
\begin{overlayarea}{⟨area width⟩}{⟨area height⟩}
⟨environment contents⟩
\end{overlayarea}
\begin{overprint}[⟨area width⟩]
⟨environment contents⟩
\end{overprint}
You then need to use \onslide<⟨num⟩>
instead of \only<⟨num⟩>{...}
.
The numbers must be disjoint.
Example:
\begin{overprint}
% on every slide (not sure if it is officially supported)
\onslide<1>
% on first slide
\onslide<2>
% on slide two
\onslide<3>
% on slide three
% etc.
\end{overprint}
Wrap your code fragment inside the overlayarea
environment.
The jumping occurs because beamer normally vertically centres the content on the frame.
One way to achieve a constant starting point for content of all heights(*) is to tell beamer to top align the frame. This can either be done on a frame-by-frame basis with
\begin{frame}[t]
or globally for the whole presentation:
\documentclass[t]{beamer}
MWE:
\documentclass{beamer}
\begin{document}
\begin{frame}[t]
\only<1>{abc}
\only<2>{abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc abc }
\end{frame}
\end{document}
(*) at least for all heights which don't overflow the available text height.