Orgモードでプレゼンテーションをつくる
Orgモードでプレゼンテーションを作る
Orgモードはあいかわらず便利で、いろいろと活用している。 プレゼンテーションも作れてしまうというので、今回挑戦してみた。
非公開のイベントでの報告なので、サンプルを出せないのが心苦しいところだが、時間があればサンプルを追加してみよう。
PowerPointではなく、Orgモードでプレゼンテーションを作るメリットはいくつかある。
- プログラムの計算結果をそのまま掲載できる
- LaTeXで書いたものをタイプセットして出力できる
- エディタで書類を作成できる
- テンプレートがまともならデザインに気を使わなくてよい
正直、テンプレートはそこまで良いとは思わないのだが、前3者は重要だ。 特に、エディタで編集できるというのは大きなメリットだ。
Orgモードでプレゼンテーションをつくるには、従来はBeamerを使うのが一般的だったようだが、最近はReveal.jsの使用がよいようだ。
BeamerはLaTeX用のものであり、最終的にはPDF書類が出来上がるので、それをフルスクリーン表示してプレゼンテーションする。(と理解している)
それに対して、Reveal.jsは、ブラウザにプレゼンテーションを表示して、PowerPointのプレゼンと同じようにプレゼンを行える。PowerPointのプレゼンテーションモードをJavascriptで書いてしまったようなものだ。発表者用画面も使えるし、ポインタでマークしたりペンで書いたりもできる。
テンプレートに関してはあまり気にしていない。僕のうプレゼンは営業用ではなく、レクチャーと学会報告用にプレゼンを作ることが多いので、デザインに凝る必要はない。 だから、プレゼンソフトはなんでもいい。 資料を作成しやすいかどうかだけが重要だ。
論文などの文書作成では、Org-modeにより脱Wordを実践している。計算はPythonにより脱Excelできている。おまけにPythonもbabelの存在のおかげで、Orgモードの文書中に書き込める。(これはJupyterと同じようなものだ)
というわけで、プレゼン作成もOrgモードで完結できれば便利なことこのうえない。
しかも、今回は一つの文書で調べ物メモと出版原稿、スライドをまとめて作成する。 やってみて、そこまでやる必要もないなあとは思ったのだが、まあ、やってしまったものはしょうがない。
修正予定
- リンクをいろいろ追加
- サンプルファイルを追加
- スクリーンショットを追加
Reveal.js+Org-modeを使うメリット
PowerPointを使いたくない!ということだけで見れば、代替手段はいろいろとある。
そのなかでReveal.jsとOrg-modeをあえて使う意味があるのか?という問いへの答えはYES!だ。
スライドを横と縦に配置:Reveal.jsを使うメリット
Reveal.jsの最大の特徴は、スライドを横と縦に並べてプレゼンできる点だ。
普通のプレゼンは一方通行だが、実際にはセクション的なものがある。セクションのタイトルページがあって、各セクションのコンテンツがある。
PowerPointはそれをセクションという形でまとめるが、Reveal.jsはそれを横と縦の関係で整理する。 普段のプレゼンは右に流れていくが、より詳細な説明をするときは、下のスライドを表示する。
公式サイトの画像がわかりやすい。
これって、話をしている相手にもイメージを掴んでもらいやすい。
そして、作成時は普通の文書のように、スライドをツリー状に構造化して把握できる。
プレゼン、つくりやすくないだろうか?
PowerPointのばあいは、セクションを入れ子にはできないと思う。 少し長いプレゼンになると、ここが大きなメリットになる。
Reveal.jsを使う
Reveal.jsを使うための設定は、ネットにたくさんあるので今回は割愛する。
emacsのorg-modeでは、org-re-revealというパッケージがある。僕はこれを使っている。
なぜわざわざorg-mode?という疑問もあるだろうけれど、長期的に見るとorg-modeを習得することは作業効率の改善に大幅に役立つ。
org-modeでの3段階目までの見出しが新規ページに相当して、見出しが各ページのタイトルになることだけ理解していれば、とりあえずプレゼンを作ろうと思えばつくれる。
その他のことは作りながら、調べていけばよい。
僕の場合は、次節のような悩みが出た。解決策とともに紹介しておく。
悩みどころ
タグは表示したくない
org-rereveal、なぜか見出しのあとにあるタグを表示してくれるので、これは設定で消す。 方法は二つある。
簡単な方法は、設定かヘッダーでtags[]:nilを指定すること。
#+#+OPTIONS: tags[]:nil
Reveal.jsを使うにあたって、この点はrerevealの特性かと悩んだのだが、他の形式でエクスポートしてもタグは表示されていた。 なんのことはない、普段の文書はテンプレートから挿入しているから、意識していなかっただけだった。
もう一つは、「特定のタグだけ消したい」というときに使えるものだ。CSSの設定を使う。
例えば、presenというタグを使っているときは、以下のようにする。
まず、以下のようにCSSファイルを追加しておく。
#+REVEAL_EXTRA_CSS: ./custom_reveal.css
cssファイルの中身では、次のように指定する。
#+.reveal span.presen { visibility: hidden; }タグで出力を抽出したい
当初は、Sparse Treeで必要な範囲を抽出して出力が良いのかと思った。ほんとうに表示されているものしか出力できないので、うまくない。
ここは、以下のように「出力しないタグ」を指定することで対応する。
プレゼン作成時のメモ的なものには全部このタグをつけておけばよい。 いちいちつけるのが面倒ではあるけれど、一つのファイルで完結させようと思うと、まあ、しょうがないかな。
#+EXCLUDE_tags[]: notes
LaTeXに出力するとエラーが出る
ときどき、プレゼンファイルではなく、ふつうにLaTeXでタイプセットして出力したくなるときがある。 だが残念ながら、LaTeXでコンパイルエラーが出る。
どうやら、発表者用メモ(begin_notes)が、LaTeXでエラーになる。
これは、LaTeXに出力されるときに、begin{notes}end{notes}に変換される。 しかし、この「NOTES環境」はLaTeXに存在しない。 だからエラーが出る。
存在しないなら存在させれば良い、ということで以下の設定を追加しておく。
LATEX_HEADER: \newenvironment{NOTES}{\begin{quote}}{\end{quote}}
ちなみに、LATEX_HEADERには普通のLaTeXを書ける。 だから、usepackageも書けるし今回のようなnewenvも書ける。 覚えておくといろいろ便利だ。
タイトルスライドを変えたい
タイトルスライドに、例えば主催者情報を入れたいとかあると思う。 そんなときは、以下のようにスライドをHTMLでそのまま指定してしまえば書けてしまう。
%tとか%sはドキュメントにある通り、タイトル、サブタイトルだ。
簡単だけど、とても便利な方法だ。
#+REVEAL_TITLE_SLIDE: <h1>%t</h1><h3>%s</h3><h3>%A %a</h3><p>@ABC Project</p><p>My Affiliations</p><p>%e</p>
この他に、タイトルスライドは別途HTMLファイルを用意して読み込む方法もある。 試していないから便利かどうか評価できない。
グリッド使って、いろいろ指定したい。
HTMLをこんな感じで指定できるので、doubleクラスをcssで指定してやるなどすればいろいろできる。
#+REVEAL_HTML: <div class="double"><div>
ちなみにcssはこんなふうにしておく。
.double { display: grid; grid-template-columns: 1fr 1fr; }
僕はcssがあんまりわからないので、ちょこっとだけ修正したいときにcssをいじる。 詳しくて、ガッツリいじりたい人はもっといじってよい。ある程度いじると、「テーマ」につながる。
Revealのテーマってあまりないみたいなので、公開すると喜ばれそうだ。
最終的な方針
こんな感じで試行錯誤しながら、Reveal.js+org-modeが実際に使えるか試している。
今のところは便利に使っている。
素のHTML=素のReveal.jsを書けるのは便利だけれど、このあたりをもう少しきれいにorg-modeでラップできるとよいなあとは思う。
そろそろ、HTMLもLaTeXも書いたことがない、書けないという世代が増えてきそうだ。 そういう人たちもReveal.js+org-modeの世界に入ってこれるようになってほしい。