Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[dvipdfmx] 大量の Four bytes charcode not supported 警告? #56

Open
aminophen opened this issue Apr 3, 2018 · 15 comments
Open

[dvipdfmx] 大量の Four bytes charcode not supported 警告? #56

aminophen opened this issue Apr 3, 2018 · 15 comments
Labels

Comments

@aminophen
Copy link
Member

uptex-base リポジトリの samples をコンパイルしている途中に dvipdfmx から大量の warning が出るのが気になって調べています。例えば

$ uplatex \\def\\adobe{kr}\\input adobe-cid && dvipdfmx -o adobe-kr-mc-cid adobe-cid 2>log

として dvipdfmx の log を見ると

dvipdfmx:warning: Four bytes charcode not supported in OpenType/TrueType cmap format 0...6.
dvipdfmx:warning: Unicode char U+280028 replaced with U+0028.

のような警告が大量に出ます。U+280028 という文字コードが探されているのはなぜでしょう?

@aminophen aminophen changed the title dvipdfmx の大量の Four bytes charcode not supported 警告? [dvipdfmx] 大量の Four bytes charcode not supported 警告? Apr 3, 2018
@t-tk
Copy link
Collaborator

t-tk commented Apr 3, 2018

手元では再現しませんでした。こちらでは正常終了します。
upTeX はそもそも set4 を含む dvi を吐けないはずですし、この場合、 adobe-cid.dvi は set4 どころか set3 も現れないはずですし、vf 経由でも同様のはずです。
japanese-otf-uptex の \CIDK{} のところでは、upTeXエンジンの内部コードとして「サブフォントに分割したときのコード + 0x113030」という値を使っていますが、dviに書き込まれる時点では再度set2の範囲に戻っているはずです。

↓で U+280028 が現れますか?

updvitype adobe-cid.dvi > adobe-cid.dvitype

@aminophen
Copy link
Member Author

updvitype adobe-cid.dvi > adobe-cid.dvitype

これは試してみましたが,U+280028 が現れないので不思議に思った次第でした。DVI など置いてみます。

adobe-cid-280028.zip

@aminophen
Copy link
Member Author

短くするとこうなりました。

\documentclass{article}
\usepackage[uplatex,multi]{otf}
\begin{document}
\CIDK{8207}
\end{document}
dvipdfmx:warning: Four bytes charcode not supported in OpenType/TrueType cmap format 0...6.
dvipdfmx:warning: Unicode char U+280028 replaced with U+0028.

@t-tk
Copy link
Collaborator

t-tk commented Apr 3, 2018

置いていただいたdvitypeの結果は当方とも同一でした。

Four bytes charcode not supported in OpenType/TrueType cmap format 0...6. の警告文は、
tt_cmap.ctt_cmap_lookup 関数から出ているようです。
そのフォントの設定もしくはフォント自体に、何か手がかりがあるかもしれません。

logの中に現れている Adobe-Korea1-UCS2 より Adobe-Korea1-UTF16 の方が良いような気がしますが、今回の問題と関係あるかどうかは判りません。

@t-tk
Copy link
Collaborator

t-tk commented Apr 3, 2018

\CIDK{} で使っている vf は japanese-otf の pLaTeX 版そのものなので、upLaTeX 固有の問題ではないはずです。同じ問題が pLaTeX でも再現するはずです。

\documentclass{article}
\usepackage[multi]{otf}
\begin{document}
\CIDK{8207}
\end{document}

@aminophen
Copy link
Member Author

aminophen commented Apr 3, 2018

そのフォントの設定もしくはフォント自体

このヒントを元に,以下のソースに最小化しました。

\documentclass{article}
\usepackage[uplatex,multi]{otf}
%\AtBeginDvi{\special{pdf:mapline otf-ckmr-h Identity-H batang.ttf}}
\begin{document}
\CIDK{8207}
\end{document}

私の環境では,コメントで示した \special の行を有効化すると正常に通りました。

…と,ここで updmap の kanjix.map を見ると

otf-ckgr-h Identity-H dotum.ttf/AK12 %!PS Baekmuk-Dotum
otf-ckgr-v Identity-V dotum.ttf/AK12 %!PS Baekmuk-Dotum
otf-ckmr-h Identity-H batang.ttf/AK12 %!PS Baekmuk-Batang
otf-ckmr-v Identity-V batang.ttf/AK12 %!PS Baqkmuk-Batang

となっていることに気づきました。ここで /AK12 が付いているのが原因でおかしなことになっているようです。要するに,「updmap または kanji-config-updmap のバグ」のようです。

@aminophen
Copy link
Member Author

