Debian 次期バージョン squeeze での日本語 TeX 環境の現状

始めに

本日(2010-6-21)時点で Debian GNU/Linux(squeeze) で日本語 TeX 環境を構築するまでのお話.気になる所は幾つかあるけれども, まあだいたい普通に使えるようにはなっている.

install

導入は以下の通り

$ sudo -s
# aptitude install ptex-bin texlive-latex-extra okumura-clsfiles \
                  ghostscript-x gs-cjk-resource                  \
                  cmap-adobe-japan1 cmap-adobe-japan2            \
                  xdvik-ja evince poppler-data                   \
                  otf-ipafont-gothic otf-ipafont-mincho

あとはお好みで, latex-beamer なり latexmk なり YaTeX なり AUCTeX なり...

main に ipafont が入ったので基本 kochi と sazanami は使わない方針でやってみたが, 特に問題無し.otf-ipafont-{mincho,gothic} パッケージでは ttf-japanese-{mincho,gothic} という仮想パッケージを提供しており, 一応日本語 TeX 関係はこれに依存するようになっている.kochi/sazanami を使用する場合は適宜 install すれば良い*1.

cmap を提供しているパッケージは poppler-data, cmap-adobe-* と xpdf 関連.同じ cmap ファイルを提供しているので, 例えば poppler-data の cmap を使うようにする, とかできないんだろうか.

導入後に

 $ sudo jisftconfig add

と唱えることで /etc/texmf/vfontmap と /etc/texmf/dvipsj/config.ps に JIS フォントメトリック用の設定が追記される.この時点で, tex ソースファイルから dvi の生成は

 $ platex hoge.tex

などで可能.

viewer 毎の設定

表示に使われるフォントの設定は fontconfig の情報を元に決まる.

xdvi-ja

xdvi-ja の表示フォントは fontconfig の serif, sans-serif によって決まっている.表示が変な場合には fc-match で表示に使われるフォントを調べてみると良い.

 # 明朝系の表示に使用するフォント
 $ fc-match serif:lang=ja
 # ゴシック系の表示に使用するフォント
 $ fc-match sans-serif:lang=ja

ttf-tamil-fonts や ttf-devanagari-fonts がインストールされている場合, serif:lang=ja でこれらのフォントが返ってきてしまうので~/.fonts.conf で適当に設定しておく.

例えば以下の様に.

 <?xml version="1.0"?>
 <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
 <fontconfig>
 <!-- section default:serif, sans-serif, monospace:start -->
 <alias>
   <family>serif</family>
   <prefer>
     <family>IPAPMincho</family>
   </prefer>
 </alias>
 <alias>
   <family>sans-serif</family>
   <prefer>
     <family>IPAPGothic</family>
   </prefer>
 </alias>
 </fontconfig>

その後で

 $ sudo update-vfontmap

とすることで /etc/texmf/vfontmap が更新される(この場合に表示に使用されるのは IPA 明朝/ゴシック).

もし fontconfig での serif/sans-serif と xdvi で表示に使用するフォントを変えたいなら, 20xdvik-ja.map の @serif@, @sansserif@ をコメントアウトして, フォントの実ファイルの path を書き込んでから update-vfontmap を走らせる.

この辺 defoma の頃より融通が効かなくなって, ちょっとどうしたモンだろう.

evince

デフォルトの設定では, 明朝/ゴシックすべて VL PGothic で表示される.これは fontconfig において Ryumin/Gothic-BBB が指定されていないから.

例えば表示に IPA 明朝/ゴシックを使いたい場合には, ~/.fonts.conf に

 <?xml version="1.0"?>
 <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
 <fontconfig>
 <match target="pattern">
   <test qual="any" name="family">
     <string>Ryumin</string>
   </test>
   <edit name="family" mode="prepend" binding="strong">
     <string>IPAMincho</string>
   </edit>
 </match>
 <match target="pattern">
   <test qual="any" name="family">
     <string>Gothic-BBB</string>
   </test>
   <edit name="family" mode="prepend" binding="strong">
     <string>IPAGothic</string>
   </edit>
 </match>
 </fontconfig>

なんて書いておくと良いだろう.

PDF への変換

どうするのが一番簡単かなぁ.

dvipdfmx(日本語フォントを埋め込まない場合)

cmap-adobe-{japan1,japan2} が導入されているか確認する.導入されていれば /usr/share/fonts/cmap に日本語の cmap がある.

 $ sudo update-texmf -v

とすることで /etc/texmf/texmf.cnf が更新されるので

 $ dvipdfmx hoge.dvi

によって日本語フォントを埋め込んでないPDF ファイルを作成することができる.ただし,

 hoge.dvi -> hoge.pdf

 ** WARNING ** Failed to load AGL file "pdfglyphlist.txt"...
 ** WARNING ** Failed to load AGL file "glyphlist.txt"...
 [1][2][3]
 46329 bytes written

