ReST(ReStructuredText)を使おう

もちろん,この日記を見ている方々はオフラインドキュメントはTexかHTMLかなにかのマークアップ言語で書かれている事でしょう.

自分もそうです.

(Texが嫌いとか言う人はいないよね.世の中に...???)

TexもHTMLも悪くないんですが,いかんせんヘヴィ.

Texはさすがにさくさく書きたいのにコンパイルに失敗した日にはキーボード破壊したくなりますよね.HTMLはいいんですが,ササッと書くのには不向き.

というわけで,もっと限定的な機能をもったドキュメント作成言語がないかと思っていたのですが,

先日id:moqadaにReST(ReStructuredText)を教えてもらったので,ちょっと書いておきましょう.

ReST(ReStructuredText)

ReSTはwiki記法やはてな記法に似た記述で汎用性のあるドキュメントの作成を行えるマークアップ言語.

Pythonで書かれたDocutilsのコンポーネントの一つで,Docutilsのツールを使えば,tex, HTML, XML, S5などのドキュメントに吐き出しができる.

こんなかんじ.

========
Title
========


Section

              • -

- asdf
- asdf
- qwer

HTMLへの吐き出しにはテンプレートを使う事もできる.便利.

環境構築

環境を作る.emacsで全てが完了する環境を作る.またrst2pdf(ReSTからPDFを直接吐くプログラム)はDodutilsに入っていいので別途いれる.

対象の環境はMacOSX10.5 / Python2.6

インストールするパッケージと設定の指針を先に書いておく.

  • Docutils
  • rst2pdf
    • VLFont
    • ~/.rst2pdf/config
    • rst.el
    • rst.elショートカットキー

Docutils

インストールしましょう.まずは.

Docutils本家にソースがあるので落として解凍してインストール.

$ cd src
$ tar xvf docuitls-0.5.tar
$ cd docutils-0.5
$ sudo python setup.py install

標準のインストール先はPythonの実行バイナリ先のようなので

(Python2.6 on MacOSXなら'/Library/Frameworks/Python.framework/Versions/2.6/bin/')
(MacOSX標準のPython2.5なら'/System/Library/Frameworks/Python.framework/Versions/2.5/bin/')

必要ならパスを通す.

rst2pdf

Docutilsにはpdfに直に出力するrst2pdfが入っていない.

というわけで別途コンパイルする.

まず,rst2pdfの本家サイトを読むとReportLabとPIL(PythonImageLibrary)が必要なのだが,

ReportLabとPILは僕の場合既に入っているので割愛.おいいいいい

#PILとReportLabを正常にインストールしてから.
$ cd src
$ sudo python setup.py install

TTF日本語フォント

rst2pdfでpdf吐き出しをするとき,日本語の場合は日本語フォントが必要.

MacOSXは標準だとotfフォントなのでVLフォントあたりをもってくる.

$ cd src
$ curl -O https://sourceforge.jp/projects/vlgothic/downloads/41233/VLGothic-20090710.tar.bz2
$ tar xvf VLGothic-20090710.tar.bz2
$ sudo mv ./VLGothic/VL-* /Library/Fonts/ #homeのLibrary下でもおk

~/.rst2pdf/default-style.json

rst2pdfはスタイルシートを使える.スタイルは本来細かなスタイルを指定する.

日本語の場合は使うフォントを指定できるので,日本語を含むテキストの場合はスタイルを指定しましょう.

{"embeddedFonts" :
 [["VL-PGothic-Regular.ttf",
   "VL-PGothic-Regular.ttf",
   "VL-PGothic-Regular.ttf",
   "VL-PGothic-Regular.ttf"]],
 "fontsAlias" : {
     "stdFont": "VL-PGothic-Regular",
     "stdBold": "VL-PGothic-Regular",
     "stdItalic": "VL-PGothic-Regular",
     "stdMono": "VL-PGothic-Regular"
 },
 "styles" : [["base" , {"wordWrap": "CJK"}],
             ["literal" , {"wordWrap": "None"}]]
}

~/.rst2pdf/config

で,~/.rst2pdf/configにディフォルト動作の設定を書いておく.こうすると,実行時の引数を省略できる.

(~/.rst2pdf/configは個人用で,これとは別に/etc/rst2pdf.confgでも設定できる)

今回は最低限日本語が表示できればいいので,フォント格納先とディフォルトのスタイルシートを指定しておく.

(かならずフルパスで指定する事)

[general]
font_path="/Library/Fonts/"
stylesheets="/Users/yourUserName/.rst2pdf/default-style.json"

Emacs環境

EmacsenEmacsで全てを完結したい.というわけでEmacsでの作業環境も.

rst.el

emacsenは新しい言語を使う前にまず環境を整える.そこでReST環境一式が詰まったrst.elを導入する.

ここからrst.elをダウンロードする.

$ cd site/lisp/directory
$ curl -O http://docutils.sourceforge.net/tools/editors/emacs/rst.el
$ emacs -batch -f batch-byte-compile rst.el

で,さらにrst.elにはいってるrst2pdf呼び出し関数が変なので.emacs設定ついでにフックで直す.

;; rst-mode                                                                                                                                                                        
(setq frame-background-mode 'dark)
(setq auto-mode-alist
      (append '(("\\.rst$" . rst-mode)
                ("\\.rest$" . rst-mode)) auto-mode-alist))


(defun my-rst-compile-pdf-preview (&optional compile-option)
  "Convert the document to a PDF file and launch a preview program."
  (interactive)
  (let* ((pdf-compile-program "rst2pdf")
         (command (format "%s -o - %s %s | %s"
                          pdf-compile-program
                          (or compile-option "")
                          buffer-file-name
                          rst-pdf-program)))
    (message command)
    (start-process-shell-command "rst-pdf-preview" nil command)))

(add-hook 'rst-mode-hook
              (lambda ()
                (setq rst-slides-program "open -a Safari")
                (setq rst-pdf-program "open -a Preview -f")
                (defun rst-compile-pdf-preview (&optional compile-option)
                  (interactive)
                  (my-rst-compile-pdf-preview (or compile-option nil)))))

これで準備おk!

(上のelispMacOSXでしか動かないと思うけど)

rst-modeショートカットキー

  • C-c 1 htmlでファイルに出力
  • C-c 2 texでファイルに出力
  • C-c 3 psuedexmlでバッファに出力
  • C-c 5 ブラウザでS5スライドを開く


参考文献