Sokratesさんの備忘録ないし雑記帳

書きたいことを書いている.駄文注意.

Beamer でスライドと配布資料を同時に作る方法

この記事は TeX & LaTeX Advent Calendar 2023 - Adventar の 19日目の記事です.遅刻して申し訳ないです.
adventar.org
←昨日 相関係数格付けチェックを作る ~目指せ相関係数ソムリエ!~ - TeX Alchemist Online
→明日 [TeX] [LaTeX] 簡単に 𝕏 を出力したい。 - East Opera 2024

数学徒は Beamer でスライドを作る人が多いです.そういう場合,スライドファイル自体を配布資料とする人も多いです.しかし,配布資料にアニメーション(一部の項目を隠した状態のスライドとか)が残ってしまっている人をたくさん見かけます.そうすると,配布された側としては次のように感じます:

配布資料は前後のスライドなどを確認するのに使いたいのであって,アニメーションそのものを見たいわけではない.無駄にファイルの容量デカくするな💢💢💢
印刷するときも無駄に大変だろ💢💢💢

そうならないようにするためにアニメーションをなくしたスライドも欲しくなるはずです.Beamer にはそういうのを簡単に作る機能を提供しています.
この記事は,その使い方を知らない人や「その機能使うの忘れがち」となる人が少しだけ幸せになる記事のはずです,たぶん.

Beamer の handout オプション

Beamer でアニメーション抜きのスライドを作るための方法について説明する.
Beamer によって作ったアニメーション付きスライド からアニメーション抜きのスライドを作るには handout オプションを使えば良い.使い方は簡単.Beamer スライドのファイルのたとえば,

\documentclass[notheorems, aspectratio=169, 12pt, unicode]{beamer}

と普段なっているところを

\documentclass[notheorems, aspectratio=169, 12pt, unicode, handout]{beamer}

とすれば良いだけである."handout" を追加するだけ!簡単だね.
handout オプションにはもう一つ良いところがある.一部のスライドや記述を抜いたものを配布資料として作れるというものである.たとえば,

\begin{frame}{問題}
とてもむずかしい問題
\end{frame}
\begin{frame}<handout:0>{答え}
とてもむずかしい問題の答え
\end{frame}

とすれば,答えのスライドだけ抜いた配布資料を作ることができる.他に

\begin{frame}
\begin{itemize}
\item hoge
\item<handout:0> boo!
\item fuga
\end{itemize}
\end{frame}

とすれば,配布資料には "boo!" は表示されない.handout オプションかしこい.

ただ,handout オプションには一つ罠がある.「一度 handout にしたのをそのまま忘れて,アニメーション抜きのスライドで発表するはめになる」やその逆の「ついつい handout をつけ忘れたものを配布してしまう」という事故がよく起こるのである.これを防ぐためにはどうすれば良いのだろうか.
いっそスライドと配布資料を同時に作ってしまえば良いのではなかろうか.

スライドと配布資料を同時に作ろう

スライドと配布資料を同時に作る方法として,わたしが取っているのは次の方法である*1.
まず,

  • slide.tex (スライドの中身)
  • mypre.tex (プリアンブルの内容を書いたファイル)
  • handout.tex (配布資料のファイル)

という 3 つのファイルを同じディレクトリに用意する.それぞれのファイルの中身を次のようにする.

  • slide.tex
\documentclass[notheorems, aspectratio=169, 12pt, unicode]{beamer}  %オプションはお好みで
\input{mypre}
\begin{document}
%%% いつも通りにスライドを作る %%%
\end{document}
  • mypre.tex
\title{hoge}
\author{fuga}
\date{\today}
\usepackage{amsmath,amssymb,amsthm}
%%% いつも通りのプリアンブルを書く %%%
  • handout.tex
\documentclass[notheorems, aspectratio=169, 12pt, unicode, handout]{beamer} %handout 以外のオプションはお好みで.ただし,handout 以外のオプションは slide.tex と同じにすること
\input{mypre}
\usepackage{docmute} %トリックの肝となるパッケージ.\input{mypre} より後に置くこと.
\begin{document}
\input{slide.tex}
\end{document}

このとき,slide.tex をタイプセットすればスライドが,handout.tex をタイプセットすれば配布資料版が手に入る.この方法を取れば,タイプセットした段階でスライドと配布資料が別の名前の別ファイルになってくれるので,「スライドと配布資料の取り違え」という事故が起きにくい.
この方法のトリックは docmute パッケージにある. docmute パッケージは「input するとき,\\begin{document} ~ \\end{document} の間だけを読み込む」というようにしてくれる.上記のようにファイルを作れば handout オプション以外のプリアンブルは共通しているようになるので,handout.tex をタイプセットすると,slide.tex に handout オプションをつけたファイルが生成される.

まとめ

この記事では Beamer でスライドと配布資料を同時に作る方法を紹介した.もっと賢い方法があれば教えてください.

おまけ:サンプル(2023/12/26 追加)

以下に今回の handout オプションのサンプルになるような Beamer スライドを置いた.参考にしてほしい.
github.com

*1:正確には make なども使ってもっと楽している部分もあるが,本質だけ抜き出している.