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
にその場所を教えてあげればいい。
dvipdfmx
の README
によると、デフォルトの検索パスは $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:このパスを調べる方法はあるのかなぁ?