ハンドアウト・配布資料

発表が終わったあと「スライドください」と言われて、そのまま送ってしまった経験はありませんか。届いた側が開くと、同じ図が 4 回ずつ出てくる 120 ページの PDF——\pause で 1 枚ずつ現れる図は、印刷物になると 1 枚ずつ増えていく重複でしかありません。LaTeX の beamer には、この問題のためだけに handout というクラスオプション が用意されています。オーバーレイをすべて畳み、1 フレームを 1 ページに戻す——実測では、3 段階のオーバーレイを持つフレーム 2 つのデッキが 6 ページから 2 ページになりました。このページは、その handout と、\note で書くスピーカーノート、pgfpages で 1 枚に 4 スライド並べる方法、そして「話した内容を文書として配る」もう一つの道を扱います。

\documentclass[handout]{beamer} — オーバーレイを畳む

クラスオプションに handout を足すだけです。\documentclass[handout,aspectratio=169]{beamer} と書けば、\pause\item<2-> も無効になり、各フレームがちょうど 1 ページになります。実測しましょう——\pause を 2 回含むフレームと \item<1-><2-><3-> の箇条書きフレーム、合わせて 2 フレームのデッキは、通常モードで 6 ページ、handout を足すと 2 ページ になりました。ページ寸法は変わりません(どちらも 362.835 × 272.126 pt)。ソースは 1 文字も変えずに、同じ .tex から発表用と配布用の 2 つの PDF が作れます。実務では \documentclass[handout]{beamer} の行だけを差し替えたファイルをもう 1 本用意し、本体を \input するのがいちばん事故が少ない書き方です。

ここに、知らないと配布資料が壊れる落とし穴があります。handout はオーバーレイを「最後の状態」に畳むのではなく、すべてのコマの内容を重ねて出します。 実際に \only<1>{ALPHA}\only<2>{BRAVO} を並べたフレームを handout で組むと、出てきた 1 ページには ALPHA と BRAVO の両方 が印刷されていました。式の一部を \only で差し替える定番の書き方は、配布資料では差し替え前と差し替え後が並んで出るということです。対処法は、オーバーレイ指定に モード名を書き添える ことです。\only<2| handout:1>{...} なら「発表では 2 コマ目、配布資料では 1 コマ目(つまり出す)」、\item<2-| handout:0> なら「配布資料には出さない」。フレームごと切り替えるなら \begin{frame}<handout:0> で配布資料から落とし、\begin{frame}<beamer:0> で配布資料にだけ出します——実測で、この 2 つを含む 3 フレームのデッキは、発表用でも配布用でもきちんと 2 ページずつ、しかも中身が入れ替わって出力されました。

latex
\documentclass[handout,aspectratio=169]{beamer}

% WRONG in a handout: both versions of the formula are printed
\only<1>{$x^2 + y^2$}
\only<2>{$x^2 + y^2 = r^2$}

% RIGHT: say what each mode should do
\only<1| handout:0>{$x^2 + y^2$}   % talk only
\only<2| handout:1>{$x^2 + y^2 = r^2$}  % talk step 2, handout step 1

% frame-level switches
\begin{frame}<handout:0>{Live demo}   % not in the handout
\begin{frame}<beamer:0>{Full derivation}  % handout only

\note{...} は既定では何も出ない — \setbeameroption{show notes} が要る

フレームの中に \note{ここで資金提供に触れる} と書いても、既定では PDF はまったく変わりません。実測で確かめると、3 フレームのうち 2 つに \note を書き加えても出力は 3 ページのまま。これは仕様どおりで、beamer はノートを内部に貯めておくだけです。取り出すにはプリアンブルで \setbeameroption{...} を宣言します。同じ 3 フレームのデッキで測ると、show notes5 ページ(スライド 3 枚と、ノートを書いたフレームの直後に挟まる専用ページ 2 枚)、show only notes2 ページ(ノートだけ)、show only slides with notes4 ページ(ノートのあるフレームとそのノートだけ)になりました。一度 show notes を書いたあとで hide notes を書けば 3 ページに戻ります——本番前に 1 行コメントアウトするより、この行を切り替えるほうが安全です。

プリアンブルに書く行出てくるもの3 フレームのデッキでの実測
(none)スライドだけ。\note は蓄えられるが出力されない3 ページ
\setbeameroption{show notes}スライドと、その直後に挟まるノート専用ページ5 ページ
\setbeameroption{show only notes}ノートのページだけ。手元で読むための原稿になる2 ページ
\setbeameroption{show only slides with notes}ノートを書いたフレームとそのノートだけ4 ページ
\setbeameroption{hide notes}先に書いた show notes を打ち消す。本番前の切り替えに3 ページ
\setbeameroption{show notes on second screen=right}ページ数は変わらず、1 ページが左右 2 画面ぶんに広がる3 ページ / 725.669 × 272.126 pt

