Typstとpdfpcでプレゼン機能を実現する
Table of Contents
背景・動機
Typstでスライドを作るフローがだいぶ固まってきた。
過去に普段資料はGoogle Slideで作成していたのだが、次の理由でGoogle Slideを使っていた。
例: AWS SQSとLaravelで大規模トラフィックを捌く - phpcon新潟
- Google Driveで管理できる
- 自己紹介部分など過去のスライドを流用できる
- 文字や画像の配置に自由度がある
- プレゼンター表示ができる
- スピーカーノートを別画面で確認できる
- 経過時間の計測ができる
管理方法やスライドに関するものはTypst力が上がればカバーできるが、プレゼンター表示に関しては何か対策を講じなければ代替できない。
今回は実際に登壇に耐えうるツールの選定と運用の検討をしたのでメモしておく。
試したこと・やったこと
0. ツールの選定
自分がプレゼンテーションモードに求めている機能をリストアップすると以下。
- MUST
- 登壇スライドとは別にスピーカーノートを別画面で確認できる
- 経過時間の計測ができる
- Typst内 or Orgファイル内でスピーカーノートを管理できる
- SHOULD
- 次スライドの表示
- 全体のスライド表示
- MAY
- ホワイトボード/ペンツール機能
- オフラインで機能する
- 動画やスライドアニメーションなどの制御
Typstから生成したPDFをそのままプレゼン資料として表示できるツールは無数にある。
Typstテーマを自作した にも書いたとおり、Typstのベーステーマに polylux を利用している。
polyluxのドキュメントを読んでいるとpdfpcと繋ぎ込む記述があり、これを用いるとスピーカーノートを実現できることが分かる。 可能な限り公式がサポートしているものを使う方が筋がよい、また要件を十分に満たしていることが確認が取れたので今回はpdfpcを選択した。
https://polylux.dev/book/external/pdfpc.html#pdfpc
1. Typstとpdfpcとの繋ぎ込み
pdfpc integrationは polylux-typ/polylux の src/toolbox/pdfpc.typ にある。 使い方は簡単で、次のように記述するだけでよい。
#import "@preview/polylux:0.4.0": *
#slide[
#toolbox.pdfpc.speaker-note("This is a note that only the speaker will see.")
]
polylux2pdfpcを使ってpdfpcファイルを生成する。
# PDFを生成
$ typst compile foo.typ
# pdfpcを生成
$ polylux2pdfpc foo.typ
foo.pdfpc
が生成される。
{
"pdfpcFormat": 2,
"disableMarkdown": false,
"pages": [
{
"idx": 0,
"label": 1,
"overlay": 0,
"forcedOverlay": false,
"hidden": false,
"note": "This is a note that only the speaker will see."
},
{
"idx": 1,
"label": 2,
"overlay": 0,
"forcedOverlay": false,
"hidden": false
},
{
"idx": 2,
"label": 3,
"overlay": 0,
"forcedOverlay": false,
"hidden": false
},
{
"idx": 3,
"label": 4,
"overlay": 0,
"forcedOverlay": false,
"hidden": false
},
{
"idx": 4,
"label": 5,
"overlay": 0,
"forcedOverlay": false,
"hidden": false
},
{
"idx": 5,
"label": 6,
"overlay": 0,
"forcedOverlay": false,
"hidden": false
},
{
"idx": 7,
"label": 7,
"overlay": 0,
"forcedOverlay": false,
"hidden": false
}
]
}
なお私はNixユーザなのでflake.nixで記述している。
2. pdfpcインストール
pdfpcはnixpkgsにあるのでインストールが簡単だが、手元のM1 Macだと次のようなエラーが出て入らなかった。
error: Package ‘webkitgtk-2.48.2+abi=4.1’ in /nix/store/dzwwydggypqg4p8r6if5zdaqyzhsxjkd-source/pkgs/development/libraries/webkitgtk/default.nix:254 is marked as broken, refusing to evaluate.
homebrewにもパッケージがあるのでこちらから入れた。
https://formulae.brew.sh/formula/pdfpc
次のようにコマンドを叩いて生成したpdfpcファイルと共にpdfを指定するとビューワーが起動した。
複数モニタにしてから起動すると手元PCには管理側の画像、外部モニターにはPDFが全画面で表示された。
$ /opt/homebrew/bin/pdfpc result/foo.pdf -R result/foo.pdfpc

3. pdfpcの使い方確認
マスタリングpdfpc - Qiita に操作方法が詳細に記述してある。
手元のM1 Macの場合は微妙にキーバインドが違うのか期待とおり動いてくれなかったので要練習。
j/k
で次のスライドに移動できない- ポインタやお絵描きのキーバインドが異なる
?
で画面上でkeybindを確認できるようだ。

得られた結果・所感
当初の目標であるGoogle Slideの脱却が今回の対応で可能になったのは個人的に大きい。 pdfpcの使い方に関しては登壇を通じて練習していきたい。
今後の展開・検討事項
登壇の場数を踏んでより洗練させていきたい。 登壇周りのすべてがプレーンテキスト(Org)で管理できるようになったので、次はAIによるスライド生成にチャレンジしたい。