Migu 1MフォントからASCIIだけを抽出する

とある事情により Migu 1M フォントから ASCII 文字だけを抽出したフォントを作ってみたのでメモ。

もとの migu-1m-regular.ttf から 0x80 以降の文字を消してもいけるんじゃないかと思ったんだけど、それだとなぜかフォントファイルのサイズが大きいままだったので、新しいフォントファイルにコピペで作るようにした。

  1. FontForge で Migu 1M フォントを開く

     % fontforge migu-1m-regular.ttf
    
  2. 0x20-0x7F の範囲をコピー

  3. 「ファイル」メニューの「新規」

  4. 新しく開いたウィンドウの 0x20 でペースト

  5. なぜか 0x20 はペーストされないので、もう一度 0x20 を選択してコピー&ペースト

  6. なぜか 0x20 が全角幅で作られてるので、0x20 をダブルクリックして幅を 1000 から 500 に変更する

  7. 「エレメント」メニューの「フォント情報」の「PS Names」

    • フォント名に migu-1m-ascii-regular を指定
    • ファミリー名に表示用の名前に Migu 1M ASCII を指定
    • 表示用の名前に Migu 1M ASCII Regular を指定
    • 「OK」を押して閉じる
  8. 「ファイル」メニューから「フォントを出力」

    • なにか警告が出るけど無視

以上をコマンドラインでやるにはこんな感じ。

% fontforge -lang=ff -c '
Open("migu-1m-regular.ttf");
Select(0u20, 0u7f);
Copy();
Close();
New();
Select(0u20, 0u7f);
Paste();
Select(0u20);
Copy();
Paste();
SetWidth(500);
SetFontNames("migu-1m-ascii-regular", "Migu 1M ASCII", "Migu 1M ASCII");
Generate("migu-1m-ascii-regular.ttf")
'

FontForge はスクリプトでいろいろ操作できて便利。