Closed h20y6m closed 9 months ago
fix_CJK_symbols()
はレガシーエンコーディングとUnicodeの間の変換表の揺らぎ問題(波ダッシュ問題)で見つからないグリフを見つけられるようにする意図のようです。
なので、以下で充分だという気がします。
全然テストしていませんが…
diff --git a/source/texk/dvipdfm-x/cidtype2.c b/source/texk/dvipdfm-x/cidtype2.c
index 2c6caf908..a3d5a63c8 100644
--- a/source/texk/dvipdfm-x/cidtype2.c
+++ b/source/texk/dvipdfm-x/cidtype2.c
@@ -827,7 +827,7 @@ CIDFont_type2_dofont (pdf_font *font)
} else {
gid = tt_cmap_lookup(ttcmap, code);
#ifdef FIX_CJK_UNIOCDE_SYMBOLS
- if (gid == 0 && unicode_cmap) {
+ if (gid == 0 && unicode_cmap && code <= 0xFFFF) {
int alt_code;
alt_code = fix_CJK_symbols((unsigned short)code);
なぜか、この変換表に FULLWIDTH YEN SIGN (U+FFE5) “¥” と YEN SIGN (U+00A5) “¥” の相互変換が含まれていません。 変換表のラインナップからすると、入れた方がいいような気がします。
{0x2014, 0x2015}, /* EM DASH <-> HORIZONTAL BAR */
{0x2016, 0x2225}, /* DOUBLE VERTICAL LINE <-> PARALLEL TO */
{0x203E, 0xFFE3}, /* OVERLINE <-> FULLWIDTH MACRON */
{0x2026, 0x22EF}, /* HORIZONTAL ELLIPSIS <-> MIDLINE HORIZONTAL ELLIPSIS */
{0x2212, 0xFF0D}, /* MINUS SIGN <-> FULLWIDTH HYPHEN-MINUS */
{0x301C, 0xFF5E}, /* WAVE DASH <-> FULLWIDTH TILDE */
{0xFFE0, 0x00A2}, /* FULLWIDTH CENT SIGN <-> CENT SIGN */
{0xFFE1, 0x00A3}, /* FULLWIDTH POUND SIGN <-> POUND SIGN */
{0xFFE2, 0x00AC}, /* FULLWIDTH NOT SIGN <-> NOT SIGN */
{0xFFFF, 0xFFFF}, /* EOD */
テストしました。 予定通り、提示していただいたサンプルで下記のようなエラーになり、該当の文字は□に×のグリフになりました。
dvipdfmx:warning: Could not open config file "dvipdfmx.cfg".
replace00.dvi -> replace00.pdf
dvipdfmx:warning: Failed to load AGL file "pdfglyphlist.txt"...
dvipdfmx:warning: Failed to load AGL file "glyphlist.txt"...
[1]
dvipdfmx:warning: Glyph missing in font. (CID=13998, code=0x2f862)
dvipdfmx:warning: Glyph missing in font. (CID=14068, code=0x2f9d0)
dvipdfmx:warning: Glyph missing in font. (CID=14209, code=0x200b0)
dvipdfmx:warning: Glyph missing in font. (CID=20057, code=0x200f5)
dvipdfmx:warning: Glyph missing in font. (CID=20059, code=0x24ff2)
dvipdfmx:warning: Glyph missing in font. (CID=20060, code=0x27d73)
dvipdfmx:warning: Glyph missing in font. (CID=20075, code=0x20158)
dvipdfmx:warning: Glyph missing in font. (CID=20133, code=0x279b4)
3435 bytes written
ありがとうございます。 よさそうですが、縦組みにもおなじ処理があります。 https://github.com/texjporg/tex-jp-build/blob/f5e7f9224147ba75ea1b12d6f855a9cdc5c435d2/source/texk/dvipdfm-x/cidtype2.c#L921
縦組みとは気付きませんでした。 https://github.com/texjporg/tex-jp-build/commit/21b812e179a961d8c5efa7199dd5d3a23fe9ec4f でどうでしょう。
縦組み用 replace01.tex ::
\special{pdf:mapfile uptex-ipaex.map}
\tate
𠂰% U+200b0
𠃵% U+200f5
𠅘% U+20158
𤿲% U+24ff2
𧦴% U+279b4
𧵳% U+27d73
姬% U+2f862
諭% U+2f9d0
¢£¥¬
¢£¥¬
〜~
—―
‖∥
\bye
対策前
dvipdfmx:warning: Unicode char U+2f862 replaced with U+f862.
dvipdfmx:warning: Unicode char U+2f9d0 replaced with U+f9d0.
dvipdfmx:warning: Unicode char U+200b0 replaced with U+00b0.
dvipdfmx:warning: Unicode char U+200f5 replaced with U+00f5.
dvipdfmx:warning: Unicode char U+24ff2 replaced with U+4ff2.
dvipdfmx:warning: Unicode char U+27d73 replaced with U+7d73.
dvipdfmx:warning: Unicode char U+20158 replaced with U+0158.
dvipdfmx:warning: Unicode char U+279b4 replaced with U+79b4.
対策後
dvipdfmx:warning: Glyph missing in font. (CID=13998, code=0x2f862)
dvipdfmx:warning: Glyph missing in font. (CID=14068, code=0x2f9d0)
dvipdfmx:warning: Glyph missing in font. (CID=14209, code=0x200b0)
dvipdfmx:warning: Glyph missing in font. (CID=20057, code=0x200f5)
dvipdfmx:warning: Glyph missing in font. (CID=20059, code=0x24ff2)
dvipdfmx:warning: Glyph missing in font. (CID=20060, code=0x27d73)
dvipdfmx:warning: Glyph missing in font. (CID=20075, code=0x20158)
dvipdfmx:warning: Glyph missing in font. (CID=20133, code=0x279b4)
21b812e でどうでしょう。
よさそうです。
そろそろ #155 の dvipdfmx の変更を TeX Live svn に入れようと思っているのですが、こちらの修正はどうしましょう? 別々にコミットしたほうが良いのでしょうか? それとも一緒にコミットしたほうが良いのでしょうか?
dvipdfmxで以下のような条件のときに誤ったグリフが出力されます。
以下の部分で
unsigned short
にキャストしているためだと思います。https://github.com/texjporg/tex-jp-build/blob/3ee7d1f745ddf1d74481b9f3b25d80a46cb0d4d7/source/texk/dvipdfm-x/cidtype2.c#L829-L841