fontforgeによる等幅合成フォント作成時の注意点
make.pyはファイル名に使うべきではない
pythonをインストールしている環境ではmakeコマンドよりもmake.pyが優先して実行されることがあり混乱する。
cidFlattenは使うべきではない
同じコード値を示すグリフは複数ある場合がある。 この場合cidFlattenは期待しない結果となる。
以下のようなループで必要なグリフをピックアップするのが良い。
for subfont in range(0, font.cidsubfontcnt):
font.cidsubfont = subfont
# ...
どの文字をフィルタするべきかは http://x0213.org/ などで配布されているファイルなどが便利である。
PANOSEの設定を忘れない
os2_panose で等幅に設定する。Windowsはこの値を使い等幅かどうかを判定しているらしい。 この値は数字の列でありドキュメント化されていない。どれがどの値なのかは、GUIで操作して保存し、スクリプトで値を得るしかない。
os2_codepages, os2_unicoderanges の設定を忘れない
これらの設定をしなくてもほとんどのアプリケーションで動作するが、 VIMなど一部のアプリケーションは厳密に正しくないと動作しないようである。 これらも数字の列であるため、GUIで操作し、スクリプトで値を得るしかない。 あるいはすでに動作している既存の日本語フォントからこれらの値を借りてくるのもよい。
OTFを使うべきではない、TTFで出力する
os2_panose で等幅フォントに指定した状態で、OTFで出力しようとすると、半角文字もすべて全角幅に変換して出力されてしまう。 これを回避するにはTTFで出力するしかない
TTFで出力したフォントの幅が広すぎる(vAvgCharWidthのバグ)
これはfontforgeのバグとされている。os2_versionの値を変えると稀に直ることがある。 fonttoolsを使いOS/2テーブルを出力、修正し、再合成することで確実に修正できる。
ttx -t 'OS/2' raw.ttf
# sed > fixed.ttx
ttx -m raw.ttf fixed.ttx
fonttoolsはpythonをインストールし、pip install fonttools
を実行すれば入手できる。
Vimで読み込む場合
Vimで読み込む場合、ファイル名の空白はアンダースコアで置き換えて入力するが、これはWindows Vimだけの仕様である点に注意する。
VimでInvalid Font
などのエラーとなった場合、 os2_panose, os2_codepages, os2_unicoderangesなどの設定を疑う。
set guifont=Awesome_My_Font:h12