Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

2つのフォント定義で1つのフォントを構成できるか?

通常、TTC形式のファイルには複数のTTFフォントファイルが内包されており、それぞれのTTFファイルはOS上からは別々のフォントとして認識される。そのため、ファイルとしては1つだが、フォントとしてはバラバラに分かれて認識される(複数のTTFをインストールしたのと同じ)ことになる。

最後に、1つのTTCファイルに対して、フォント名が同じ2つのTTFファイルを含めることで、2つのフォント定義で1つのフォントを構成できるか?を試してみた。 まず、アルファベットの大文字部分のみを持つフォントと、小文字部分飲みを持つフォントをそれぞれ作成する。

フォント名はいずれも同じ「FontNameMergeExperiment」としている。 それぞれをTTFファイルに書き出し、allunitettc64.exeにてTTCファイルにまとめる。

PS C:\unitettc> .\allunitettc64.exe
UniteTTC Copyright (C) Y.Oz 2017

FontNameMergeExperiment1.ttf:   FFTM(unique)    GDEF(unique)    OS/2(unique)    cmap(unique)    cvt (unique)    gasp(unique)    glyf(unique)    head(unique)    hhea(unique)    hmtx(unique)    loca(unique)    maxp(unique)    name(unique)   post(unique)

FontNameMergeExperiment2.ttf:   FFTM(unique)    GDEF(shared)    OS/2(unique)    cmap(unique)    cvt (shared)    gasp(shared)    glyf(unique)    head(unique)    hhea(unique)    hmtx(unique)    loca(unique)    maxp(unique)    name(shared)   post(unique)

fonts.ttc:      Ok.

できあがったTTCファイルには2つのフォントが含まれているが、Windows フォントビューアーではいずれも大文字を含む方だけが認識されているように見える。

Windowsへインストールすると、ひとつのフォントに2つのフォントフェイスが含まれるという表示になる。

この画面のテストでは、大文字・小文字とも編集済みの形式で表示されている。Regularウェイトのフォントフェイスが2つあるという認識のされ方のようだ。

ただ、メモ帳にこのフォントを指定すると、大文字のみ問題なく表示されるという挙動になる。小文字や、どちらのフォントにも含めていなかった英数字は豆腐になってしまう。CJKは別フォントへフォールバックされるようだ。

ブラウザでも試してみたが、やはり大文字のみが認識されている。小文字はデフォルトフォントであるメイリオへフォールバックされていた。