Beamer handout mode: explicitly printing "half-way" frames
The following works:
\documentclass[handout]{beamer}
\begin{document}
\begin{frame}<handout:1>[label=foo]
foo\onslide<all:2>bar
\end{frame}
\end{document}
The point is that you have two levels of overlay specifications:
Local overlay specs that influence the content of a frame, given by
\pause
,\only
, overlay-aware commands and so on. These define the set of slides a frame consists of.The global overlay spec you can give to the
frame
environment or command. This further filters the set of slides defined by the local ones.
However, in handout
mode, beamer basically collapses all local overlay specifications to a single slide (unless explicitly told so by local handout:
or all:
alternatives, as in the code above). Hence, the filter on "global level" does not have any effect – it can only reduce the set of slides, not extend it.
A possible workaround is what I have sketched above: During development, use <all:...>
overlay specs to have each and every slide also in the handout. When the lecture is almost complete, add the global ones to decide what actually should be part of the handout. I have been using this strategy for a while and it works quite well.
I'm not sure how to do this with \pause
but it works with \onslide
and overlay sensitive environments such as itemize
, as well as overlay-sensitised tikz
styles.
Case 1: Without \againframe
This case is pretty straightforward:
\documentclass[handout]{beamer}
\begin{document}
\begin{frame}<1-| handout:1->[label=foo]
foo\onslide<2-| handout:2> bar
\end{frame}
\end{document}
Case 2: With \againframe
This makes use of \againframe
which you mentioned you are already using in the real file. I'm not certain quite how well this will fit into your existing code.
I use this when I want a handout to contain stage 1 of a diagram, say, then something else, then stage 2 of the diagram etc. Often the slides themselves contain stages 1a, 1b, 1c etc. and 2a, 2b, 2c etc. This method can be extended to work in those cases as the simple example of a list shows in the following:
\documentclass[handout]{beamer}
\mode<handout>{% comment this out for the second form of the handout shown below
\usepackage{pgfpages}
\pgfpagesuselayout{4 on 1}[a4paper,border shrink=5mm,landscape]
\setbeamercolor{background canvas}{bg=black!5}
}
\begin{document}
\begin{frame}<1| handout:1>[label=foo]
foo\onslide<2-| handout:2> bar
\end{frame}
\begin{frame}<1-2| handout:1>[label=foo2]
\begin{itemize}
\item<+-| handout:1-2> foo on slides 1-4 of slides and 1-2 of handout
\item<+-| handout:1-2> foo on slides 2-4 of slides and 1-2 of handout
\item<+-| handout:2> bar on slides 3-4 of slides and slide 2 of handout
\item<+-| handout:2> bar on slide 4 of slides and slide 2 of handout
\end{itemize}
\end{frame}
\againframe<2| handout:2>{foo}
\againframe<3-4| handout:2>{foo2}
\end{document}
The handout will then look like this (using the pgfpages
layout above):
Or without the pgfpages
layout:
The slides themselves will look like this:
I came to this but the answer did not work for me, because I am using \only<>. The solution is then a command like \only<3| handout:2>{Some text} found p14 of beamer user guide. So if my frame is
Before
\only<1| handout:1>{text1}
\only<2| handout:2>{text2}
After
then text1 is simply replaced by text2 in the two slides generated even in handout.