orgで書き捨て その2
前回のwkhtmltopdf版は便利に使っているんだけど、いまいち出来上がるpdfが綺麗くない。ちゃんとスタイルシートを書けばいいんだろうけど、どうせ書き捨てなんでそこまでやる気もない。orgにはLaTeXの他にもdocbookからpdfにexportできるので、今度はこれを使ってみようかと。なんとなくハマリそうだったので、今までdocbookは避けてたんだけど…取り敢えず動くようになったんでメモ。
準備
外部のモロモロを事前に準備する必要がある。これはorg-export-docbookをcustomize-groupするとあらかた見当がつく。- org-export-docbook-xslt-proc-command
- org-export-docbook-xsl-fo-command
- org-export-docbook-xslt-stylesheet
こんな感じ。まず、org-export-docbook-xslt-proc-commandはcygwinのxsltprocを使うことにした。あ、cygwinとgnupackさんのNTEmacsユーザーです、ワシは。cygwinでlibxml2とlibxsltをインストール。
次にorg-export-docbook-xsl-fo-commandだが、コイツはApache FOPを使うことに。ダウンロードして適当なところに置いておく(FOP_DIRとする)。
さらにorg-export-docbook-xslt-stylesheetですが、これもここから最新のdocbook-xsl-1.76.1というのをダウンロードして、適当なところに置いておく(DOCBOOK_XSL_DIRとする)。
テスト
ここで手動でpdfを生成してみる。まずhoge.orgをorg-export-as-docbookしてhoge.xmlを生成しておいて、
$ xsltproc --output hoge.fo $(DOCBOOK_XSL_DIR)/fo/docbook.xsl hoge.xml $ $(FOP_DIR)/fop hoge.fo hoge.pdfとやってみる。一応pdfができたのだけれど、日本語の文字がががががが…ぐぐるとfopに日本語フォントをしらせてやらんといかんみたい。
FOPに日本語フォントを
で、このあたりを参考に、MSゴシックとMS明朝のフォントメトリクスを抽出して、fopのuserconf.xmlを書く。ちなみに現在の版(fop-1.0)だと、特に指定しない場合はconfは読まないみたいなので、confフォルダにあるfop.xconfをuserconf.xmlにコピーして、フォントメトリクス部分を先のリンクのように変更。ただし、metrics-file、embed-fileはそれぞれmetrics-url、embed-urlに変更する必要があった。
これで再度手動でPDFを生成してみる。
$ $(FOP_DIR)/fop -c $(FOP_DIR)/conf/userconf.xml hoge.fo hoge.pdf
おー、でけたでた。日本語もちゃんと見えるじゃまいか。
全部まとめてemacsに設定
ここまでくるとあとは楽。先ほどのcustomize-groupで
- org-export-docbook-xslt-proc-command ⇒ $(CYGWIN_BIN)/xsltproc.exe --output %o %s %i
- org-export-docbook-xsl-fo-command ⇒ $(FOP_DIR)/fop.bat -c $(FOP_DIR)/conf/userconfig.xml %i %o
- org-export-docbook-xslt-stylesheet ⇒ $(DOCBOOK_XSL_DIR)/fo/docbook.xsl
と設定してやってM-x org-export-as-docbook-pdfっと。
あれ、エラーになる…
例によってパスに日本語が入ってるんで、うまく外部コマンドが動いてないっぽいんだけど、edebugで見てたらなんかちょっと変。パスに入っている日本語文字が、ご丁寧に一文字づつ\\でエスケープされてる。うーん……
org-export-as-docbook-pdfのソースを見たら、shell-commandに渡すパスをshell-quote-argumentでエスケープするようになってる。ちょっと悩んだけど、まあ悩んでいても仕方ないんで、org-export-as-docbook-pdfからよばれたらshell-quote-argumentは引数をそのまま返すようにdefadviceを2ケ書いてみた。これでワンストップでpdf生成までできるようになった。
で、感想
うーん綺麗なpdfだ。目次までついて。
えっ? orgのオプションでtoc:nilにしてあるんだけど? あれ?
というわけで、ちゃんとしたドキュメント用には凄く良さげなんだけど、書き捨て用には使えないなぁ。
p.s.文字化けするのなんで?2012/02/01追記
xsltprocに--stringparam generate.toc 0を追加したら、目次が生成されなくなりました。書き捨て用に使えるようになってしまったよ(笑)


0 コメント:
コメントを投稿