
Fira Mono と M+ FONTS を合成して等幅和文フォントを作る (2回目)
前回から行間をちょっとだけ広げ、レギュラーとボールドを同時生成するためにスクリプトを2つに分けた。FontForege のスクリプトって環境変数拾えないのかな…。
#!/bin/sh -e FONTFORGE=/opt/local/bin/fontforge tempfile=`mktemp -t $$`.pe trap "rm $tempfile" EXIT set -- Regular Bold for f { case $f in Regular) weight_jp="レギュラー" ;; Bold ) weight_jp="ボールド" ;; esac sed -f /dev/fd/0 $HOME/share/fontforge/firaplus.pe.in >$tempfile <<! /@HOME@/s||$HOME|g /@WEIGHT@/s||$f|g /@WEIGHT_JP@/s||$weight_jp|g ! $FONTFORGE -script $tempfile }
width = 1100
margin = 0
WinAscent = 785 + margin
WinDescent = 215 + margin
HHeadAscent = 785 + margin
HHeadDescent = -215 - margin
TypoLineGap = 100
HHeadLineGap = 100
fira = "/usr/local/src/repos/Fira/otf/FiraMono-@WEIGHT@.otf"
mx = "/usr/local/src/repos/mplus_outline_fonts/work.d/targets/mplus-\
2m/@WEIGHT@/mplus-2m-@WEIGHT@.ttf"
Open(mx)
SelectWorthOutputting()
Scale(90)
SetWidth(width)
if (width >= 1001)
SetLBearing((width - 1000)/2,1)
endif
SetOS2Value("WinAscent", WinAscent)
SetOS2Value("WinDescent", WinDescent)
SetOS2Value("HHeadAscent", HHeadAscent)
SetOS2Value("HHeadDescent", HHeadDescent)
SetOS2Value("TypoLineGap", TypoLineGap)
SetOS2Value("HHeadLineGap", HHeadLineGap)
Open(fira)
SetUniqueID(0)
SelectWorthOutputting()
SetWidth(width/2)
if (width >= 1001)
SetLBearing(((width - 1000)/2)/2,1)
endif
SetOS2Value("WinAscent", WinAscent)
SetOS2Value("WinDescent", WinDescent)
SetOS2Value("HHeadAscent", HHeadAscent)
SetOS2Value("HHeadDescent", HHeadDescent)
SetOS2Value("TypoLineGap", TypoLineGap)
SetOS2Value("HHeadLineGap", HHeadLineGap)
MergeFonts(mx)
SetFontNames("FiraPlus-@WEIGHT@", \
"Fira Plus", \
"Fira Plus")
SetTTFName(0x409, 1, "Fira Plus")
SetTTFName(0x409, 2, "@WEIGHT@")
SetTTFName(0x409, 4, "Fira Plus")
SetTTFName(0x411, 1, "Fira Plus")
SetTTFName(0x411, 2, "@WEIGHT_JP@")
SetTTFName(0x411, 4, "Fira Plus")
Generate("@HOME@/Library/Fonts/" + $fontname + ".otf", "")
Quit(0)
ターミナルプレビュ
Fira Plus はグリフ幅 550/1100 で M+ FONTS の分を Fira Mono に合わせるためにスケール 90%。こうしてみるとどっちに合わせるかまた悩む…。

Firefox HTML ソースビューアプレビュ
| Fira Plus | M+ 2m Regular |
|---|---|
![]() |
![]() |
ウェイトが変わっても幅の変動が少ない DejaVu Sans Mono
Fira Mono と M+ FONTS を合成してみて、英語と日本語のバランスはよくなったものの英語部分が DejaVu Sans Mono と比べるとやっぱりなんだか見づらい。日本語に合わせるために Fira Mono の両サイドベアリングを削ってるせいもあってボールドにするとかなりキツキツな感じ。DejaVu Sans のときはあまりこういう印象がなかったんだけど何でだ?と思って Font Book を眺めていたら DejaVu Sans Mono はボールド時に内側に太くなるのでレギュラーとボールドの文字幅の変動が少ないことに気づいた。
黒はレギュラーのライン、赤はボールドのライン。V と W の間なんかを見てみるとわかりやすい。
Fira Mono

DejaVu Sans Mono

最初から DejaVu Sans Mono と M+ FONTS を合わせればよかったのではないか…。

