Skip to content

Instantly share code, notes, and snippets.

@retorillo
Last active July 20, 2022 13:18
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save retorillo/0c80dea974816731a493afbc3a70fef2 to your computer and use it in GitHub Desktop.
Save retorillo/0c80dea974816731a493afbc3a70fef2 to your computer and use it in GitHub Desktop.
fontforgeによる等幅合成フォント作成時の注意点

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment