紹介
org-mode からプレゼンを出力する手段は過去にもいろいろとありました。
- org-html5presentation をつかう
- ox-latex から beamer, ないし ox-beamer
- ox-html から org-info を使う
etc, etc.
ただ、html5presentationは、環境依存かもしれませんがスライドがズレる。
beamerは latex style をいじるのがめんどうくさい(cssよりは面倒)
org-info はカスタマイズの自由度が少ない。
いえ、やろうと思えば出来るんですが、癖があり、また機能が足りない。
癖というのは、スライドの遷移に innerHTML のコピペをつかっているので、
javascriptで登録したハンドラなどが消えてしまう点です。
機能面は、たとえば任意の章立てへのジャンプはありますが、
普通のプレゼンにはある「リストの折りたたみ」ができない点など。
あと、org-infoで一番むかつくのはあれですね、ソースが異様に長いところですね。
https://github.com/SebastianRose/org-info-js
なんなの2000行って。 抽象度高いクラスタの人間を殺す気か(怒)(違)
まあ、jqueryなど外部ライブラリに依存していないので、長くなるのは仕方ないのかもしれませんが。
しかし、これでは誰も手を付けられませんね。
まあそういうことで、いままでは org-info 付きで生成されたhtmlを
うまくスタイルシートでごまかしてプレゼンをやってきたのですが、
ついに我慢できなくなり、半日ぐらいで自作しました。
リポジトリはここにあります。
https://github.com/guicho271828/another-org-info
一応、プレゼンに必要な機能、つまり
- 次のスライドへ移動、またはリスト展開 n
- 履歴機能 (pは、「一つ前のスライドにもどる」という意味です)
- 任意セクション移動 s
は実装してあります。残る機能は 現在スライドNo./全体スライド数 の表示とかですかね。
使い方
- リポジトリを git clone でコピーしてください。こうすれば、ついでに自動でバージョン管理がセットアップされるので
うれしいですね。ただ、できれば branch を分けてから編集したほうがいいかも。 - presen.org を編集して、org-mode の通常の html export を行なってください。1セクションが1スライドです。
リストは展開されます。 - それだけです。 必要な設定は presen.org の中にすでに書いてあります。
拡張方法
コードはだれでも理解しやすいよう短く単純に書いたので、jsがわかる人ならたぶん誰でも拡張できます。
ただし、一応 コードがどういう順で書かれているかは書いておきます。
- CSS 関連や セクション関連のヘルパー関数。 80行目当たりまで
- スライドをあらわすクラス
Slide
。 グローバル変数slide
. - onload 関数の実装。
- キーバインド。
キーバインドの拡張方法ですが、 keyManager
のハッシュに、
打ち込まれる文字の名前(nやp,s)をキーにして関数を代入してください。
たとえばこんな感じです。
keyManager.p = function(){
console.log(slide.level);
slide = slide.prev();
slide.show();
};
いずれ複数キーストロークにも対応させるつもり。 << やりました。