torutkのブログ

ソフトウェア・エンジニアのブログ

Sphinxでドキュメント生成 - 図を描く、TeX経由でPDF(Windowsでの始め方)(続)

先月のSphinxへの取り組みの続きです。

Sphinx文書に図を描くための拡張機能blockdiagを組み合わせたとき、rst2pdfを用いたPDF生成ができない問題がありました。もう一つの手段として、TeX経由でPDFにするを試してみました。

ただし、このためにTeXを入れるのも手間だし、出力を調整したくなったらTeXの世界で手を入れるので、かなりやりたくない手段なのですが・・・。

TeX経由でPDFを生成する試みの経緯

まず、Sphinx-Users.jpの以下ページを最初に見つけました。

使用するTeXは、このページで紹介している「TeXLive 2010」がよいようです。インストールには、ネットインストールとISOイメージを入手してのオフラインインストールが存在しているので、ISOイメージを入手してインストールすることにします。

TeXLive ISOイメージ入手

上記ページで「DVDイメージダウンロード」のリンクで飛ぶ先は、以下URLです。

このページにある、「download from a nearby CTAN mirror」のリンクをクリックすると、そのときどきによって最適なミラーサイトのページに飛びます。そこで、以下ISOイメージファイルをダウンロードします。

  • texlive2010-20100826.iso
ダウンロードファイルの検証

ISOファイルは2GB近くあるので、念のためmd5かsha256のハッシュファイルをダウンロードし、ISOファイルのハッシュを取って、ISOファイルが正しくダウンロードできたかを一致確認したほうがよいでしょう。

ところが、Windowsには、標準でハッシュを取る手段がない! えっー。

Sphinxを動かすのでPythonはあるはずだから、PythonでファイルのMD5を取る方法を探して作ってみました。

import hashlib
def md5_for_file(filename, block_size = 2 ** 20):
    with open(filename, "rb") as f:
        md5 = hashlib.md5()
        while True:
            data = f.read(block_size)
            if not data:
                break
            md5.update(data)
        return md5.hexdigest()

import sys
argvs = sys.argv
argc = len(argvs)
if (argc != 2):
    print 'Usage: > python %s filename' % argvs[0]
    quit()

print 'calcutating md5 hash of %s ...' % argvs[1]
hash = md5_for_file(argvs[1])
print hash

これを、例えばファイル名 md5.py で保存し、以下のように実行すると

C:\work> python md5.py texlive2010-20100826.iso
calcutating md5 hash of texlive2010-20100826.iso ...
732b697857f85455ffb3f15a00c52963

C:\work> 

のようにファイルのMD5が取得できます。

TeXLive2010のインストール

ISOイメージをDVD-Rに焼くか、VirtualCloneDrive等の仮想ドライブソフトでマウントし、中にあるinstall-tl.bat を実行します。

インストーラダイアログが表れるので、インストールしたい場所を指定し続行します。

makeコマンドでtexの出力

まず、TeXの環境確認のため、Sphinx文書からLaTeX文書を生成します。

C:\Users\torutk\Documents\work\hello> make latex
Running Sphinx v1.0.7
loading translations [ja]... done
loading pickled environment... done
building [latex]: all documents
updating environment: 0 added, 0 changed, 0 removed
looking for now-outdated files... none found
processing HappyFlight.tex... index mapdata aoinit
resolving references...
writing... done
copying TeX support files... done
build succeeded.

Build finished; the LaTeX files are in _build/latex.

C:\Users\torutk\Documents\work\hello> 

_build\latexディレクトリに多数のファイルが生成されていれば成功です。
生成されたファイルの中に拡張子.dviのファイルがあるはずです。TeXLive2010をインストールすると、拡張子.dviがTeXLive2010に含まれるdviout.exeに関連付けされているので、エクスプローラでダブルクリックすればdvi表示プログラムが立ち上がり、印刷イメージで確認できます。

  • 注記)dvioutでの印刷イメージでは、blockdiagが生成するブロック図が表示されていませんでした。
Sphinx文書のPDF化

Sphinx-Users.jpのページは、Sphinx 1.0での記述内容であり、1.0.7では記述内容が古くなっている部分があります。

そこで、Sphinx-usersメーリングリスト(日本語)に、1.0.7でのTex経由PDF生成の手順を紹介した以下メールを参照します。

まず、copy.pyの編集から。

  • language = 'ja'

これは、http://d.hatena.ne.jp/torutk/20110521/p1 でquickstart.pyを修正してしまっているので生成済みです。

  • latex_docclass = {'manual': 'jreport'}

なくてもよいらしいが、conf.pyに追記しておきます。

ここでいったんlatex文書を生成しておきます。

生成されたlatex文書のディレクトリ(_build\latex)へ移動します。
なお、辞書ファイルの作成については、ここでは後回しとします。

Cygwinか別なツールで、UNIXのmakeコマンド相当があれば、ここで、make all-pdf-jaを実行します。

latex$ make all-pdf-ja
   :(略)
latex$

成功すれば、PDFファイルが生成されています。

blockdiag拡張で記述した図も生成されたPDFに入っていました。

一方、しおりは日本語の章題はブランクで、英字のところだけ表れていました。

Sphinx-usersメーリングリスト(日本語)で、言及しているものがありました。

TeX関係の修正はよく分かりません。ちょっと敷居が高いですね。

結局SphinxのPDFは・・・

blockdiagを組み込む場合、rst2pdfでは図そのものがでないし、LaTeX経由PDFでは、しおり、索引がでません。

というところで、今日はいったん中断。