あれ,しかし TrueType font を CID font のように見せるために /AK12 をつけているはずなので,updmap や kanji-config-updmap は正常に機能していますね。(だから /AK12 を付けるのが正常。)

@t-tk
Copy link
Collaborator

t-tk commented Apr 3, 2018

Adobe-Korea1 の CID 8207 に割り当てられている Unicode は無いようですね。
エラー処理のようなことを適切にすべきケースなのだと思いますが、どういう動作が適切なのか判りません。

@aminophen
Copy link
Member Author

同じ問題が pLaTeX でも再現するはずです。

確かに。

Adobe-Korea1 の CID 8207 に割り当てられている Unicode は無いようですね。
エラー処理のようなことを適切にすべきケースなのだと思いますが

試しに

\AtBeginDvi{\special{pdf:mapline otf-ckmr-h Identity-H HYSMyeongJo-Medium}}

とすると dvipdfmx で「非埋め込み」にできるのですが,この場合は Adobe-Korea1-2 に例示されているような (( みたいな表示になりました。(コピペしようとすると一文字にならず ( が 2 個になりますが。)単純にエラー処理するのがよいかというと微妙な感じです。

@aminophen
Copy link
Member Author

と書いたところで,ようやく意味がわかりました。

  • dvipdfmx は CID+8207 の文字を「Unicode の何か一文字」ではなく「U+0028 を二つ並べる」で代替しようとしている。
  • この処理は,フォント非埋め込みなときはうまくいっている。
  • 一方,フォントを埋め込む場合(少なくとも TrueType フォントを埋め込む場合)は,この「二つ並べる処理」がうまく機能していなくて,U+00280028 という一文字を探そうとして変になる。

ということみたいです。dvipdfmx 側で対処するのが筋のようですね。

@zr-tex8r
Copy link

zr-tex8r commented Apr 4, 2018

この処理は,フォント非埋め込みなときはうまくいっている。

いや、フォント非埋込の場合に使われるフォント(HYSMyeongJo-Medium とか Ryumin-Light とか)はそもそもCID-keyedなものとして扱われるので、そおそも「この処理」(CIDをUnicodeで代替する処理)は行われず、CID+8207そのものとして扱われるはずですよね。

@zr-tex8r
Copy link

zr-tex8r commented Apr 4, 2018

要するに問題は、「警告メッセージが的確でない」ということだと思います。「ToUnicodeの変換先が複数文字なので代替ができない」みたいなのが出るべきでしょう。

@t-tk
Copy link
Collaborator

t-tk commented Apr 4, 2018

  • dvipdfmx は CID+8207 の文字を「Unicode の何か一文字」ではなく「U+0028 を二つ並べる」で代替しようとしている。

それならば、目指すべき動作は、

  • フォント埋め込みの場合には「U+0028 を二つ並べて埋め込む」

という気もします。
あるいは、文字幅は正しくないかもしれず、中途半端な処理よりもエラーになる方が適切でしょうか。

もうTeX Live 2018のcode freezeが過ぎてしまったのでボチボチやればいいかと思います。

@aminophen
Copy link
Member Author

よく調べてみると,TrueType font の場合は表示上は変ですが,ToUnicode(=コピペで何が得られるかを司る)の方は (( という U+0028 二つ並びになっていました。

そこで,上の @zr-tex8r さんのコメントを元に #56 (comment) をもう少し正確にしようと頑張ってみます。

dvipdfmx が CID+8207 の「①グリフ情報」と「②ToUnicode情報」を追加する時,

  • ① グリフ情報については,
    • CID-keyed font の場合(“非埋込”もこれに該当):そのまま CID+8207 一文字のグリフを追加。
    • TrueType font の場合:マップ(多分 ToUnicode CMap)に従って CID ではない別の文字集合の文字(多分 Unicode)で代替する必要があるが,たまたまマップ先が「一文字」ではなく「U+0028 を二回」になっていておかしくなった。
  • ② ToUnicode 情報については,
    • どちらの場合も ToUnicode マップに従って U+0028 を二つ並べることに成功している。

「U+0028 を二つ並べて埋め込む」という処理は, @t-tk さんが仰るように字幅的に難しいはずです。従ってここは,「二文字だから」失敗するのだ,という明快な警告にすべきと思います。ゆっくり考えます。

@aminophen
Copy link
Member Author

Adoobe-Korea1-UCS2 の CID+8282 の ToUnicode 情報,これでいいんだろうか…?

\documentclass{jarticle}
\usepackage[multi]{otf}
\AtBeginDvi{\special{pdf:mapline otf-ckmr-h Identity-H HYSMyeongJo-Medium}}
\begin{document}
[\CIDK{8282}]
\end{document}

adobe-type-tools/mapping-resources-pdf#3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants