Skip to content

[dvipdfmx] TrueType フォント使用時に一部の漢字が出力されない #155

@h20y6m

Description

@h20y6m

dvipdfmx で TrueType 利用時に一部の漢字が出力できなくなりました。

%ptex
\special{pdf:mapline rml H ipaexm.ttf}
逢う
\bye
dvipdfmx:warning: Unable to map CID to code: CID=1133
%uptex
\special{pdf:mapline uprml-h UniJIS-UTF16-H ipaexm.ttf}
神% U+FA19
\bye
dvipdfmx:warning: CID=8580 mapped to non-single Unicode characters...
dvipdfmx:warning: Unable to map CID to code: CID=8580

2023年1月中頃に Adobe-Japan1-UCS2 が更新され一部の漢字等に異体字セレクタ付きのものになった影響のようです。
https://www.tug.org/svn/texlive/trunk/Master/texmf-dist/fonts/cmap/adobemapping/mapping-resources-pdf/pdf2unicode/Adobe-Japan1-UCS2?r1=50714&r2=65589
t-tk さんの指摘も反映されているようです。)

異体字セレクタ付きになったのは

  1. JIS90字形(162文字)
  2. CJK互換漢字(89文字)
  3. CJK部首補助?(4文字)
  4. \CIDな異体字(1000文字くらい?)

あたりのようです。
参考: https://gist.github.com/h20y6m/093e9085d0c10b6e7e69abd4502a9568

1 は kanji-config-updmap コマンドや pxchfon パッケージで jis2004 オプションなし(デフォルト)で TrueType フォントに切り替えしている場合に JIS2004 で字形が変わる文字が豆腐になります。jis2004 オプションを指定することで回避できますがデフォルトが90字形なので引っかかる人でそうです。

2 は Unicode 正規化で化けることで有名な奴です。Unicode 6.3 で追加されたCJK互換漢字を選択する異体字セレクタを使うように変更されたようです。CJK互換漢字がどの程度使われているのかは分かりませんが、upTeX でしか使えない文字なのでフォントマップを Unicode 直接指定にすれば(1 も含めて)回避できます。ただし Unicode 直接指定による問題もあるのでこの回避策が使えないこともあるかもしれません。

3 は使う人いるのかなぁ……

4 はもともと TrueType フォントでは CID 指定は使えないので影響はないとは思いますが、いままで異体字は規定?の字形で出力されていたのが豆腐になります。


対応策としては

  • Adobe-Japan1-UCS2 を古いものに戻してもらう
    • せっかくの修正も戻ってしまう
    • どちらのほうが影響が大きいか?
  • dvipdfmx を修正する
    • TeX Live 2023 はすでに code freeze されていて、最終ビルドもコミットされていきてるので望み薄
    • 1年間このまま?

どうすべきでしょうか?


TeX Live 2023 には間に合いそうにありませんが、一応突貫で dvipdfmx のパッチを書いてみました。

h20y6m/tex-jp-build@master...dvipdfmx_uvs

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions