2010年4月14日水曜日

textextで日本語を使う

textextはinkscapeでLaTeXの数式を取り扱えるようにするエクステンションです(サイトが移動したため、検索エンジンで引っかかるブログ記事中のリンクの多くからは辿れなくなっているようです)。textextではTeX文書のタイプセットを行う際にpdflatexコマンドを用いるため、日本語の文章を出力させようとするとエラーが生じます。しかしgreen_camelさんの仮想化された日々にtextextで日本語化の話があり、日本語を扱うことが可能なようでしたので同ブログを参考にtextextの日本語化を試みました。

大雑把にいうと、TeX文書をpdflatexで処理していた部分をplatex + dvipdfmxで処理するように変更している模様です。
私のptetex3ではTeXソースの文字コードは標準的にutf-8で記述するようにしてあるので、上のブログで文字コードがeuc-jpの部分をutf-8に変更しましたが、それだけでtextextを日本語化することが出来ました。感謝感謝です。

しかしそれ以外何も設定していないと、私の環境では日本語のフォントとしてsazanamiかkochiが使われているらしく、見た目が満足いくものではありませんでした。調べてみたところ、問題はどうやらpdfファイルをsvgファイルに変換する際に起こっているようでした。
詳細をいうと、textextではpdfファイルをpstoeditでskファイル(skencilというグラフィックソフトで扱う形式)に変換した後、skconvertコマンドでsvgファイルに変換するという手順をとっているようで、pdfファイルにフォントの埋め込みを行っていない場合、pstoeditでskファイルを生成した時点で既にフォントが決定されていることが確認出来ました。

よってpstoeditがskファイルを作成するときに使用する日本語フォントを変更するか、dvipdfmxでpdfファイルを作成するときにフォントを埋め込むかのいずれかを行えばよさそうということがわかりました。前者はよく分からないので、ここでは後者を採用することにします。

まず私はUbuntu 9.10ではptetex3を利用していますので、
TEXMFHOME = $HOME/texmf
という変数が定義されています(他のTeXディストリビューションでも一緒かもしれませんが)。自分が取ってきたスタイルファイルなどはこの場所に入れてあります。

ここではdvipdfmxでフォントを埋め込む際にmapファイルが必要となるので、
$HOME/texmf/fonts/map/dvipdfm
というフォルダを作り(フォルダ名はお持ちの環境に合わせて適宜解釈してください)、pTeX-IPA.mapという名前(この名前も各人で適宜変えて下さい)で
 rml    H    ipam.ttf
rmlv    V    ipam.ttf
gbm    H    ipag.ttf
gbmv    V    ipag.ttf
と記述したファイルを作成します。この例では、IPAフォントがインストールされおり、さらにTeXディストリビューションがそのフォントを認識していなければなりません。このmapファイルにより、端末で
dvipdfmx -f pTeX-IPA.map hoge.dvi
と打てば生成されたhoge.pdfファイルにはIPAフォントが埋め込まれます。
あとはこのコマンドと同じことを実行するよう、textext.pyの書き換えを行うだけです。green_camelさんのブログにあった
exec_command(['dvipdfmx', self.tmp('dvi')] )
の部分を
exec_command(['dvipdfmx',  '-f', 'pTeX-IPA.map', self.tmp('dvi')])
に置き換えます。するとinkscapeで表示されるフォントが改善されました。

追記:TeX環境がptexlive2009であり、かつpdfからskファイルの生成にpstoeditを用いている場合、上の方法では日本語が表示されない可能性があります。その場合にはpdf2svgをインストールすればうまくいくかと思います。