beamerでスライドづくり：Tipsとカスタムテンプレート

2年ほど前から、beamerでスライドをつくるようになった。
自分なりのテンプレートや小技の蓄積ができてきたので、忘れないうちにまとめておく。
以下、サンプルのスライドを使って紹介していく。

- 主な内容
    - metropolisを少し修正したテンプレート
    - beamerで見やすいスライドを（楽に）つくるための小技
    - コードやPDFファイルは[GitHub](https://github.com/ishiihidemasa/pub_beamer-sample)に置いてある
- 注意
    - 今までに自分なりに蓄積してきたものなので、ベストプラクティスではない・行儀が悪い、などの可能性あり
    - 記事の主な内容はエンジン等に依存しないはずだが、GitHub上のコードをそのまま使う場合は、修正が必要になり得る
        - 筆者の環境：OSはWindows、vscodeでコードを書いて（latexmkrcを使って）LuaLaTeXでコンパイルしている
        - 違うエンジン（upLaTeXなど）を使う場合、数行に修正が必要
    - `tikz`も大事だと思うが、ここでは触れない

# metropolisベースのテンプレート
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794792/6e8573cd-f180-b6c3-2dd1-a2bef02e8f40.jpeg" width="720" max-width="100%" height="auto">

テーマは好きなものを選べばよいのだが、自分は普段、metropolisを使っている。
これはmetropolisをベースにすると、PowerPointでつくったスライドに擬態させやすいと思うから[^1]。
ただしそのままだとタイトル部分の文字サイズが大きすぎる（~~タイトルが長すぎる~~）、余白が大きい（~~情報を詰め込みすぎ~~）など不便なところもあったので、多少修正して使っている。
いちいち修正部分を書くのは面倒なので、カスタマイズする部分を`mybeamer.sty`にまとめて`\usepackage{mybeamer}`で読み込んでいる[^2]。
＊サンプルスライドのPDFファイルや`mybeamer.sty`は[ここ（GitHub）](https://github.com/ishiihidemasa/pub_beamer-sample)に置いてある。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794792/61b243a7-7e8e-1cd7-59bb-0e5241dd5446.jpeg" width="720" max-width="100%" height="auto">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794792/abc3f649-53f0-d423-dd28-099f52cc576d.jpeg" width="720" max-width="100%" height="auto">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794792/ad2dca1c-c2cb-033b-0c67-d5727a7a0620.jpeg" width="720" max-width="100%" height="auto">

# Tips集
## スライドを水平方向に分割したい
スライドを水平方向に分割して要素を並べたいときには、`columns`環境を使うのが便利だと思う。
```TeX
\begin{columns}
    \begin{column}{.2\linewidth}
        ...
    \end{column}
    ...
    \begin{column}{.4\linewidth}
        ...
    \end{column}
\end{columns}
```
このように書いて、次のようなスライドを作ることができる。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794792/eaf4a769-a390-eef2-c7a5-a99531e355fe.jpeg" width="720" max-width="100%" height="auto">
`minipage`環境を単体で（または`tabular`環境と組み合わせて）使うことで実現することもできるが、調整することの少なさやコードの簡潔さの観点で、`columns`の方が楽だと思う。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794792/59ddfc74-cd41-780a-f199-1457deae68dc.jpeg" width="720" max-width="100%" height="auto">


## ページ内の要素の幅を調節したい
ページの真ん中に小さい`block`環境をおきたい、というような場面が多々ある。
また`itemize`、`equation`などの環境も、内容と関係なく最大の幅（`\linewidth`）をとるので、いい感じに中央揃えにすることができない。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794792/2daed9d7-96fb-1a05-7422-fc706cda709d.jpeg" width="720" max-width="100%" height="auto">
こういう場面で`minipage`環境は非常に有用である。
```TeX
\begin{center}
    \begin{minipage}{.8\linewidth}
        ...
    \end{minipage}
    ...
    \begin{itemize}
        \item ...
    \end{itemize}
\end{center}
```
このように書けば、小さい`block`や中央揃え感のある`itemize`環境などを配置できる。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794792/66d855b7-a845-4e14-83eb-870230632c13.jpeg" width="720" max-width="100%" height="auto">

## 前のページを再掲したい
発表の最初と最後に概要スライドを入れたいなど、同じスライドを再掲したいことがある。
`frame`にラベルをつけておけば、`\againframe{label}`と書くことでそのページを挿入できる。
なお、ページ番号は新しく与えられる。
```TeX
\begin{frame}[label=hoge piyo]
    \frametitle{タイトル}
    ...
\end{frame}
...
\againframe{hoge piyo}
```
[GitHub](https://github.com/ishiihidemasa/pub_beamer-sample)上のサンプルスライドでは、`block`環境を例示したスライド（p.2）を7ページに再掲している。

## 図をきれいに並べたい
複数の図を配置したい場合、上の[スライドを水平方向に分割したい](#スライドを水平方向に分割したい)に書いた`columns`環境や`minipage`環境を使ってもよいが、最も直感的で挙動が安定するのは`tabular`環境だと思う。
```TeX
\begin{tabular}{ccc}
    1列目 & 2列目 & 3列目 \\ \midrule
    \includegraphics[height=.3\textheight]{figs/fig.jpg}
    &
    \includegraphics[height=.3\textheight]{figs/fig_mod.jpg}
    &
    \makecell{makecellを使うと \\ セル内で改行もできる}
\end{tabular}
```
これをコンパイルすると、下のように垂直方向の配置がずれてしまう。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794792/a646d2c8-98f0-a06e-b30d-2a9c421a8fb5.jpeg" width="720" max-width="100%" height="auto">
おそらく解決策は複数あるが、個人的には`\raisebox{lift}{内容}`を使う方法がわかりやすくて好き。
```TeX
\begin{tabular}{ccc}
    1列目 & 2列目 & 3列目 \\ \midrule
    \raisebox{-.5\height}{\includegraphics[height=.3\textheight]{figs/fig.jpg}}
    &
    \raisebox{-.5\height}{\includegraphics[height=.3\textheight]{figs/fig_mod.jpg}}
    &
    \makecell{makecellを使うと \\ セル内で改行もできる}
\end{tabular}
```
上のように書けば、垂直方向に中央揃えされる。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794792/9fe4df3a-8345-ee5e-0db5-9957700a5705.jpeg" width="720" max-width="100%" height="auto">

＊[このページ](https://latex.org/forum/viewtopic.php?t=21730)の回答を参考にした。

## 付録のページ番号を除外したい
発表で使う予定のスライドに加えて、質問対応用の補足資料をつくることが多い。
聴衆の中には、右下のページ番号を見て「残りNページだ」と思いながら聞いている人もいる。
そこで補足資料部分にはページ番号を振らないようにしている。
これは`appendixnumberbeamer`パッケージを読み込むことで実現できる[^3]。

```TeX
\usepackage{appendixnumberbeamer}
...
\appendix
\begin{frame}
    \frametitle{付録：...}
    ...
\end{frame}
```
このようにすると、`\appendix`以降のスライドにはページ番号が振られなくなる。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794792/48e975ac-f7d5-e797-3db6-34644c8d4bc9.jpeg" width="720" max-width="100%" height="auto">

## その他の小技集
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794792/3ad71320-5b6d-fd31-a08f-54ba6813399e.jpeg" width="720" max-width="100%" height="auto">

＊`description`環境については[別の記事](https://qiita.com/rockwell/items/884503d765695757d4c1)に書いたことがある。

# おわりに
以上、「正しい」のかはわかりませんが、自分が使っていて困らない方法をまとめました。
この記事には大雑把なことしか書かなかったので、具体的なコードが気になる場合は[GitHub](https://github.com/ishiihidemasa/pub_beamer-sample)にある`main.pdf`、`main.tex`と`mybeamer.sty`を見てみてください。

個人的には**見た目の細かいことを考えずに済む**点がbeamerの良さで、この記事に書いたことと最低限の調整（空白やフォントサイズなど）ができれば十分だろう、と思います。
なにか調整したいことがあったとき、少し調べてもわからないときは「beamer的には不要な（無駄な）調整なんだ」と**割り切ってあきらめる**のも悪くない気がします。


[^1]: beamerの存在が忘れられていて「Powerpointで作成したスライドを事前に提出せよ」と指示されることがある。
こういうときに、いかにもbeamerな見た目のスライドを提出するのは気が引けるのである。
[^2]: この方法では結局`mybeamer.sty`を`.tex`ファイルと同じディレクトリにコピペしないといけない。
たしかに手間だが1回きりだし、スライドごとに`.sty`ファイルの中身を編集したい場合もあるので、ちょうどいい妥協点だと思っている。
なお、`.sty`ファイルをこうやって使うのが推奨されるのかはわからない。
[^3]: `appendixnumberbeamer`では付録部分に一切ページ番号が振られないが、ページ番号が欲しい人もいると思う。
他にもやり方（パッケージ）はあるのだが、いまのところ自分の用途には`appendixnumberbeamer`で十分、というところである。