といった警告が出る. 以前の dvipdfmx には pdfglyphlist.txt などが同梱されていたのだけれども現在このファイルは提供されていない. …まあ PDF への変換には困らないのでとりあえず放置プレイ.

ちなみに XeTeX 由来の xdvipdfmx の場合には上記警告も出ずに PDF を生成できる.しかしながら, 後述の「フォントの埋め込み」はうまくできていない.

dvipdfmx で日本語 font を埋め込む場合

まずは font が見つけられるか確認しておく.

埋め込むことができるフォントのパスは texmf.cnf の TTFONS で指定されており, TTFONTS の設定は /etc/texmf/texmf.d/75DviPS.cnf にある.

alternatives で提供している ttf-japanese-{mincho,gothic}.ttf として otf-ipafont-{mincho,gothic}.ttf を埋め込む場合には75DviPS.cnf の %OSFONTDIR に opentype を追記する.具体的には

 OSFONTDIR = /usr/share/fonts/truetype//;/usr/share/fonts/opentype

としておく. また別のファイルを使用する場合には, そのフォントの実ファイルのパスを設定しておく.

設定をしたら

 $ sudo update-texmf -v

で /etc/texmf/texmf.cnf を更新しておく.

次に埋め込みたいフォントを設定する. 日本語フォントを埋め込む場合, 例えば以下の内容を記載した map ファイル(以下では jisembed.map とする)を作成する.

 # for jsarticle,jsbook
 rml-jis H :0:ipam.ttf
 gbm-jis H :0:ipag.ttf
 # standard platex classes
 rml H :0:ipam.ttf
 gbm H :0:ipag.ttf

これを dvi ファイルのあるディレクトリに置いて

 $ dvipdfmx -f jisembed.map hoge.dvi

と埋め込むフォントの map を指定して PDF を作成する.常に埋め込みたい場合には /etc/texmf/dvipdfmx/dvipdfmx.cfg の中にこの map を読み込むよう設定しておく.例えば /etc/texmf/dvipdfmx/ に jisembed.map を置いて

 $ sudo -s
 # echo "f jisembed.map" >> /etc/texmf/dvipdfmx/dvipdfmx.cfg

としておくと map の指定無しで常に IPA 明朝/ゴシックフォントが埋め込まれたPDF を作成することができる.

dvips -> ps2pdfwr (日本語フォントを埋め込む場合)

dvipdfmx と状況が説明の順が逆なので注意.

上記 dvipdfmx の設定が終わっていれば, 75DviPS.cnf で TTFONS が指定されているので

 $ dvips -Ppdf -z hoge.dvi
 $ ps2pdfwr hoge.ps

で, フォントを埋め込んだ PDF が作成できる. 埋め込むフォントは /var/lib/ghostscript/fonts/cidfmap で設定されており,デフォルトでは alternatives で提供している ttf-japanese-{mincho,gothic} である.埋め込むフォントを変更したい場合には /etc/ghostscript/cidfmap.d/ 以下に50 番台の設定ファイルを置いておくと良いだろう.

dvips -> ps2pdfwr (日本語フォントを *埋め込まない* 場合)

ghostscript の NeverEmbed を使用すると, フォントを埋め込まない PDF を作成することができる. 例えば IPA明朝を埋め込まないならば

 $ gs -dSAFER -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sstdout=%sstderr  \
   "-sOutputFile=hoge.pdf" -dSAFER                                      \
    -c '.setpdfwrite <</NeverEmbed [/IPAMincho ] >> setdistillerparams' \
   -f hoge.ps

とか(長いよ!).

  • 毎度このコマンドを打つのは嫌
    • /IPAMincho で IPA 明朝は埋め込まれなくなったけれどもRyumin-Light 等に変わっている訳ではない
    • IPAMincho-H というエントリが残っている
  • 埋め込む場合と埋め込まない場合を使いわけたい

こういう場合に便利なのが中丸さんが公開されているreplacecjkfonts.pl.

このスクリプトは, 一度フォントを埋め込んだ PDF を作成したのち, フォント情報を Ryumin-Light/GothicBBB などに replace するスクリプトである.今の所, これを使うのが一番楽か. 希望があるなら ITP しますが, どうしましょうね.

まとめ

気になる所は次の三つ

  • xdvik-ja の vfontmap 生成.
    • 特に serif:lang=ja で日本語フォント以外が返ってくる場合の対処
  • OSFONTDIR に ipafont のパス(/usr/share/fonts/opentype)を含めるのか否か
  • cmap の統合?

かな. squeeze までにスッキリすれば良いのだけれど.

*1:ちなみに kochi/sazanami をまだ必要とするパッケージは幾つかある. なるべく ttf-japanese-{mincho,gothic} に Depends するようにしたいけれど XLFD とかでフォント設定している場合はいかんともしがたい気がする. java とか?