2(2)/11129 更新:2013/05/19

←往復ハガキに印刷を


合成フォントを作ろう!

アルファベットフォントは数も多く気に入ったフォントがあるのに、漢字フォントに含まれるアルファベット部分がどうも気にくわない、あるいは、バランスが悪い、種類がすくないと思ったことはありませんか?

FontPatchin'等を使えば漢字とアルファベットに別々のフォントを割り当てることができますが、ソフトに頼りたくない(コンフリクトが心配、処理が重い)とか、アルファベットと漢字に違うポイント数のフォントを割り当てたいということもあります。

そこで、この際、漢字フォントとアルファベットフォントを合成して、新しいフォントを作ってしまおう! というわけです。
#今回はちょっと長文です(^_^)

Fontのリソース変更

実は、ここを見ていただければフォントの作り方がほとんど分かってしまいます。おしまい...

...ってやってしまうと身も蓋もありません(^_^;)ので、ここではもう少し具体的に合成フォントの作り方に絞ってちょっと説明したいと思います。なお、ここで扱うのはbitmapフォントのみで、truetypeフォントは含みませんのでご了承ください。

まず、ベースにするアルファベットフォントをコピーします。私の場合、NewYorkフォントが好きなので、NewYorkフォントで話をします。コピーしたフォントのファイル名を"New York Plus"とか適当な名前にします。

そのコピーを例によってResEditで開きたいわけですが、コピー元のフォントがFontsフォルダに入ったままだと修正中に画面が乱れてハングしたりしますし、日本語が有効な環境で日本語フォントを弄ったりすると、これまたシステムがおかしくなることがあります。そこで、コピー元のフォントをFontsフォルダから取り除き、日本語環境を切って(WorldScript II を外す等)立ち上げ直します。
#まぁ、日本語環境を切ってしまうとこの文章も読めなくなってしまいますが、プリントするなりなんなりしておいてください(^_^;

さて、いよいよ修正にはいるわけですが、まずResEditで不要なTrueTypeフォントであるsfntリソースを削除します。次にFONDリソースを開き、"Get Resource Info"を使ってIDとNameを変更します。FONDリソースのIDとNameは非常に重要ですから良く考えてつけてください。

まず、FOND IDは日本語bitmapフォントの場合、16384〜16639でなければなりません。他の日本語フォントのIDとぶつからないことが理想ですが、万一ぶつかった場合は立ち上げ時にシステムが調停してつけ直してくれるはずですから、まぁ、大丈夫ではあると思います。ただし、ID16384は大阪フォントに割り当てられて、システムフォントとして使われていますから、避けておいてください。ここでは16622とします。

次に、Nameですが、これは他のフォント名と絶対ぶつからない名前にしてください。ぶつかった場合どのような事態になるかは分かりません(^_^;。このNameはフォントファイル名と違っていても構いませんが、合わせておいたほうが分かりやすくて良いと思います。で、"New York Plus"にします。ここで設定されたNameがエディタなどのフォント設定で一覧表示される名前になります。

さて、今度はFONDリソースの中身の変更です。FONDリソースを開いて、Family IDをFOND IDと同じ値(16622)に設定します。そしてずっと下のほうに行って、"# of Font entries"の中からいらないサイズの設定を削除します。あまり多くのフォントサイズを残しておいても修正が大変ですから、例えば、9,10,12,14ポイント以外の項目を削除することにします。削除は"1) *****"等の表示をクリックしておいてCutすればできます。なお、フォントサイズが0のものはTrueTypeフォントの指定ですから必ず削除してください。

このとき、残したフォントサイズに対応するRes IDを覚えておいてください。そして、Res IDを変更します。例えば、元のRes IDは31216,8047,26369,14074になっていると思いますから、31217,8048,26370,14075とでも変更します

いよいよ、フォントそのものの変更です。まず、NFNTリソースを開いて上記で残した元のRes IDに対応するIDを持つ項目以外の項目を削除します。9,10,12,14ポイントのものを残したとすると31216,8047,26369,14074が残ることになります。そして"Get Resource Info"を使って、新しいRes IDと同じIDにします。このNFNT IDも他のフォントのものとぶつかっていても大丈夫なはずですが、念のため変更しておいてください。

ここからはフォントそのものを弄りますから、慎重に行ってください。まぁ、システムが壊れることはないとおもいますが、下手をすると今までの修正の苦労が水の泡になるかもしれません(^_^;。ここらでいったんsaveしておいたほうがよいでしょう。

他のサイズの修正方法もほとんど同じですから、9ポイントフォントを変更するとします。ID31216を開こうとすると警告が2回表示されますが、かまわずOKで開きます(^_^;。フォントが表示されますから、Code 129(左下のASCIIが129)に移動します。移動方法で一番簡単なのは右側の中段に表示されているアルファベットをクリックしそれを左右にドラッグする方法です。

Code 129に移動したら、左の枠に表示されているビットマップデータを消します。消し方は色々ありますが、一番簡単なのは、右下段の点線枠ツールを使って文字データを囲み、Cutで切り取ることだと思います。さらに、文字データ下段に表示されている黒三角(▲)をドラッグして、Width(左下に表示されている数字の3つめ)を1にします。このとき(以降も同じですが)、左側に表示されている黒三角(ascent,descentを決めるもの)は絶対に動かさないでください。これを動かすと文字がまともに表示されない可能性が高いです。

つぎに、Code 130に移動します。ここを長さが0〜15の横棒に変更します。横棒の長さは次のCode 131のLocationが16の倍数になるように設定すると表示が速いということですが定かではないです。New Yorkフォントの9ポイント文字の場合は長さを2にするといいようです。

さて、ここからが本当に大事な変更です。Code 131に移ります。ここを漢字フォントと同一サイズの黒四角(フォントストライク)に変更します。例えば、Osaka 9pointなら8x8のサイズですから、

■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■
■■■■■■■■

...といった、形になります(一部見えない人はごめんなさい)。また、Widthは黒四角の幅以上(今の例では8以上)にしてください。あまり大きくすると間延びした変な感じ(漢字^_^;)になりますが...

"漢字フォントのサイズなんてわからない!"という人のために、調べ方を後ほどお教えします。ちなみにOsakaフォントについては、9point : 8*8, 10point : 9*9, 12point : 11*11, 14point : 12*12 になっています。

Code 132〜159は131と同じ黒四角に変更します。Widthさえあっていれば、黒四角にする必要はないようですが、Code 131を点線枠で囲ってコピーし、132〜159にペーストするのが一番楽だと思います。さらに、Code 224〜252はWidthが131と同じ空白に変更します。空白でなくても(黒四角でも)いいのではないかと思いますが、やったことがないので念のため...

以上のように、フォントを変更するわけですが、言葉だけでは良く分からない人は、他の日本語フォントのスーツケースのNFNTリソースを開いて見て、比較しながらやって見てください。

これで終わりです。ResEditを終了し、作ったフォントをFontsフォルダに入れて再起動してください...

えっ!「いったい漢字フォントはどこにあるんだ!」と御思いでしょうか?
実は、丸漢ファイルの中には、"どの1byteフォントに対応しているか"を決めるためにFONDリソースのリソースIDを保持しています。ところが、新しく作った1byteフォントには、当然対応する丸漢ファイルは存在しません。この場合、Osakaフォントが使われることになっています。というわけで、上の例でも漢字としては、Osakaフォントが使われることになります。

逆に、Osakaフォント以外の漢字フォントを使いたいときは、使いたい丸漢ファイルをコピーし、fbitリソースの中の対応するFOND IDを変更してやれば良いわけです。では、どこに書かれているのか?

その前に、ちょっと丸漢ファイルのことについてちょっと書いておきたいと思います。

System7.5(漢字Talk7.5)以降(だったと思う)の丸漢ファイルと、それより前の丸漢ファイルでは構造が違っています。7.5以前では丸漢ファイルの中に漢字ビットマップフォントそのものを持っていましたが、7.5以降では、漢字ビットマップフォントは対応するフォントスーツケースのsfntリソース(本来はTrueTypeフォントのリソース)に持っていて、丸漢ファイルの中には漢字フォントに関するいくつかの情報しか持っていません。このことは、丸漢ファイルのサイズを見れば、良く分かります。7.5以降の丸漢ファイルのサイズは数KBしかないのに、7.5以前では、数百KB〜数MBもあります。

さて、丸漢ファイルの構造が分からなければ、中に書かれているFOND ID等を変更することができません。Appleからはfbitリソースのヘッダ部分の構造が公表されているので、これをもとにResEdit用fbitテンプレートを作ってみました。以下に置いておきます。


これ (fbit_template.bin)です。


ところが、このテンプレートはリソースが比較的小さい場合(64KB以下?)にしか使えません。つまり、7.5以前の丸漢ファイルにはほとんど使えないわけです。まぁ、現在、7.5以前のシステムを使っている人は少ないでしょうから、許してください(^_^;。

このテンプレートを使ってFOND IDを上記の方法で作成したFOND IDに書き換えれば、変更した丸漢ファイルに対応した漢字フォントを使うようになると思います。

ちなみに、このテンプレートを使って表示されるHeightとWidthを見れば、対応する漢字フォントの大きさが分かります。

ついでに、7.5以前の漢字フォントを使いたい場合は、Hex Editorでfbitリソースを開き、offset 10(hex)の2バイトがFOND IDになりますから、(Hexa Codeに変換して)そこを変更すれば良いと思います。

また、Height, Widthはそれぞれoffset 18(hex), 1A(hex)になります。