In a recent post I looked at how to use the +
syntax to create flexible overlays in beamer
. The key concept of that syntax is to allow dynamic slides to be created without having to hard-code slide numbers. The classic example is to reveal a list an item at a time:
\begin{frame}
\begin{itemize}
\item<+-> This is on the first and all following slides
\item<+-> This is on the second and all following slides
\item<+-> This is on the third and all following slides
...
\end{itemize}
\end{frame}
As I discussed in the earlier post, this is a very powerful way to create overlays (dynamic slides from the same frame source). However, a classic problem people have is combining this with the \pause
command. For example, the following creates four slides:
\begin{frame}
\begin{itemize}
\item<+-> This is on the first and all following slides
\item<+-> This is on the second and all following slides
\item<+-> This is on the third and all following slides
...
\end{itemize}
\pause
Text after the list
\end{frame}
Why? If you read the beamer
manual, it’s all about the value of \beamerpauses
, but if we skip to the key point, you should not use \pause
on the same slide as <+->
(or similar).
Beyond the power of \pause
: \onslide
The reason people get into trouble is I think because they imagine \pause
as the best way to break ‘running text’ in a frame into overlays. However, \pause
is really just the most basic way of breaking up frames and is meant just for the simplest cases
\begin{frame}
Some content
\pause
Some more content
\end{frame}
The moment you introduce other dynamic behaviour, you need more control than \pause
offers. Indeed, this is pretty clear in the beamer
manual: what people are actually looking for is \onlside
.
Unlike \pause
, which only knows some basic stuff about slide numbers, \onslide
works with the full power of the flexible overlay specification (indeed, an overlay specification is required). So to get text after a list, what is needed is
\begin{frame}
\begin{itemize}
\item<+-> This is on the first and all following slides
\item<+-> This is on the second and all following slides
\item<+-> This is on the third and all following slides
...
\end{itemize}
\onslide<+->
Text after the list
\end{frame}
As we are then using the special +
syntax for all of the overlays, everything is properly tied together and will give the (probably) expected result: three slides.
The beamer
manual covers other more complex effects using \only
, \uncover
, \alt
and so on, but using \onslide
you can do everything you think you can do with \pause
but actually have it work when using the +
syntax on the slide too!