markdown で手軽に綺麗なプレゼン資料作成 + pympress によるマルチメディア対応

内容どうでもいいのでサクッと試したい人は下記リンクにサンプルをご覧ください．
追記してほしい内容など気軽にコメントください！

https://github.com/taishi-n/pandoc-beamer-sample

## 背景

研究発表を行ううえでスライドによるプレゼンテーションが広く行われています．
プレゼンテーション資料の作成には Microsoft Powerpoint （以下，ﾊﾟﾜﾎﾟ）をはじめとした WYSIWYG ソフトウェアが広く利用されています．
しかし著者のように世の中にはﾊﾟﾜﾎﾟに疲弊している人が少なからずいるはずです．
著者はﾊﾟﾜﾎﾟの代わりとして beamer を愛用しています．
そこで本記事では，ﾊﾟﾜﾎﾟに疲弊している研究者のためにﾊﾟﾜﾎﾟと beamer の長所短所をまとめ，あえて beamer を使いたい人のためにいくつかのツールを紹介します．

### 想定読者

- きれいな数式の入った研究発表したい
- beamer で発表者ノートや動画・音声を入れたい
- markdown でサクッとプレゼン資料を作りたい
- ﾊﾟﾜﾎﾟのﾏｳｽﾎﾟﾁﾎﾟﾁがめんどくさくてたまらない
- GUI よりも慣れ親しんだエディタで素早くテキストを編集したい

### ﾊﾟﾜﾎﾟを辞めたい瞬間

著者はﾊﾟﾜﾎﾟアンチというわけではありません．
著者もかつてﾊﾟﾜﾎﾟをよく使っていました．
研究成果を指導教員に報告するために，あるいは学校の課題のためにしょっちゅうﾊﾟﾜﾎﾟを使っていました．
便利機能満載なﾊﾟﾜﾎﾟですが画面を叩き割りたくなるような瞬間もかなり多くありました．

- ミスタッチでレイアウトが崩れる
  - ヒトの目と手でマウスポインタを制御するという無茶な操作のためにテキストボックスを間違って数ピクセル動かしてしまいページを送ったときに少しズレるというスライドものすごくダサくないですか？
- 数式がかっこよくない
  - デフォルトの数式エディタが使いづらい＆結果がダサい
  - IguanaTeX を使えばかっこいい数式は入れられますがテキスト少し増やしてテキストボックスがサイズ自動調整されて再びドラッグ&ドロップと眼力で調整するのに疲れませんか？
- バージョン管理に向いていない
  - ファイル名でバージョン管理することもあると思いますが，マルチメディアを含んだﾊﾟﾜﾎﾟはファイルサイズが肥大しがちです．バージョン更新のたびにほとんど同じファイルを複製するのはバカらしくなりませんか？
  - ﾊﾟﾜﾎﾟ内部の xml でバージョン管理している強者もたまにいるらしいですが…
- シンプルに重い
  - 起動にかかる数秒のうちに Vim で 4 行くらい修正できます

これらの欠点を克服するべく著者は beamer での発表資料作成に切り替えました．

### beamer とは