ノートページの中身も見ておきましょう。show notes で出るページには、そのスライドの縮小画像と日付が上に置かれ、その下に本文が入ります。\note{...} を続けざまに書けば段落が並びますが、箇条書きにしたいときは \note[item]{...} を使うと 番号つきリスト になります——実測で、\note[item] を 2 つ書いたフレームのノートページには「1. first bullet」「2. second bullet」と並びました。もう一つ知っておくとよいのが、\end{frame}後ろ に置く単独の \note{...} です。これはフレームに紐づかない独立したノートページになるので、「次のセクションに入る前に、この 3 点を思い出す」といった長めのメモを置けます。ノートはスライドの中身と違って何行書いてもレイアウトを壊しません。書きすぎて困ることはないほうの道具です。

latex
\documentclass{beamer}
\setbeameroption{show notes}   % swap for "hide notes" before you present

\begin{document}
\begin{frame}{Results}
  Body of the slide.
  \note[item]{mention the sample size}
  \note[item]{do not read the table aloud}
\end{frame}

% a standalone note page, bound to no frame
\note{Before section 3: water, timer, ask about questions.}
\end{document}

1 枚に 4 スライド — pgfpages\pgfpagesuselayout

\usepackage{pgfpages} を読み込み、\pgfpagesuselayout{4 on 1}[a4paper,border shrink=5mm] と書きます。実測では、handout モードの 5 フレームのデッキがこれで A4 縦 2 ページ(595.276 × 841.89 pt)になりました。2 on 1 にすると 3 ページ、[a4paper,landscape,border shrink=5mm] を渡すと A4 横(841.89 × 595.276 pt)です。border shrink は各スライドを縮めて余白を作る量で、綴じ代や書き込み用の空白がほしいときに効きます。pgfpages は beamer と PGF/TikZ を書いた Till Tantau 本人 の手によるもので、\ProvidesPackage{pgfpages}[2011/01/05 ver 0.02] というバージョン文字列は 2011 年のまま——安定しきっている、と読むのが正しいでしょう。

用意されているレイアウトは、pgfpages.sty の中を数えると 9 種類です——2 on 14 on 16 on 18 on 116 on 1、それに resize to(1 枚を別の用紙に拡大縮小する)・rounded cornerstwo screens with lagging secondtwo screens with optional second。ここで 3 on 1 は存在しません。「3 on 1 で組んだのにエラーになる」という質問がときどき出るのはこのためで、3 スライドのレイアウトは次節の handoutWithNotes が追加します。実務上の注意をひとつ——4 on 1 を A4 縦に置くと 2 × 2 で並ぶので、16:9 のスライドだと横方向の余白が目立ちます。16:9 のデッキなら landscape を付けるか、2 on 1 の縦置きにするほうがきれいに埋まります。

latex
% the whole handout build, in five lines
\documentclass[handout]{beamer}
\usepackage{pgfpages}
\pgfpagesuselayout{4 on 1}[a4paper,border shrink=5mm]

% for a 16:9 deck, turn the sheet instead
\pgfpagesuselayout{4 on 1}[a4paper,landscape,border shrink=5mm]

% one slide per sheet, scaled up to fill A4
\pgfpagesuselayout{resize to}[a4paper]

スライドの横にノート欄を刷る — handoutWithNotes

\usepackage{handoutWithNotes} を足すと、pgfpages に「ノート付き」のレイアウトが追加されます。TeX Live 2024 に入っているのは v1.3(2022/02/22、Marei Peischl と Guido Diepen が保守)で、.sty の中で宣言しているのは 1 on 1 with notes2 on 1 with notes3 on 1 with notes4 on 1 with notes と、1 on 12 on 1 の landscape 版の計 6 種類です。実測では、\pgfpagesuselayout{3 on 1 with notes}[a4paper]\setbeameroption{show notes} を組み合わせた 3 フレームのデッキが A4 縦 2 ページに収まりました。show notes を書き忘れるとノート欄が空のまま出る のがいちばんよくある事故です。講義資料として配るときは、右側の余白を受講者の書き込み欄として使えるので、\note を書いていない場合でも罫線代わりに使えます。

latex
\documentclass[handout]{beamer}
\usepackage{pgfpages}
\usepackage{handoutWithNotes}
\pgfpagesuselayout{3 on 1 with notes}[a4paper,border shrink=5mm]
\setbeameroption{show notes}   % without this the note column is empty

同じ原稿を文書として配る — beamerarticle

