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}

Handout with 2 slides on a frame

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):

Handout

Or without the pgfpages layout:

Handout as slides

The slides themselves will look like this:

Slides


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.

Tags:

Beamer