hidemium's blog

日々学んだことをアウトプットする。

WindowsでSphinxからPDFファイルを作成する

WindowsSphinxからPDFファイルを作成しようとしたときに、なぜかWeb上に情報が少なく、はまってしまったのでメモしときます。

Sphinxのインストール

Pythonのインストール

SphinxPythonの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

Sphinxのインストール

以下のコマンドを実行して、Sphinxをインストールします。

> easy_install sphinx

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

PDFファイルの作成

以下のコマンドを実行し、SphinxのドキュメントからLaTeX経由でPDFファイルを作成します。_build\latex配下にPDFファイルが作成されていることを確認します。

> make latexpdfja

*1:最新の2.7.6だとhtmlの生成に失敗する場合があったので、2.7.3にしています。