Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

Emacsで使う等幅フォントの評価

テキストエディタには相変わらずEmacsを使っています。

半角と全角の幅が1:2であること
視認性を重視して半角と全角の幅を3:5にしているフォントもあります。ただ、テキストで表組みをすることが多く、そういうときには場合は1:2の方が便利です。
英数文字がClearTypeに対応していること
100dpi前後(FullHDで21インチくらい)のモニタならビットマップフォントの方が視認性がよいのですが、200dpi近い(4Kで24インチくらい)モニタを使う場合はビットマップフォントの方が視認性がよいようです。
日本語文字がClearTypeに対応していること
日本語英数まじりの文書を書くので、文字だけClearTypeに対応していても仕方ないですね。
いちとアイとエルの区別が強調されていること
コードを書くなら重視しておきたいです。
ゼロとオーとディーの区別が強調されていること
これもコードを書くなら重視しておきたいです。
濁点と半濁点の区別が強調されていること
MSゴシックは悪くないフォントだと思うのですが、ビットマップフォントで濁点と半濁点の区別がつきにくいのだけは困ります。
JIS X 0213:2004に対応していること
文字セットの話をするときに「𩸽」が表示できないのは困ります。
乗算記号が全角であること
乗算記号(×)などJIS X 0208に含まれる記号類が半角幅になっているフォントがあって、日本語文の中で乗算記号を使いたいときに困ってしまいます。
行間が広すぎないこと(フルHDで15ポイントのとき40行以上表示できること)
Emacsだとフォント設定でマイナスの行間を指定できないんですよね。Notoフォントや源ノ角ゴシックは行間が妙に広くなっており、そのまま使うと画面上に表示できる情報量が減ってしまいます。
WindowsEmacsで✗が表示できる
英語で文章を書くときは文章中に✔や✗を多様します。Font Linkの関係か、フォントによってはこれらの文字が豆腐になってしまいます。
全角カッコの位置がバウンディングボックスの端になっている(2021/07/31追記)
日本語フォントでは全角カッコの位置は端になっています。一方、繁体字フォントではバウンディングボックスの中央になっていることが多く、日本語で使うと違和感があります。
setq default-frame-alistのwidthが半角文字幅と同じになる(2021/09/01追記)
setq default-frame-alistで(width . 80)と指定したら、ウィンドウ幅は半角80文字ぶんになってほしいところです。一部のフォントではその通りになりません。
ABCDEFGHI
MS ゴシックRicty Diminished DiscordNoto Sans Mono CJK JP Regular源ノ角ゴシック Code JP RConsolasNasuMCascadia MonoBIZ UDゴシックHackGenNerd
1半角と全角の幅が1:2
2英数ClearType対応
3日本語ClearType対応
4いちとアイとエルの区別を強調
5ゼロとオーとディーの区別を強調
6濁点と半濁点の区別を強調
7JIS X 0213:2004対応
8乗算記号が全角
9行間が広すぎないこと
10WindowsEmacsで✗が表示できる
11全角カッコの位置がbboxの端
11widthが半角文字幅と同じ

すべてOKなのはHackGenNerdくらいのようです。Ricty Diminished Discordは半濁点の強調が強めで非常に好みなのですが、×が半角な点だけが残念です。

WindowsEmacsではこんな感じに設定しています。

(set-face-attribute 'default nil :family "HackGenNerd" :height 150)
(setq-default line-spacing 0)

2021/07/31追記: HackGenNerdは、全角カッコの位置が文字のバウンディングボックスの中央になっています(微軟正黑體など繁体字フォントと同じ)。日本語フォントではバウンディングボックスの端にあることが多いので、その点は違和感があります。

2021/09/01追記: BIZ UDゴシックを含む一部フォントは、(setq default-frame-alist)で(width . 80)と指定しても、ウィンドウ幅が半角80文字ぶんになりません。