Sphinxで出力フォーマットごとに記述を変更する¶
Sphinx アドベントカレンダー 2012 の14日目です。
Sphinxは一つのrstファイルからhtmlやepubなどいろいろな形式で出力すること が出来ます。出力形式の差はSphinxが吸収してくれるため、普段は処理を意識 する必要はなく単に make html と叩くだけなのがありがたいところです。
しかし、どうしても個々の出力先フォーマットに応じた処理を書きたくなる場 合があります。特に顕著なのが画像の大きさで、htmlとlatexでは画像の大きさ が倍違うことがあります。
そんなときに使えるのが only directiveです。
onlyの例¶
only directiveの例を記します。
.. only:: not latex
.. image:: figs/notation3.png
:scale: 40
.. only:: latex
.. image:: figs/notation3.png
:scale: 80
こう書くと、latexの場合はscale 80で、それ以外の場合はscale 40で画像が表 示されることになります。
onlyの書き方¶
onlyに続く文字、上の例では not latex などですが、これは実は条件式です。 ここには条件式とタグを記載できます。それぞれ使える内容は次の通りです。
条件式
not
and
タグ
makeで指定したbuilder名
コマンドオプションで -t で指定
conf.pyで指定
例えば、
.. only:: html and draft
の場合、html builderを使い、かつ、 -t draft と指定した場合にのみ出力 されます。
詳しくは only directive を参照 してください。
AutoImage拡張¶
onlyを使えば出力フォーマットごとに設定を変更できます。しかし、ほぼ同じ 内容を二回書くのは手間ですよね。
ということで、Imageだけですが、builderごとにオプションを切り替えられる 拡張があります。
これを使えば、以下のように簡単に記述できます。
.. autoimage:: notation3.png
:scale-html: 40
:scale-latex: 80
なお、 make html で実行するとこのオプションはキャッシュされてしまい、 次に例えば make latex と実行してもhtmlの場合のオプションが使われてし まいます。
これを回避するためには sphinx-build に -E オプションをつけるとキャッ シュを使わなくなります。
まとめ¶
出力先あるいは任意のタグで記述を変更できる only directive について紹介 しました。また、AutoImage拡張を紹介しました。
Sphinxが出力フォーマットの面倒をすべて見てくれれば良いのですが、現実的 には出力フォーマットに依存する処理は結構多いです。(特にLaTeX)そういうと きにこのonly directiveを使うと適切な場合分けができるのではないかと思い ます。
参考¶
この記事は こちら を参考 にしました。ていうか一部をそのまんま取り出しただけです。すいません。
Comments
comments powered by Disqus