ichiroc subset

書きながら考える・考えをまとめる場所

org-mode からプレゼンテーションスライドをreveal.jsで作成する

背景 「org-mode でプレゼンスライドも作りたい」

org-mode で TODO管理、プロジェクト計画、資料作成を行っている。 最近はHTMLスライドが流行っていて、その中でも reveal.js が良さそう。 会社のブラウザはモダンじゃないケースばかりだけど、PDFにも対応しているので問題無い。

org-mode でスライドを作る事が出来ると楽なので、実現する ox-reveal と合わせて導入する。

準備

プレゼンライブラリの reveal.js と org-mode ファイルを reveal.js 形式にする ox-reveal を用意する。

reveal.js のダウンロード

公式ページ、あるいはGithubのページからライブラリ一式をダウンロード。

ox-reveal のインストール

M-x package-install ox-reveal

init.el に追加

;; ox-reveal の読み込み require じゃない
(load-library "ox-reveal")

ox-reveal 使用方法

reveal.jsディレクトリは書き出し先に配置してある必要が有る。 org-mode ファイルを開いた状態で

  • C-c C-e R R でプレゼンファイル書き出し
  • C-c C-e R B でプレゼンファイル書き出して開く

...と思いきや C-c C-e R B が効かない。 ファイルの書き出しはされるが、開くタイミングで下記のエラーが発生している。 browse-url-default-windows-browser: ShellExecute failed: 指定されたファイルが見つかりません。

どうやら ./hoge.html というパスで開こうとしていて、 会社のWindows では ./ の解釈が出来ない様子。

ox-reveal (on Windows) 問題点

  • Windows でもC-c C-e R B を動作させたい
  • reveal.js ディレクトリをいちいち配置するのが結構面倒

ox-reveal 改善コード

(setq my-reveal-src-dir "/path/to/reveal.js-dir")

;; Windows だと C-c C-e R B でファイルを開くのに失敗するので,修正モンキーパッチ
;; ついでにエクスポート先に reveal.js ディレクトリが無ければ、ソースディレクトリからコピーする処理を追加
(defun org-reveal-export-to-html-and-browse
  (&optional async subtreep visible-only body-only ext-plist)
  "Export current buffer to a reveal.js and browse HTML file."
  (interactive)
  (let ((reveal-src-dir my-reveal-src-dir)
        (export-dir (file-name-directory buffer-file-name))
        (export-file (org-reveal-export-to-html async subtreep visible-only body-only ext-plist)))
    (unless (file-directory-p (concat export-dir "reveal.js"))
      (copy-directory reveal-src-dir export-dir))
    (browse-url-of-file (expand-file-name export-file))))

まとめ

Windowsで開くようになったし、いちいちreveal.jsの配置を意識しなくても良くなった。 これでプレゼン資料が捗る。 快適。