検討!目論見委員会Z

サーバインフラ屋10年余りやってる人

Sphinx + TeX + PDF with jsbook

あけましておめでとうございます*1。千葉です。

前回の記事を書いたところ、「Sphinxで薄い本を書いてみた」人がいた!という記事を uchida さんが書いてくださいました。

その返信としてこのエントリを上げます。

ちなみに uchida さんはどこかでお見かけしたことがあるなと思ったら、Sphinxへ日本語PDFパッチを作られた方ではないですか…びっくりしました。

LaTeX経由でのPDF作成

発端

SphinxからTeX経由でPDFを作る過程で、長い文章ではjsbookを使うところですが、諸事情によりjsarticleを使いました。

諸事情とは

本に印刷する為の紙面をPDFで作ろうとしていました。documentclassのjsbookを使ったところ、TeXの\chapterの部分の文字で1ページ使う&まっしろのページが出来てしまいました。そのため、ページ数が増え、本の値段が上がるということになります*2。締め切りまで時間がなかったので、conf.pyとsphinxで生成されるTeXファイルに手を加えて、jsarticleでPDFを生成しました。

今回の問題とその解決

そのまえに

これは上の FAQ に倣って conf.py の latex_preamble に以下を加えると改善されます:

latex_preamble はDeprecatedとのことなので、おとなしく latex_elements を使います... The build configuration file

jsbookを使う

conf.pylatex_documents の最後の引数に manual を書く

 latex_documents = [
  ('index', 'hoge.tex', u'document title',
   u'author', 'manual'),
]

manualにjsbookを対応させる

 latex_docclass = {"howto": "jsarticle", "manual": "jsbook"}

preambleの注意

conf.pylatex_elements に preabmleを書くわけですが、エスケープしないとビルド通らないという罠。例:

 latex_elements = {
 'papersize': 'b5j',
 'pointsize': '10pt',
 'preamble': u"""
 % この辺にpreableの設定
 \\\\setlength\\\\parindent{1zw}
 """,
 'classoptions': ',twoside',
 'babel': '\\usepackage[english]{babel}'
 }

Re: Re: ページ数がローマ字に

jsbookとmanualの組み合わせでページ数がアラビア数字になりました。

Re: Re: 字下げができない

字下げについては、下記一行で対応できました。

 \\setlength\\parindent{1zw}

Re: Re: コードブロックのカラーリングをオフにする

conf.pyにて下記のようにしたらモノクロになりました。

 pygments_style = 'bw'

ただし、dvipdfmxで-c*3を付けるとコードブロックの枠線の中身が真っ黒くなる現象は変わらず。

余談

sphinx-buildにカラーリングオフの設定(-N)*4があったのでやってみたのですが効果が現れず。

jsbookを使ってみて

chapterが1ページまるまる使う

ページ数が増えてしまってよろしくない感じ。

空白のページができる

documentclassにopenanyを付ければ良さそう、というところまで調べたのですが、自分の環境では空白ページが消えない。なぜだ。 あと、ノンブルが付かないので、印刷屋さんにとっては大変そう?*5

その他

ページの大きさの指定

preambleでdocumentclassに b5j を入れても、ページの大きさのデフォルトがa4なので、内容が左上に寄る現象が発生。_build/latex/Makefile に手を入れてみたのですが、make latexpdfjaするとファイルがリセットされるみたいで効果現れず。Sphinxが生成するTeXファイルを編集した方が早そうというのが結論。 こんな感じで*6https://gist.github.com/4c4c2a1bb5933113ff08

同人用? 汎用jsbook

を作ってしまった方が早い気がします*7。 jsbookの問題はページ数をドカ食いする*8ので、ページ数を節約したスタイルファイル*9があったらいいなと思います*10。 あと、sphinxのデフォルトのスタイルファイルが何をどうしているのか読み解かないと一筋縄ではいかない印象があります*11

他にも苦労していた人を発見

Sphinx+pLatex+dvipdfxmで美文書作成tips

とりとめもなくなってしまいましたが

やはりjsbook*12の根は深いです。つまるところ貧乏性が問題だったりして。もうちょっと何とか出来ないか模索してみます。

*1:おめでとうございました

*2:限られた紙面で詰め込みたいという貧乏性によるものが大きい気がするなー

*3:Ignore color specials (for B&W printing)

*4:-- do not do colored output

*5:印刷屋さんのチュートリアルを見ると、ノンブルは必ず付けてね!と書いてあるので

*6:印刷版の設定のため余計なものまで入っていますが雰囲気つかめればよいかなと...

*7:jsbookは汎用なのにさらに汎用なスタイルつくってどうするという議論もありますが…

*8:具体的に言うと、jsarticleで作った69ページがjsbookで112ページくらいになる

*9:あるいはjsbookを使いつつ、オプションを並べてなんとかしていく方法

*10:jsarticleに近づけるんだったら最初っからjsarticle使えよ、という議論もありますがどうなんだろうなぁ

*11:後で読もう...

*12:と、sphinxmanualのドキュメントクラス