(2022/12/30追記)
例の沼関係で来られた方はこちらツイートのスレッドもご覧ください。
InDesignでダイナフォントDF平成明朝体W9の文字にルビを振ると…文字化けするという話を、このブログで2015年に書いてたんですけど、その後の経過というか考察というかがツイッターに書き捨てただけになってたのでこの際まとめておきます。
結論としてはアドビが悪いので、DF平成明朝体が悪いともとられかねないような記事を放置していてダイナフォントさんごめんなさい。
上記ブログを書いたあと、フリーのTrueTypeフォント『源柔ゴシックP』『源柔ゴシック等幅』でも同じような文字化けが起こるのを見つけました。
さらに『源柔ゴシック等幅』では横組みでも起こりました。縦組み特有のバグではなかったのです。
そしてそれらのフォントをInDesignの字形パネルで見ていると、同じ文字がウエイトによって違う位置に表示されていることに気づきました。
ここから原因を考察してみたのが以下になります。
フォントにはまずグリフ(文字の外観)のデータが数十~数万個入っていて、それぞれにグリフID(番号)が割り振られています。
そして各文字コードに対してどのグリフIDのグリフを割り当てるか、というデータ(cmap)もフォントの中にあります。
問題のルビ化けは、同じフォントファミリーでcmapが食い違っているフォントで起きているようなのです。
具体的には、W3~9のウエイトがあるフォントファミリーで、W9のフォントが適用された文字に「あ」というルビを振ろうとすると、W3フォントのcmapから「あ」のグリフIDを調べて、W9フォントからそのIDの字を表示してるのです。
縦組みでだけで起きるフォントもあったのは、単に縦組み用字形のほうがグリフID順で後ろの方にあるのでグリフIDがずれやすいということですね。
想像するに、OpenTypeフォントにおいてルビ文字が自動的に細めのルビ用字形になるのと同じように、ルビ用字形を持たないフォントでも複数のウエイトがあればいい感じのウエイトに自動的に変えてくれるみたいな機能を搭載しようとしたけど、やっぱりやめて、バグだけが残ったというようなことじゃないかなあ。
【追記】ルビ設定でフォントのウエイトが具体的に(括弧なしで)設定されている場合にはこの文字化けは発生しません。ウエイトが自動のときのみ発生します。(
ものかのさんにご指摘いただきました!)
さて先日、合成フォントの名前の末尾に『-W3』などをつけるとフォントファミリーが作れるという情報がツイッターで回ってきました。
https://twitter.com/ymdkzhr/status/1037976609096065024
これを使うと簡単に「ウエイトによってcmapが異なるフォントファミリー」が作れることになります。試してみると予想通りルビ化けが起こせました。
【注】cmapの異なるフォントを組み合わせて合成フォントを作るのは全然問題ないです。問題はcmapの異なるフォントを、同じ合成フォントファミリーの同じ文字種のウエイト違いで使ったとき。たとえば同じ『かな』文字でW3では小塚明朝を使ってたのにW9では源ノ明朝を使ったとか。普通はやらないでしょう。
ともあれ、これでもう「ごく一部のTrueTypeフォントだけで起きる現象」とは言えなくなったのでアドビの人は早く直しましょう。
PR