配布資料が本当は「スライドの写し」ではなく「読める文章」であるべき場面もあります。そのために beamer は beamerarticle を用意しています——\documentclass{article}\usepackage{beamerarticle} を足すと、frame 環境が 通常の本文として流れます。実測で、2 フレームのデッキを article 側で組んだところ、A4 の 1 ページ に両フレームの中身が連続した文章として出てきました。\pause は無視され、スライドの枠もテーマも付きません。beamer の README がうたう「講義ノートからスライドを、スライドから講義ノートを作れる」というのはこの仕組みのことで、beamer 自身も同じ原稿から作った beamerexample-lecture-beamer-version.pdfbeamerexample-lecture-print-version.pdf の 2 本を配布物として同梱しています。スライド専用の記述を出し分けたいときは \mode<presentation>{...}\mode<article>{...} で囲みます。

latex
% talk.tex holds only the frames; two wrappers build two documents

% slides.tex
\documentclass[aspectratio=169]{beamer}
\input{talk}

% notes.tex
\documentclass[a4paper,11pt]{article}
\usepackage{beamerarticle}
\input{talk}

% inside talk.tex, when the two versions must differ
\mode<presentation>{Three points.}
\mode<article>{The argument rests on three points, each of which is developed below.}

ソースを編集せずに何本も書き出す — \PassOptionsToClass-jobname

\documentclass の行を書き換えて 3 回コンパイルする、という運用は、必ずどこかで「発表 5 分前に handout 版のまま映す」事故を生みます。コマンドラインで options を渡してしまえば、ソースは 1 文字も変わりません——pdflatex -jobname=slides-handout "\PassOptionsToClass{handout}{beamer}\input{slides.tex}"。実測で、同じ slides.tex から通常版が 3 ページ、この 1 行が 2 ページの slides-handout.pdf を吐きました(どちらも 453.543 × 255.118 pt)。-jobname が肝心で、これを付けないと 2 つの出力が同じ .aux.nav を奪い合い、フレーム総数や目次が混線します。ノートも同じ要領で、beamer には クラスオプションの notes があり、beamer.cls が受け取る値は hideshowonlyonlyslideswithnotes の 4 つ。\setbeameroption{show only slides with notes} と同じことを \documentclass[notes=onlyslideswithnotes]{beamer} と 1 語で書けます(つづりが空白なしになる点に注意)。

terminal
# the talk itself
pdflatex -jobname=slides slides.tex

# the handout, from the identical unedited source
pdflatex -jobname=slides-handout \
  "\PassOptionsToClass{handout}{beamer}\input{slides.tex}"

# your own script: the note pages only
pdflatex -jobname=slides-notes \
  "\PassOptionsToClass{notes=only}{beamer}\input{slides.tex}"

# remember: every one of these needs two runs for .nav and .toc

実際に紙に刷るとき — 用紙・トナー・確認

印刷の前に、テーマの背景色を確認してください。beamer のカラーテーマには背景が濃いものがあり、たとえば albatrossbeamercolorthemealbatross.sty\setbeamercolor*{normal text}{fg=yellow!50!white,bg=blue!50!black} と宣言しています——白地に黒ではなく、濃紺の地に淡い黄色です。これを 40 部刷ると、紙が反り、トナーが尽き、しかも読みにくい。配布用のビルドでは \usecolortheme{default}(黒地に白ではなく fg=black,bg=white)に戻すか、\mode<handout>{\usecolortheme{default}} のようにモードで切り替えるのが実務的です。beetle のように背景が bg=black!40 の 40 % グレーというテーマも同様です。用紙側では border shrink を 5 mm ほど確保しておくと、綴じ代と、コピー機が端を落とす分を吸収できます。最後に pdfinfo でページ数と寸法を見てから印刷ボタンを押してください——A4 だと思っていたものが 128 × 96 mm のままだった、というのがいちばん多い失敗です。

  • 発表用 — オーバーレイをそのまま。\documentclass[aspectratio=169]{beamer}。会場で映す 1 本。
  • 配布用(紙)\documentclass[handout]{beamer}pgfpages4 on 1\only を使っている箇所には handout: 付きの指定を忘れずに。
  • 手元の原稿\setbeameroption{show only notes}。ノートだけを刷って演台に置きます。
  • 受講者用の書き込みノートhandoutWithNotes3 on 1 with notesshow notes を書き忘れると空欄のまま出ます(それはそれで使えます)。
  • 読み物としての配布\documentclass{article} + beamerarticle。スライドではなく文章として配りたいとき。
  • 共通の注意 — どれも .aux.nav を共有すると壊れるので、出力ごとに別のジョブ名(別ディレクトリ、または -jobname)を使います。