前回の続きで、SphinxでLaTeXを使う設定をまとめておきます。TeXLive2011を前提にすると汎用性がないので、今回はUbuntu 11.10(Oneiric)のデフォルトのTeXLiveを使うことにします。
(前回の段階では使えないと思っていたのですが、latex・htmlともに成功しました)

latexコンパイルの設定は、make latexを実行するたびに、面倒な設定変更を行う必要があるため、LaunchpadのPPAに、この設定を反映させたSphinxパッケージを用意しました。PPAにパッケージをアップロードするのは初めてだったので、やや苦戦しましたが…(苦

launchpad
現状のパッケージ名は、sphinx-1.0.7+dfsg-ppa2~oneiricです。12.04バージョンを作るかどうかは未定。「ppa2」となっているところや、もうひとつ失敗したPPAのページを消したりしているところに苦戦したようすが見え隠れしております。

[2012.4.4 追記] Ubuntu 12.04(Precise Pangolin)のsphinx-1.1.3に対応したパッケージを追加しました。4/3現在のDaily Build版で動作確認済み。導入方法は下記と同様です。


TeXLiveをインストール

必要なパッケージを絞り込めていませんので、結構量が多いですが必要そうなものを一式入れておきます。下記のコマンドを実行すれば入りますが、ディスク使用量を約426MBほど消費しますので、空き容量に注意してください。

$ sudo apt-get install texlive texlive-base ptex-base ptex-bin \
  dvipsk-ja xdvik-ja ptex-jisfonts gs-cjk-resource jmpost dvipdfmx \
  texlive-math-extra okumura-clsfiles jbibtex-bin mendexk


[2012.3.21 追記] 最小限のパッケージは、下記のコマンドでインストールできるようです。
$ sudo apt-get install texlive dvipsk-ja ptex-bin okumura-clsfiles


これで、通常のLaTeXのコンパイルは問題なくできるはずです。


追加パッケージのインストール

続いて、Sphinxでmake latexを実行するために必要なパッケージを導入します。texlive-latex-extraは、依存パッケージ(特にtexlive-latex-extra-doc)のサイズが大きく、300MB程度の容量を消費します。

[texlive-latex-extraのインストール]
$ sudo apt-get install texlive-latex-extra
※ make latexのコンパイル時に出るエラーへの対処。

[nkfのインストール]
$ sudo apt-get install nkf
※ 出力ファイルをUTF-8からEUC-JPに変換するために必要。

[dvipngのインストール]
$ sudo apt-get install dvipng
※ make htmlでTeXフォントの画像を作成するために必要。

【PPAの利用】
次のPPAのパッケージを利用すると、build/source/conf.pyに手を加えるだけで、make latexコマンドやmake htmlコマンドでTeXの数式フォントがきちんと表示されるはずです。

$ sudo apt-add-repository ppa:vineuser/ppa
[2012.01.18 修正しました]
$ sudo apt-get update
$ sudo apt-get install python-sphinx


クリーンな環境で何度も試したので問題はないかと思いますが、あくまで自己責任でご利用ください。PPAのパッケージを使わなくても、手作業で変更することもできますが、make latexを実行するたびにbuild/latex内のMakefileとsphinx.styが書き換えられてしまうので、設定をやりなおす必要があります。これはかなり面倒です。[2012.01.18 修正しました]

Sphinxを使ってみよう

まずは、sphinx-quickstartから。

$ sphinx-quickstart

以下では、前回の記事と同様に、pngmathを有効にしていることを前提にします。

【conf.pyの設定】
sphinx-quickstartで作成された「build/source/conf.py」に変更を加えます。

STEP1:
コメントアウトされている「language =」のあたりに、下記の1行を追記します。これで、文書内のデフォルトの文字部分(「リリース」やhtmlのサブメニューなど)が日本語化されます。

language = 'ja'

STEP2:
最終行に下記を追記します。

latex_docclass = {"manual":"jarticle"}

latex_elements = {
  "papersize": "a4paper",
  "pointsize": "12pt",
}

これで、ドキュメントクラスにjarticleが使われ、文字サイズが12ptでA4サイズのPDFが作成されるようになります。

STEP3:
出力されるTeXソースの名前を設定します。

latex_documents = [
  ('index', 'ソース名.tex', u'(文書名)',
   u'(著者名)', 'manual'),
]


'manual'の部分は'howto'を指定することもできます。

「build/source/conf.py」は新規作成の際に一度修正しておけば、新たなページを追加したり、校正のために修正したりしても、make latexコマンドの実行後に書き換えられることはありません。[2012.01.18 追記しました]

PDFを作成する

[2012.01.18 修正しました]
sphinx-quickstartを実行したディレクトリで、
$ make latex
を実行した後、LaTeXドキュメントのディレクトリに移動してmakeします。

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

以上で、SphinxでLaTeXが使えるようになっているはずです。

PPAのパッケージに施した変更内容を下記に参考として記しておきます。これをmake latexするたびにやりなおす(該当ファイルを保存しておいて毎回コピーしてもいいですが)のは、かなり面倒だということがわかるでしょう。

□□□ 【参考】 □□□□□□□□□□□□□□□□□□□□□

【latexコンパイルの設定(1)】
build/latex/sphinx.styを下記のように変更します。

[変更前]
% For graphicx, check if we are compiling under latex or pdflatex.
\ifx\pdftexversion\undefined
  \usepackage{graphicx}
\else
  \usepackage[pdftex]{graphicx}
\fi

[変更後]
% For graphicx, check if we are compiling under latex or pdflatex.
\ifx\pdftexversion\undefined
  \newcount\pdfoutput
  \pdfoutput=0
  \usepackage[dvipdfm]{graphicx}

\else
  \usepackage[pdftex]{graphicx}
\fi

【latexコンパイルの設定(2)】
build/latex/Makefileのall-pdf-ja:の部分を下記のように変更します。

[変更前]:なぜかUTF-8が前提になっている。
all-pdf-ja: $(wildcard *.tex)
    ebb $(wildcard *.pdf *.png *.gif *.jpeg)
    platex -kanji=utf8 $(LATEXOPTS) '$<'
    platex -kanji=utf8 $(LATEXOPTS) '$<'
    platex -kanji=utf8 $(LATEXOPTS) '$<'
    -mendex -U -f -d '$(basename $<).dic' -s python.ist '$(basename $<).idx'
    platex -kanji=utf8 $(LATEXOPTS) '$<'
    platex -kanji=utf8 $(LATEXOPTS) '$<'
    dvipdfmx '$(basename $<).dvi'

[変更後]:nkfで出力ファイルをEUC-JPに変更。
all-pdf-ja: $(wildcard *.tex)
    nkf -e --overwrite $(LATEXOPTS) '$<'
    for f in *.pdf *.png *.gif *.jpg *.jpeg; do ebb $$f; done
    for f in *.tex; do platex $(LATEXOPTS) $$f; done
    for f in *.tex; do platex $(LATEXOPTS) $$f; done
    for f in *.tex; do platex $(LATEXOPTS) $$f; done
    -mendex -U -f -d '$(basename $<).dic' -s python.ist '$(basename $<).idx'
    for f in *.tex; do platex $(LATEXOPTS) $$f; done
    for f in *.tex; do platex $(LATEXOPTS) $$f; done
    for f in *.dvi; do dvipdfmx $$f; done

※ この【参考】部分は手動で設定する際に行うべき内容です。PPAのパッケージでは、修正済みですので、【latexコンパイルの設定(1)】と【latexコンパイルの設定(2)】は不要です。