マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

埋め込むか、埋め込まざるか、後者は問題だ

偶然気付いたのだが……。

dvipdfmx で DVI → PDF の変換をする時に -v オプションを付けると読み込まれたマップファイルが端末に出力される。適当な DVI ファイルを用いて、W32TeXTeX Live の各々についてマップファイルを調べてみる。

[W32TeX の場合]
C>dvipdfmx -v test.dvi
<FONTMAP:psbase14.map><FONTMAP:pdfmfnt.map><FONTMAP:cid-x.map>test.dvi -> test.p
df
DVI Comment:  TeX output 2013.01.31:1717
……(後略)……
[TeX Live の場合]
C>dvipdfmx -v test.dvi
<FONTMAP:pdftex.map><FONTMAP:kanjix.map><FONTMAP:ckx.map>test.dvi -> test.pdf
DVI Comment:  TeX output 2013.01.31:1717

……なんと、TeX Live の dvipdfmx は pdfTeX 用のマップファイルを読んでいる!

詳しく言うと、W32TeX の updmap は設定ファイル(updmap.cfg)の内容に基づいて、dvipdfmx 用に pdfmfnt.map、pdfTeX 用に pdftex.map というマップファイルを作成する。確か teTeX の updmap も(内部動作はかなり異なるが)同じ結果であったはずである。TeX Live も同じだとずっと思い込んでいたが間違っていた。前回の記事で述べたように、現在の dvipdfmx は pdfTeX の形式のマップファイルも受け付ける。この仕様を利用して、TeX Live では「pdfTeX 用のマップファイル」である pdftex.map を dvipdfmx も共用する設定になっている。(pdfmfnt.map は作成すらされていない。)*1

それならば、「dvipdfmx の Base14 の埋込設定が TeX Live にない」のも納得できる。pdfTeX と共通になっているはずである。つまり、pdftexDownloadBase14 オプションを偽にすれば、dvipdfmx でも Base14 が非埋込になるはず。

……いやそれも違う。前回の「実験」で解ったように、pdfTeX 形式の「非埋込」のマップ行は dvipdfmx では正しく扱えなかったはずである。ということは、pdftexDownloadBase14 を偽にすると Base14 がビットマップになってしまう?

[test.tex]
\documentclass[a4paper]{article}
\begin{document}
\usefont{T1}{ptm}{m}{n}Times!
\end{document}
updmap --setoption pdftexDownloadBase14 false
latex test.tes
dvipdfmx test.dvi

……結果は予想通り、Times がビットマップになってしまった。うむむ、悩ましい。要するに、dvipdfmx の

pdfTeX 形式の「非埋込」のマップ行は dvipdfmx では正しく扱えない

という仕様(バグ?)が困難の原因なんだよな。(これが無ければ、「pdftexDownloadBase14 で pdfTeX と dvipdfmx の両方を設定できます」ですっきり済む話である。)

*1:なお、dvipdfmx における pTeX 系の和文フォントの設定は別に行っていて、kanjix.map と ckx.map がそのマップファイルである。(少なくとも)前者は updmap の管理下にある。