mattintosh note

どこかのエンジニアモドキの備忘録

2024-06-05: 現在ホビー関連の記事を 新しいブログ に移行しています(一部の国、ISP からは閲覧できません)

Fira Mono と M+ FONTS を合成して等幅和文フォントを作る

Firefox OS のタイプフェイスや Web フォントとしても提供されている Fira Mono と定番の M+ FONTS を合成してみた。

FontForge による字間・行間調整と合成

字形は変えたくないので半角と全角の幅は字間のみで調整。

  • 全角幅 1200 だと上手く合わないのでとりあえず 1100。
  • 2014.06.26:合うポイントサイズと合わないポイントサイズがあるらしいので Fira Mono の2倍の 1200 にした。
  • 2014.06.29:1100 でできた。

*Fira は SIL Open Font License により派生には同じ名前を含められないことになっています。

#!/usr/bin/env fontforge

width  = 1100
margin = 0

WinAscent    = 785  + margin
WinDescent   = 215  + margin
HHeadAscent  = 785  + margin
HHeadDescent = -215 - margin
TypoLineGap  = 0
HHeadLineGap = 0

### ソースフォント設定 ###
mx_type   = "2m"
mx_weight = "regular"
mx_dir    = "/usr/local/src/repos/mplus_outline_fonts/work.d/targets/mplus-"
mx        = mx_dir + mx_type + "/" \
            + mx_weight + "/" \
            + "mplus-" + mx_type + "-" + mx_weight + ".ttf"
fira      = "/usr/local/src/repos/Fira/otf/FiraMono-Regular.otf"

### M+ FONTS ###
Open(mx)
SelectWorthOutputting()
# 2014.06.29: サイズを一回り小さくする
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)

### Fira Mono ###
Open(fira)
SetUniqueID(0)
SelectWorthOutputting()
SetWidth(width/2)
if (width >= 1001)
    SetBearing(((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("FiraMono-Regular-Mixed", \
             "Fira Mono Mixed", \
             "Fira Mono Mixed")
SetTTFName(0x409, 1, "Fire Mono Mixed")
SetTTFName(0x409, 2, "Regular")
SetTTFName(0x409, 4, "Fira Mono Mixed")
SetTTFName(0x411, 1, "Fira Mono Mixed")
SetTTFName(0x411, 2, "レギュラー")
SetTTFName(0x411, 4, "Fira Mono Mixed")
Generate($fontname + ".ttf", "")

Quit(0)

ImageMagick のテキストレンダリング 16pt で出力したもの。左が Fira Mono と M+ 2M の合成、右が本来の M+ 2M。

*古くなったので消した

Komodo Edit での表示。等幅和文フォントなので全角と半角のずれは今のところなし。ただ、DejaVuSansMono より小さいみたいなのでもう少し調整した方がよさそう。

*古くなったので消した


〈今後の課題〉

  • Fira Mono をベースにしたためフォントが和文フォントとして認識されない。
  • 残り2ウェイトを作成する。
  • 字間・行間をもう少し調整する。

2014.06.27
Fira Mono / M+ 2M / DejaVu Sans Mono 比較

正確なサイズを調べたのでメモ。DejaVu Sans Mono の () 内は EM=1000 の場合の推定値。

Fira Mono M+ 2M DejaVu Sans Mono
Em Size 1000 1000 2048
Ascent 785 860 1556 (760)
Descent 215 140 492 (240)
Win Ascent 1050 1075 1901 (928)
Win Descent 500 320 483 (236)
Typo Line Gap 200 90 410 (200)
HHead Line Gap 0 90 0
VHead Column Spacing - 90 -


DTP 印刷 デザインの基本 (玄光社MOOK)

DTP 印刷 デザインの基本 (玄光社MOOK)

新詳説DTP基礎[改訂三版] (MdN DESIGN BASICS)

新詳説DTP基礎[改訂三版] (MdN DESIGN BASICS)