emacs中英文等宽字体配置
在emacs中一直用Consolas(英文)+Yahei(中文)的字体组合,但是不是中英文等宽显示。今天测试了几种中英文等宽字体组合。比较满意的字体是Ubuntu Mono和FiraCode。
在Win10上,微软雅黑(Yahei)的等宽中文字体的显示效果是最好,且不需要安装就能用的字体,所以中文字体确定使用Yahei。在网上找了几种等宽英文字体,逐一和Yahei配合测试,看看什么组合能达到中英文混批时能够等宽显示,测试什么中英文size组合能让2个英文字符正好等于一个中文字符的宽度。
测试的几种英文字体的 1 和 l , 0 和 o 都能很好区分的。而微软的 Consolas 字体中的1和l就需要认真看才能区分出来。
Menlo Mono Nerd Font
Menlo
在macos的 terminal.app
里使用比 Ubuntu Mono
好点, Ubuntu Mono
的字体小了一点,看着费劲。
Ubuntu Mono Nerd font + 等距更纱黑体 T SC
updatedUbuntu Mono Nerd font在Ubuntu Mono的基础上增加了很多glyphs,强烈推荐。
Ubuntu Mono正好可以和更纱黑等比例缩放。更纱黑的的效果比微软雅黑好。
字体 | 效果 |
---|---|
Ubuntu Mono 11 | 在win10上,1920x1080 |
Ubuntu Mono 22 | 在macos上,1920x1080 |
(defun albert-notebook-font() "Config font on HP zhan66." (interactive) (if (eq system-type 'windows-nt) (progn (set-face-attribute 'default nil :font "Ubuntu Mono 11") (setq face-font-rescale-alist '(("等距更纱黑体 T SC" . 1))) (dolist (charset '(kana han symbol cjk-misc bopomofo)) (set-fontset-font (frame-parameter nil 'font) charset (font-spec :family "等距更纱黑体 T SC")))))) (defun albert-macos-notebook-font() "macbook air on 1680x1050." (interactive) (if (eq system-type 'darwin) (progn ;; https://github.com/ryanoasis/nerd-fonts/tree/master/patched-fonts/UbuntuMono/Regular (set-face-attribute 'default nil :font "UbuntuMono Nerd Font Mono 20") (setq face-font-rescale-alist '(("苹方-简" . 1))) (dolist (charset '(kana han symbol cjk-misc bopomofo)) (set-fontset-font (frame-parameter nil 'font) charset (font-spec :family "苹方-简"))) )))
Consolas + Yahei
两种字体都是系统自带的,不需要网上下载。奇怪的是两种字体的size不是等比例的。如测试的大部分字体都是英文size=8 + 中文size=20和英文size=10 + 中文size=24,只有这两种组合是等宽的。
字体 | 效果 |
---|---|
Consolas 8 + Microsoft Yahei 20 | org mode table可以对齐,但是英文太小了 |
Consolas 10 + Microsoft Yahei 24 | org mode table可以对齐,但是英文太小了 |
Consolas 11 + Microsoft Yahei 20 | 我原来一直用的组合,不能对齐。 |
Consolas-with-Yahei
把Consolas和Yahei打到一个ttf字体里了,造成了一个问题,无论选择什么size都做不到对不齐,而且size<10的时候中文显示非常难看。如此强大的emacs根本不需要二合一字体,直接可以控制中英文分别用不同的字体即可。
Source Code Variable
试了一下英文显示效果不错,但是无法和Yahei配合对齐。
Liberation-sans-narrow
不是太好看。字体有点小,而且缩放时不清晰,明显不如其他字体。
Monaco
感觉支持的字符数有点少。Ubuntu更多,更新更快,免费(大家都免费,哈哈)。
字体 | 效果 |
---|---|
Monaco 8 + Microsoft Yahei 20 | org mode table可以对齐,但是英文太小了。但是比Consolas的字体大一点,高一点,效果好很多。 |
Monaco 10 + Microsoft Yahei 24 | org mode table可以对齐,但是中文太小了 |
Ubuntu Mono + Yahei
似乎可以支持显示不少字符。
Ubuntu Mono正好可以和Yahei等比例缩放,这点比较神奇。其他字体只有2种组合能中英文对齐。
字体 | 效果 |
---|---|
Ubuntu Mono 10 + Microsoft Yahei 20 | org mode table可以对齐,但是英文太小了。字母a、e有点难看 |
Ubuntu Mono 12 + Microsoft Yahei 24 | org mode table可以对齐,但是size 24的中文太大了,size 12的英文也有点大 |
Ubuntu Mono 11 + Microsoft Yahei 22 | org mode table可以对齐,中文大小稍微大了一点,size 20就好了,勉强可以接受 |
FiraCode
字体 | 效果 |
---|---|
Fira Code 8 + Microsoft Yahei 20 | org mode table可以对齐,但是英文太小了,不如Ubuntu的组合多。 |
Fira Code 10 + Microsoft Yahei 24 | org mode table可以对齐,但是size 24的中文太大了 |
DejaVu
linux上的老牌等宽字体。
字体 | 效果 |
---|---|
DejaVu Sans Mono 8 + Microsoft Yahei 20 | org mode table可以对齐,但是英文太小了。 |
DejaVu Sans Mono 10 + Microsoft Yahei 24 | org mode table可以对齐,但是size 24的中文太大了,size 12的英文也有点大 |
emacs配置
(defun albert|notebook-font() "Config font on HP zhan66." (interactive) (if (eq system-type 'windows-nt) (progn ;; Setting English Font (set-face-attribute 'default nil :font "Ubuntu Mono 11") ;; Chinese Font (dolist (charset '(kana han symbol cjk-misc bopomofo)) (set-fontset-font (frame-parameter nil 'font) charset (font-spec :family "Microsoft Yahei" :size 22)))))) (defun albert|s2319-font() "Config font on dell s2319. Ubuntu Mono 10 + Yahei 14 太小了 Ubuntu Mono 12 + Yahei 16 比较合适 " (interactive) (if (eq system-type 'windows-nt) (progn ;; Setting English Font (set-face-attribute 'default nil :font "Ubuntu Mono 12") ;; Chinese Font (dolist (charset '(kana han symbol cjk-misc bopomofo)) (set-fontset-font (frame-parameter nil 'font) charset (font-spec :family "Microsoft Yahei" :size 16)))))) (if (eq window-system 'w32) (progn ;; 根据显示器实际宽度(以毫米为单位),显示字体. ;; DELL S2319HS 分辨率: 1920x1080, 屏幕尺寸: 509mm * 286mm ;; EIZO EV2451 分辨率: 1920x1080, 屏幕尺寸: 528mm * 297mm ;; (display-mm-height) (if (>= (display-mm-width) 509) (albert|s2319-font)) ;; 宽度在500mm的认为是笔记本?或者更加精确一点的方式来匹配不同的笔记本型号? ;; HP ZHAN66 309mm X 175mm ;; Thinkpad T430 4xxmm X 20xmm? (if (eq (display-mm-width) 309) (albert|notebook-font))))