[beamer](https://ctan.org/pkg/beamer) は LaTeX でプレゼンテーション資料を作成するためのパッケージです．
なぜわざわざ beamer を使うかについては色々ありますが，著者が感じている大きな理由は次の通りです．

- LaTeX の美しい数式を使える
  - やはりなんといってもこれでしょう， LaTeX の数式は息を呑むような美しさを感じます
  - LaTeX で学会の予稿を書く場合は原稿のコードから式や表現を使いまわせて便利です
- テンプレートの変更・統一がしやすい
  - ﾊﾟﾜﾎﾟのスライドマスターとかなんとかいう機能よりもよっぽど管理しやすいです
  - 例えば [こちらの記事](https://qiita.com/hiterm/items/70cbb488e7a87cd9e228) でクールなテーマが多数紹介されています
- 数式や図表をテキストで簡単に管理できる
  - 実験報告のために大量の図表を入れた資料を作成することは大学院生・研究者の日常かと思います
  - そのたびドラッグアンドドロップと目力調整ﾏｳｽﾎﾟﾁﾎﾟﾁでﾊﾟﾜﾎﾟの画面に入れるなどまどろっこしくて耐えられませんよね？
  - 位置や大きさの指定はテキストで指定したいというのが人情というものでしょう
    - ﾊﾟﾜﾎﾟでも `図の書式設定` > `書式ウインドウ` > `サイズとプロパティ` から指定できますがﾏｳｽﾎﾟﾁﾎﾟﾁが多すぎて途中でﾏｳｽを投げたくなります
- 無料
  - ﾊﾟﾜﾎﾟなどに金をかけたくありません

しかし， beamer は LaTeX に慣れ親しんだ人でないとハードルが高いためかあまりメジャーな発表手段ではないようです．
beamer のハードルとしては次が挙げられます．

- LaTeX 記法が難しい [^1]
  - 箇条書きひとつ書くためだけに `\begin{itemize}` だの書く方がかえって時間がかかる！という主張，よくわかります
- 即座に編集結果が得られない
  - beamer はコンパイルが必要なため少し修正するのに若干のタイムラグが発生しがちです
  - 発表練習後の指導教員からのフィードバックをすぐに反映できなくて気まずい思いをしたことがよくあります
- コンパイルエラーがよくわからん
  - がんばりましょう [^3]

### ﾊﾟﾜﾎﾟと beamer

現在のところ，論文は LaTeX で執筆するが発表はﾊﾟﾜﾎﾟで行うという人が圧倒的多数に思えます．
[Marp](https://github.com/marp-team/marp), [Slidev](https://github.com/slidevjs/slidev) など， beamer 以外にもテキストベースのツールはありますが，それらを用いた研究発表はかなり少数派と思われます．
ﾊﾟﾜﾎﾟが事実上の標準となっている理由は多く考えられますが，ﾊﾟﾜﾎﾟならば簡単にできて beamer では難しい点として次が挙げられます．

- 発表者ノート
  - 国際学会で英語で発表する際には大きな心の支えになります [^2]
- 動画・音声の挿入
  - 音声・音響の研究者が発表で音を聞かせられないというのは大きな損失です

悔しいですがこれらの機能はﾊﾟﾜﾎﾟの強みとも言えるでしょう．
ChatGPT にﾊﾟﾜﾎﾟと beamer の利点・欠点をまとめてもらうように指示したところ下記の回答が得られました．

- **PowerPoint**は、ビジュアルデザインやアニメーションが重要なビジネスプレゼンや一般的な発表に最適で、手軽に使える反面、複雑な数式や学術的な内容を扱うのは少し不便です。
- **Beamer**は、特に数式や学術的な発表に強く、一貫性のあるスライドを作成したい場合に適していますが、LaTeX の知識が必要で視覚的デザインや編集の柔軟性が制限されます。

やはりどんなツールも一長一短あり，なんでもできるツールはありません．
結局はﾏｳｽﾎﾟﾁﾎﾟﾁが耐えられる，好みのエディタで素早くテキストを編集したいかどうかが最終的な基準かと思います．

これまで述べた beamer の欠点はいくつかのツールを使えば克服できます！
具体的には次の 2 つのツールで手軽かつﾊﾟﾜﾎﾟに劣らないビジュアルな研究発表ができるようになります．

1. pandoc
   テキストファイルを様々な形式に変換するツール
2. pympress
   beamer など pdf の発表資料でプレゼンを行うことに特化した PDF ビューワー

## 方法

以下では macOS または Ubuntu を想定していくつかのツールを紹介します．
ｳｬﾝﾄﾞｳｽﾞとかなんとか使ってる人は WSL だとかそんなやつを使ってください．

### pandoc を用いた markdown から beamer への変換

LaTeX を直接編集せずに markdown でサクッと beamer を書くところから始めましょう．
まずは [pandoc](https://github.com/jgm/pandoc) のインストールです．
pandoc は汎用のドキュメント変換ツールです．
markdown から pdf, HTML, LaTeX, ﾊﾟﾜﾎﾟへの変換など多様なファイル形式の変換に対応しています．
各種パッケージマネージャで簡単にインストールできます．

- macOS
  ```
  brew install pandoc
  ```
- Ubuntu
  ```
  sudo apt install pandoc
  ```

次に簡単な markdown を書いて適当なディレクトリに保存しましょう．

```markdown:slide.md
---
title: "pandoc でサクッと beamer"
author: "taishi"
date: \today
theme: metropolis
---

## h2 ヘッダ

- デフォルトでは次のように変換されます
  - h2 ヘッダ: `\begin{frame}` -- `\end{frame}`
  - h3 ヘッダ: `\begin{block}` -- `\end{block}`

### h3 ヘッダ

h1 ヘッダは使わない方がいいらしいです [^1]

[^1]: https://qiita.com/munieru_jp/items/fff0807f89c2896e701a

## 基本構文

### 箇条書き

- 箇条書きも簡単！
- もう `\begin{itemize}` なんて書いてられるか！

1. もちろん順序つきリストだって簡単！
2. いちいち `\begin{enumerate}` なぞ書いてられん！

### 数式

$$\mathbf{x} = A \mathbf{b}$$
```

さっそくこれを beamer プレゼンテーションに変換したいのですが，デフォルトのままでは日本語の組版に対応していないため少し工夫が必要です．
まずは次のようなファイルを作成しましょう．

```latex:header.tex
\usepackage{luatexja}
\usepackage{luatexja-fontspec}
\renewcommand{\kanjifamilydefault}{\gtdefault}
```

これで準備は整いました．
いよいよ markdown を beamer プレゼンテーションに変換しましょう．

```bash
pandoc --include-in-header=header.tex --pdf-engine=lualatex -t beamer slide.md -o slide.pdf
```

図のような pdf ファイルが生成されていれば成功です！

![page-0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176459/c7e27ea1-873f-c81f-cabd-99159ae84f56.png)

![page-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176459/7ed29ee2-0ec6-2050-9f9e-70a416784316.png)

![page-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176459/c4ad4194-4755-44a5-30e0-31e5babbd472.png)

### pympress を用いた beamer プレゼンテーション

[pympress](https://github.com/Cimbali/pympress) は pdf でプレゼンテーションを行うためのフリーのソフトウェアです．
インストール方法は公式 HP を参考にしてください．
下記コマンドで GUI が起動します．

```bash
pympress
```

pdf を直接指定することもできます．

```bash
pympress slide.pdf
```

うまくできていれば図のような画面が表示されます．

発表者ツール
![pympress0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176459/7f8a11c4-610c-e3bf-32cb-91affd6d3520.png)

セカンドスクリーン
![pympress1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/176459/6b658084-ed61-d2f9-9ac3-aef44e3bbaaa.png)

これであなたもﾊﾟﾜﾎﾟを卒業し穏やかな研究生活を送れるはずです．

markdown に次のようなブロックを挿入することで発表者ノートが追記されます．

```markdown
::: notes

- これはノートです
- LaTeX でいい感じにオプションを設定すると pympress で発表者ノートとして表示できます

:::
```

詳しくは [サンプル](https://github.com/taishi-n/pandoc-beamer-sample/blob/main/slide_note.pdf) をご覧ください．

## 応用編

思いついた時に追加予定です．
特に気になるものがあればコメント残してください．

- pympress の詳しい使い方
- いい感じな目次ページの挿入
- minted を用いた綺麗なコードハイライト
- よくある beamer のエラー対処法
- pandoc のオプション解説

## 参考文献

### 本記事で用いたもの

- [beamer](https://ctan.org/pkg/beamer)
- [pandoc](https://github.com/jgm/pandoc)
- [pympress](https://github.com/Cimbali/pympress)

### その他ツール

- [pdfpc](https://github.com/pdfpc/pdfpc)
  - pympress のような dual screen で pdf のプレゼン資料を共有するソフトウェアです
  - json で発表者ノートを管理できます
  - 最近開発が止まっているようです…
- [SlidePilot](https://github.com/SlidePilot/SlidePilot-macOS)
  - pympress のような dual screen で pdf のプレゼン資料を共有するソフトウェアです
  - rtf で発表者ノートを管理できます
  - macOS 専用です
  - 同じく最近開発が止まっているようです…

### 紹介記事

- [pandoc-beamer-how-to](https://github.com/alexeygumirov/pandoc-beamer-how-to)
- [パワポが嫌い？LaTeX で作ろう！ #Beamer #プレゼンテーション - Qiita](https://qiita.com/alpaca-honke/items/bc2ba5a8a68ba5eb3b5a)
  - やはりマウスが嫌いな人は使い慣れたエディタでテキストを編集したいようです
- [第 644 回　ノート表示にも対応したプレゼンテーションツール Pympress | gihyo.jp](https://gihyo.jp/admin/serial/01/ubuntu-recipe/0644?page=4)
  - 画像つきで詳しい使い方がのっています

[^1]: [Typst](https://github.com/typst/typst) や [SATySFi](https://github.com/gfngfn/SATySFi) などイケてるシステムも最近開発されているようです．
[^2]: 著者はかつて，発表者ノートを見たいがためだけに beamer で作成した pdf をすべて画像に変換しﾊﾟﾜﾎﾟに変換しその上で発表者ノートを作成するという馬鹿げた行為をしたこともあります．
[^3]: 親切なエラーがほしければ [SATySFi](https://github.com/gfngfn/SATySFi) とか使うといいと思います， [slydifi](https://github.com/monaqa/slydifi) などもあります