先月のSphinxへの取り組みの続きです。
- Sphinxでドキュメント生成(Windowsでの始め方) - torutkの日記
- Sphinxでドキュメント生成-PDF(Windowsでの始め方) - torutkの日記
- Sphinxでドキュメント生成-PDF(Windowsでの始め方)(続) - torutkの日記
- Sphinxでドキュメント生成-図を描く(Windowsでの始め方) - torutkの日記
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関係の修正はよく分かりません。ちょっと敷居が高いですね。