12
8

More than 5 years have passed since last update.

日本語等幅フォントをコンソール端末用に最適化させるフォント Illusion を作りました

Posted at

コンソール端末と JIS X 0208 をこよなく愛する前世紀生まれのオールドタイプのための、日本語等幅フォントを Unicode の East Asian Width に対応させる補助フォント「Illusion」を作りました。

解消したい問題

  • 通常の Unicode 環境で半角扱いの Ambiguous や Neutral が全角で、被ったりズレたりする。
  • Unicode の罫線素片やブロック要素が不足したり、縦の罫線が行間で切れたりする。

CJK 用の文字幅などで Ambiguous を全角扱いにすると、Text User Interface なコマンドやアプリとの相性が悪くなります。出来るなら、普段の日本語等幅フォントを使いながら、場面によって半角と全角どちらも使い分けたい。そして罫線を補って、日本語混じりのコーディング環境をより快適にしたい!

そうした欲求と衝動で生まれたフォントです。

特徴

  • 主な英数文字は Roboto Mono をベースに半角幅に調整。
  • Unicode の East Asian Width の扱いに応じたバリエーションを実装。
  • 通常の日本語等幅フォントとの併用を想定。
  • アスキーコード、JIS X 0208 の Ambiguous な記号類、コンソール端末用の 罫線素片とブロック要素を収録。

Illusion screenshot

スクリーンショットは MacType のヒンティング無しで描画したものです。

罫線素片とブロック要素は、敢えて微妙な角丸と立体交差的に装飾しています。

好みの日本語フォントとの組み合わせ

好みの日本語等幅フォントと組み合わせて使えるよう、 日本語の平仮名・片仮名・漢字は含めていません。

ブラウザの CSS の font-family や、Windows のレジストリの FontLink など、フォールバックの仕組みを活用して、合成フォントなしに組み合わせられます。

三種類のバリエーション

曖昧 中立 Font Family 主な使い分け
半角 半角 Illusion N (Narrow) 国際的なコンソール環境との互換重視
全角 半角 Illusion W (Wide) Shift_JIS や EUC-JP との互換重視
全角 全角 Illusion Z (Zenkaku) 多くの日本語等幅フォントと同様の幅

詳細については リポジトリの README.md をご覧ください。

以下、各サンプルのスクリーンショットです。

Illusion N (Narrow)

Illusion N with Yu Gothic

Illusion W (Wide)

Illusion W with Meiryo

Illusion Z (Zenkaku)

Illusion Z with BIZ UDGothic

README に書いていないこと

紹介だけでは Qiita っぽくないので、一つ技術的な背景を書きます。

TTC (TrueType Collection) 形式ということ

三種類のバリエーションに標準・斜体・太字・太字斜体を組み合わせると 12個の .ttf ファイルになるのを共通化させて、ウェイト違いの2個の .ttc にまとめました。

各フォントで共有の glyf テーブルにするために、FontForge では一旦仮に Unicode の私用領域にマップして、ビルド処理でバリエーションに応じた cmap テーブルの .ttf を中間生成して .ttc にしています。

グリフ名で管理する方法では、AGL (Adobe Glyph List) と Unicode の対応や、グリフ名と .ttc 内の各フォントでの Unicode との対応で、混乱したり煩雑だっりしていたので、仮にマップした Unicode で管理しています。

このおかげで、ビルド処理用のスクリプトもシンプルになりました。


tmux や vim で左右に画面分割したら悲惨な目に遭うとか、pstree がきちんと描画されないとか、でも Ambiguous が全角の方が良いときもあるよ! ……とか。コンソール端末と JIS X 0208 の間の課題を、幾らか吸収することが出来れば幸いです。

ご意見・ご感想などありましたら、お手柔らかにお願いします。

12
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8