Android 12から標準搭載されているNoto Sans/Serif CJKは、chws(Contextual Half-width Spacing)機能に対応しました。これにより、括弧や句読点などの約物のアキが自動で調整されるようになり、より美しい文字組みが実現されています。最近では chws に対応したフォントやテキスト描画システムが増えつつあり、ユーザー側も自然な文字組みを期待するようになっています。
chws に対応していないフォント
chws 対応フォントが増えてきたとはいえ、いまだに対応していないフォントは数多く存在します。例えば、Google FontsからダウンロードできるNoto Sans JPでも、ウエイトごとに個別で提供されている静的フォント(Static Font)は chws に対応していません1。
バリアブルフォントが利用できない環境のため静的フォントを使わざるを得ない場面や、そもそも chws に対応していないフォントを使いたい場面は依然としてあります。このようなとき、約物のアキが不自然に残ってしまい、もどかしく感じる開発者は多いでしょう。
chws-tool による解決
任意のフォントを chws 対応させるには、Google Fontsチームが公開している chws-tool が非常に便利です。実際のNoto CJKフォントも chws-tool によって chws 対応が行われているようです。
chws-tool は、指定したフォントファイルを解析し、chws, vchw, halt, vhal といったOpenType機能を追加します。Pythonのパッケージマネージャであるuvを利用している環境であれば、chws-tool は uvx コマンドで簡単に実行できます:
uvx --from chws-tool add-chws font-file.ttf
実際に確認
実際に chws に対応していない「Zen Maru Gothic」を chws に対応させてみました。
参考文献
-
バリアブルフォントの方は
chwsに対応しています。 ↩
