DOSEIの日記

技術メモ+日常ログ

dvipdfmx のエラーを回避する正しい方法

さて、 id:DOSEI:20100604:p1 で書いたエラーを直す方法について。
dvipdfmx は、 PDF に変換する際、フォント毎に CMap という一種の文字コード変換表を必要とする。 CID とは PDF に文字を入れるのに使う CID フォントの文字コードである。
当然、この CMap というファイルは誰かが作っているのでそれを利用するわけである。が、 Fedora に日本語 TeX 環境を入れた状態では、そのファイルを見つけられず、 ** ERROR ** Could not find encoding file "H". というエラーを出す。しかし、一文字のファイル名っていうのも何だかねぇ。
さて、日本語 TeX 環境としてパッケージ

  • texlive-east-asian
  • dvipdfmx

を入れた場合、依存関係で ghostscript パッケージも入っているはずである。このパッケージには、 /usr/share/ghostscript/8.71/Resource/CMAP/ 以下に、今まさに必要としているファイル群がインストールされる((なお、よく調べてないけど、 PDF 関係のパッケージ poppler-data にも収録されていて、パスは /usr/share/poppler/cMap/))。途中のバージョンナンバーは変わる可能性がある。
Fedora 15 から、 ghostscript には CMAP ファイルが含まれなくなった (630632 – split ghostscript libs out to a subpackage)。ので、 poppler-data のほうを使いましょう。依存関係で自動的にインストールされます。

となると、解決策は簡単で、 dvipdfmx にその場所を教えてあげればいい。
dvipdfmxREADME によると、デフォルトの検索パスは $TEXMF/fonts/cmap/ であると書いてある。ここで、 $TEXMF とは実際に定義されている環境変数ではない。 Fedora の場合は /usr/share/texmf である*1。ググってみると、このディレクトリに CMAP ファイルをがっつりコピーするっていう方法も見つかるが、同じファイルが散らばるのあれなのでこの方法は取らない。
ではどうするか。 README のその次に、追加の検索パスは環境変数$CMAPFONTS で指定できると書いてある。というわけで、

export CMAPFONTS=/usr/share/poppler/cMap//                    # ダブルスラッシュはサブディレクトリを再帰的に検索する
# export CMAPFONTS=/usr/share/ghostscript/8.71/Resource/CMAP/ # 古い方法。バージョン番号部分は要変更

を実行すればよろしい((poppler のを使う場合は、なぜか細かくディレクトリが分かれているので /usr/share/poppler/cMap/Adobe-Japan1/ などと具体的に指定。))。ただし、 ghostscript の Cmap のインストールパスが変わったら、追従させるようにしないといけないのが面倒だ。Fedora のメンテナにどうにかしてもらおうか…。
さて、 README のその先には、この変数を /usr/share/texmf/web2c/texmf.cnf (Fedora の場合) で指定するようなことが書いてある。見てみると…、確かに書いてあったが ghostscript のバージョンが違う (8.70)。というわけで、ルート権限でこれを修正すると、見事動いた。というわけで、 Fedora のメンテナはこの部分を追従するようにすべきなのかな。


参考文献

*1:このパスを調べる方法はあるのかなぁ?