Re: Re: SphinxのLaTeXのフォーマットをいじる
先日、Re: SphinxのLaTeXのフォーマットをいじる の記事を書いた直後に、
sphinx-users ML に独自のclsファイルを使用する方法がポストされました。
前回の記事では conf.py でプリアンブル部にゴリゴリ定義を突っ込んでいましたが、
- Python の文字列として記述するため、エスケープを気にする必要がある
- ファイル内にPython のコードと LaTeX マクロがミックスされるため、読み書きしづらい
- エディタのサポートが得られない
などの問題があるので、今回はこの「独自の cls ファイルを使用する」方法を使ってみることにします。
自分だけの最強の cls を作る
とは言え、いちからドキュメントクラスを書き下すことは難しいので、
既存のドキュメントクラスをベースにカスタマイズしていくことにします。
まずは jsarticle をベースにすることにします。
これまでは conf.py の latex_docclass と latex_documents を使ってクラスを選択していましたが、
独自に cls ファイルを定義する場合は \LoadClass マクロを使います。
\LoadClass{jsarticle}
例えば、行間を広げるようなドキュメントクラスを作ってみます。
次の内容のファイルを myjsarticle.cls というファイル名で保存します。
\LoadClass{jsarticle} \renewcommand{\baselinestretch}{2.0}
そして、conf.py に次のように記述します。
latex_additional_files = ['myjsarticle.cls'] latex_documents = [ ('index', 'test.tex', u'test Documentation', u'test', 'myjsarticle'), ]
sphinxhowto, sphinxmanual をベースにする
前回の記事では sphinxhowto と jsarticle を組み合わせて、必要な箇所だけ書き換えるようにしていたので
今度は sphinxhowto をベースにしてみましょう。
sphinxhowto (sphinxmanual) はちょっと変わった形をしたドキュメントクラスです。
- ベースになるのは article や manual などの基本のドキュメントクラス
- ベースのドキュメントクラスの定義を一部差し替えている
- ベースのドキュメントクラスは差し替えしやすいよう、\sphinxdocclass という変数名経由で指定
そのため、sphinxhowto (sphinxmanual) を \LoadClass する前に \sphinxdocclass という変数を定義します*1。
今回は jsarticle を指定します。
\def\sphinxdocclass{jsarticle} \LoadClass{sphinxhowto} \renewcommand{\baselinestretch}{2.0}
そして、次に conf.py を書き換えます。
latex_additional_files = ['myjsarticle.cls'] latex_documents = [ ('index', 'test.tex', u'test Documentation', u'test', 'myjsarticle'), ]