dvipdfmx の pdf:docinfo special 命令を使って文書情報を PDF に書き出す時に、pdf:tounicode 命令で ToUnicode CMap を指定しておくと、タイトル等の文字列情報に文字コード変換*1が適用されて正常に出力される。のであるが、この文字コード変換は「どの文字列」に適用されるのであろうか。
気になったのでチョット調べてみた。
[test.tex]
% plain upTeX 文書, 文字コードは UTF-8 Hello! % ToUnicode を指定 \special{pdf:tounicode UTF8-UTF16} % 文書情報辞書にエントリを追加 \special{pdf:docinfo << /Title (☃) % '☃'(U+2603) は UTF-8 では/Author /Snowman (☃) >>} % ページオブジェクトの辞書にエントリを追加 \special{pdf:put @thispage << /CropBox [10 10 90 90] /Snowman (☃) >>} \bye
これを以下のコマンドで PDF に変換する。
uptex test dvipdfmx -V 4 -z 0 test
結果の PDF の中の文書情報辞書は以下のようになった。*2
2 0 obj << /Creator( TeX output 2015.11.28:2059) /Title<feff2603> % UTF-16 に直された /Author<feff2603> % UTF-16 に直された /Snowman<e29883> % UTF-8 のまま /Producer(dvipdfmx \(20150315\)) /CreationDate(D:20151128205950+09'00') >> endobj
先頭ページのオブジェクトは以下の通り。
3 0 obj << /CropBox[10 10 90 90] /Snowman<e29883> % UTF-8 のまま /Resources 6 0 R /Type/Page /Parent 7 0 R /Contents[5 0 R] >> endobj
これを見ると、やはり pdf:docinfo における /Title や /Author のように、「必要な特定の箇所」だけが文字コード変換の対象となっているようである。
ちなみに、文書情報辞書への書込は、専用の pdf:docinfo 命令を用いて
pdf:docinfo << ... >>
とする代わりに、一般的な pdf:put 命令を用いて
pdf:put @docinfo << ... >>
でも可能であるが、この場合は pdf:tounicode による文字コード変換が一切適用されなくなるようである。