WindowsでSphinxからPDFファイルを作成しようとしたときに、なぜかWeb上に情報が少なく、はまってしまったのでメモしときます。
Sphinxのインストール
Pythonのインストール
SphinxはPythonの2系と3系に対応しているようですが、2.7系が一番使われているようなので、2.7系をインストールします。
まず、Python.orgから「python-2.7.3.msi」をダウンロードします。ダウンロードができたら、「python-2.7.3.msi」をクリックして、pythonをインストールします。*1
インストール後に、システムの環境変数のPathに以下を追加します。
C:¥Python27 C:¥Python27¥Scripts
easy_installコマンドのインストール
https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.pyのリンクを右クリックからダウンロードして、「ez_setup.py」として保存します。
以下のコマンドを実行して、easy_installコマンドをインストールします。
> python ez_setup.py
PDFファイルの作成
TeXLiveのインストール
SphinxからPDFファイルを作成する場合、rst2pdfとLatex経由の2種類ありますが、Latex経由のほうが見た目がきれいなPDFファイルが作れるようなので、こちらの方法をとります。
Installing TeX Live over the Internetから「install-tl.zip」をダウンロードします。
「install-tl.zip」を展開し、「install-tl.bat」をクリックします。「install-tl.bat」をクリックすると、インストーラが起動します。
「既定リポジトリを変更」にチェックを入れ、「次へ」をクリックします。「ミラー」から日本のミラーサイトを選択します。後はインストーラに従って、インストールを行います。ファイルのダウンロードに時間がかかるので、時間に余裕のあるときにしたほうがいいかもしれません。
Sphinxプロジェクトの作成
Sphinxの初期設定として、プロジェクトを作ります。
プロジェクトを保存する任意のフォルダを作成し、以下のコマンドを実行します。
> mkdir <フォルダ名> > cd <フォルダ名> > sphinx-quickstart
基本的に設定が必要な箇所は以下の通りです。
Root path for the documentation [.]: フォルダに移動しているのでそのままリターン Project name: <プロジェクト名> Author name(s): <著者名> Project version: <バージョン名>
Sphinxプロジェクトの設定変更
上記で作成したプロジェクトのフォルダ配下に「conf.py」というファイルがあるので、以下の内容をファイルに追加します。
# 言語の設定 language = 'ja' # LaTeX の docclass 設定 latex_docclass = {'manual': 'jsbook'}
make.batの作成
この状態でmake latexpdfjpコマンドを実行しても、以下のようなメッセージが出力され、PDFファイルが作成されませんでした。
> make latexpdfja Making output directory... Running Sphinx v1.2.2 loading pickled environment... done building [latex]: all documents updating environment: 0 added, 0 changed, 0 removed looking for now-outdated files... none found processing BookReview.tex... index resolving references... writing... done copying TeX support files... done build succeeded. 'make' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 Build finished; the PDF files are in _build/latex.
make.batの中を確認すると、make latexpdfjpコマンドが実行されると、_build\latexに移動し、make all-pdf-jaコマンドを実行していました。しかし、_build\latex配下にmake.batが存在しないため、実行に失敗していたようです。
Sphinx-Usersのメーリングリストを確認したところ、プロジェクト配下のmake.batファイルとは異なる「make.bat」を作成し、sphinx\texinputs配下に配置することで解決できそうです。
そこで、以下のmake.batを作成し、「C:\Python27\Lib\site-packages\sphinx-1.2.2-py2.7.egg\sphinx\texinputs」(デフォルトパス)に配置します。
> more make.bat @@echo off setlocal ::set %LATEXOPTS%= if "%1" EQU "all-pdf" goto all-pdf if "%1" EQU "all-dvi" goto all-dvi if "%1" EQU "all-ps" goto all-ps if "%1" EQU "all-pdf-ja" goto all-pdf-ja if "%1" EQU "clean" goto clean :all-pdf for %%f in (*.tex) do pdflatex %LATEXOPTS% %%f for %%f in (*.tex) do pdflatex %LATEXOPTS% %%f for %%f in (*.tex) do pdflatex %LATEXOPTS% %%f for %%f in (*.idx) do if exist %%f (makeindex -s python.ist %%f) for %%f in (*.tex) do pdflatex %LATEXOPTS% %%f for %%f in (*.tex) do pdflatex %LATEXOPTS% %%f goto end :all-dvi for %%f in (*.tex) do latex %LATEXOPTS% %%f for %%f in (*.tex) do latex %LATEXOPTS% %%f for %%f in (*.tex) do latex %LATEXOPTS% %%f for %%f in (*.idx) do if exist %%f (makeindex -s python.ist %%f) for %%f in (*.tex) do latex %LATEXOPTS% %%f for %%f in (*.tex) do latex %LATEXOPTS% %%f goto end :all-ps for %%f in (*.tex) do latex %LATEXOPTS% %%f for %%f in (*.tex) do latex %LATEXOPTS% %%f for %%f in (*.tex) do latex %LATEXOPTS% %%f for %%f in (*.idx) do if exist %%f (makeindex -s python.ist %%f) for %%f in (*.tex) do latex %LATEXOPTS% %%f for %%f in (*.tex) do latex %LATEXOPTS% %%f for %%f in (*.dvi) do dvips %%f goto end :all-pdf-ja for %%f in (*.pdf *.png *.gif *.jpg *.jpeg) do extractbb %%f for %%f in (*.tex) do platex -kanji=utf8 %LATEXOPTS% %%f for %%f in (*.tex) do platex -kanji=utf8 %LATEXOPTS% %%f for %%f in (*.tex) do platex -kanji=utf8 %LATEXOPTS% %%f for %%f in (*.idx) do if exist %%f (mendex -U -f -d "`basename %%f .idx`.dic" -s python.ist %%f) for %%f in (*.tex) do platex -kanji=utf8 %LATEXOPTS% %%f for %%f in (*.tex) do platex -kanji=utf8 %LATEXOPTS% %%f for %%f in (*.dvi) do dvipdfmx %%f goto end :clean del *.dvi *.log *.ind *.aux *.toc *.syn *.idx *.out *.ilg *.pla goto end :end
*1:最新の2.7.6だとhtmlの生成に失敗する場合があったので、2.7.3にしています。