Sphinx で 日本語 pdf を出力する(Mac OS X Lion)

なぜ Tex 経由か? rst2pdf ではダメなのか?

rst2pdf は現在日本語出力がうまくできませんでした。
私の環境設定の問題かもしれませんが、デバッグするよりもう一つの環境を作った方がいいと判断して Tex 経由で作ることにしました。

用意するもの

都合 10 GB ぐらいの空き容量は用意しといた方がいいです。

  • zip 圧縮ファイル 1.7 GB
  • 展開後 1.7 GB
  • インストールにさらに 3.3 GB の空き容量を要求

全くもってこのパッケージングの思想が理解できませんが(yum リポジトリのようなものを用意して必要なものだけ DL できるようにしたりすればいいのに)、仕方ありません。

MacTeX のインストール

ここから DL してインストールしてください。

前述の通り非常に大きい(zip圧縮で1.7GB)ので覚悟してください。

PATH を通す

/usr/local/texlive/2011/bin/universal-darwin を PATH に通してください。

アップデート

以下のコマンドを実行して MacTeX のアップデートを実行してください。結構時間かかります(20分くらい?)

$ sudo tlmgr update --self
$ sudo tlmgr update --all

Sphinx の編集

世界の小宮さんの記事 [1] では手動バックアップ→上書きという手法をとっていたが、面倒なので git を使います。

まず、以下のコマンドを実行していきます。ここまでは既存のファイルに事実上何も影響を与えませんので(.git ディレクトリが作られる程度)、万一失敗してもやり直しは容易です。

$ cd /usr/local/lib/python2.7/site-packages/Sphinx-1.1.2-py2.7.egg/sphinx
$ git init
$ git add -A
$ git commit -m "initial commit"
$ git checkout -b sphinx-pdfja

次に、私のgist からパッチを DL して上記ディレクトリまで持ってきて、パッチを当ててください。
以下は一例です。
パッチの内容は世界の小宮さんの記事でファイルを更新する処理と同じですので安心してください。

$ patch -p0 < sphinx-pdfja.patch

万一ミスしても、以下のコマンドで最初からやり直すことができます。

$ git checkout master
$ git branch -d sphinx-pdfja

conf.py の編集

ここから先は世界の小宮さんの記事と内容が同じですが、読みやすくするために記載しておきます。
自分の sphinx プロジェクト内にある conf.py を編集します。

以下は編集の一例です。

diff --git a/source/conf.py b/source/conf.py
index 2dcbf44..75158fd 100644
--- a/source/conf.py
+++ b/source/conf.py
@@ -54,7 +54,7 @@ release = '1.0'
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
-#language = None
+language = 'ja'
 
 # There are two options for replacing |today|: either, you set today to some
 # non-false value, then it is used:
@@ -207,6 +207,8 @@ latex_documents = [
 # If false, no module index is generated.
 #latex_domain_indices = True
 
+# latex doc class
+latex_docclass = {'manual':'jsbook'}
 
 # -- Options for manual page output --------------------------------------------

pdf の出力

以下のコマンドを入力して、pdf を出力します。

$ make latex
$ make make -C build/latex all-pdf-ja

_build ではなく build となっているのは、sphinx の初期化時の設定の影響です。自分の環境に合わせて適宜変換してください。

謝辞

@ にいろいろと支援していただきました。ありがとうございます。