之前一直用 igc 分支,由于很久没更新了,就切到 master 来用用,发现英文行高有点问题,可以看到图中都拥挤在一起,有中文的时候是撑开了行高。在同样是master的Linux下不是这样的,PragmataPro和霞骛文楷的字高是一样的。不知道是否有人遇到这个问题,该如何解决。
用 line-space 来增加行距?
不是,我意思是个问题。
看这个 “i” ,问题出在英文字体上。emacs -q 单独测这个英文字体吧。
并不会,这个字体我用了一年多了。Linux上也是正常的。
试试我那版 rich-text,可以直接设置字体 rich-text-set-font-overlay ,多尝试几种字体。你这个字体我也没法下载测试啊,收费 ![]()
emacs -Q 也可以复现,我用igc没有问题的,我试试三周前的commits。
我上面贴了啊,就是截图patch的问题,参考 [Feature request]: please pick this font patch from railwaycat's emacs-mac · Issue #864 · d12frosted/homebrew-emacs-plus · GitHub ,你编译的时候手动从 formula 里面的 rb 文件去掉这个 patch 就行了。
请问你也是用的 emacs-plus 最新的带有这个patch的版本么?
我用 Emacs 31 的 emacs -Q 加上那个字体补丁没能复现:
scalar clone https://github.com/emacs-mirror/emacs.git
cd emacs/src
git sparse-check disable
patch -p1 -i ~/Downloads/mac-font-use-typo-metrics.patch
./autogen.sh
./configure --prefix=$HOME/tmp/aaa # 这个 prefix 好像不起作用
gmake -j8
gmake install
nextstep/Emacs.app/Contents/MacOS/Emacs -Q
# C-h h 出来 HELLO 文件;
# M-x describe-char 查看用到的字体
# M-x emacs-version 查看版本
把 homebrew-emacs-plus/patches/emacs-31 at master · d12frosted/homebrew-emacs-plus · GitHub 这里三个补丁都打了也没能复现问题。
$ git log -1
commit 04112d04f2d5d89e144850bb51b7c221fe2bf51c (HEAD -> master, origin/master, origin/HEAD)
Author: Michael Albinus <[email protected]>
Date: Sat Jan 3 15:46:22 2026 +0100
Mitigate uutils coreutils problems in Tramp
* lisp/net/tramp-sh.el (tramp-get-ls-command): Prefer gnuls over ls.
(tramp-get-remote-readlink): Prefer gnureadlink over readlink.
(Bug#79956, Bug#80075)
没能复现。。。难道你用 emacs -Q 后又手动指定了啥字体配置?如果是的话,那可能是你用的字体提供了 OS/2 table 但里面的数据不太合理(老代码不用 OS/2 table),你可以用 fontforge 之类的软件查看下我在 github issue 里提到的几个值是多少: [Feature request]: please pick this font patch from railwaycat's emacs-mac · Issue #864 · d12frosted/homebrew-emacs-plus · GitHub , 更多解释见 prefer sTypoAscender, sTypoDescender and sTypoLineGap from OS/2 table · railwaycat/homebrew-emacsmacport@b825bfd · GitHub
你可以用 face-font-rescale-alist 变量来缩放某个字体的行高。
对,我用 emacs-plus@31 --with-widget
我因为喜欢尝鲜,所以一定都是同步到最新版的
其实我没有出现你图中的状况
主要是 mode-line 似乎有点问题
因为之前没这问题,我只是看到大佬的文盲猜是这个 patch 的锅…
没看出你这 mode line 有啥问题。。。是说高度小了点?这可能是因为从字体的 HHead Ascent/Descent/LineGap 换到 Typo Ascent/Descent/LineGap 了,这也谈不上是问题吧。
我之前测试可能有其他干扰,我再次测试了下似乎只有 PragmataPro 有问题,同类型的 iosevka 也没问题,MonoLisa JetBrains 都没问题🤦♂️,我还没有根据你 issue 中的步骤查看字体参数,但这个字体之前是没有问题的,Emacs 不能因为解决其他问题忽略了兼容性。
这个也不太好说是兼容性问题,按最佳实践来说是偏向 typo metrics 的,和 hhead metrics 两者应是自洽的,但字体设计师未必会考虑这么多,算是字体设计、字体文件参数设置、文字渲染技术不协调的历史遗留问题,更主流的字体会少点这类问题。Emacs 提供了一些办法来微调字体参数:
- face-font-rescale-alist (推荐用这个)
- line-spacing
有 “ㄓ” 的那行变高了,我一切换成 rime ,modeline 就要变高一点,切换回来就缩回去…
(我刚刚艾特错人了)
这大概是因为按 typo metrics 算的 font height 比按 hhead metrics 算的 font height 变高了一点,Emacs 是按一行文本的最高 font height 来计算 line height,所以会有变化,解决办法是调整下字号让中英文字体匹配,或者更简单点用 face-font-rescale-alist 来缩小一点点中文字体的 metrics,比如我的配置:
(setq doom-font (font-spec :family "Menlo" :size 14))
(setq doom-symbol-font (font-spec :family "Alibaba PuHuiTi 3.0"))
(use-package! vterm
:config
(setq-hook! 'vterm-mode-hook
; decrease line height of CJK chars for ncurses application to avoid vertical overflow
face-font-rescale-alist '(("-p-0-iso10646-1$" . 0.99)))
(setq vterm-ignore-blink-cursor nil
vterm-eval-cmds '(("find-file" find-file)
("message" message)
("vterm-clear-scrollback" vterm-clear-scrollback)
("toggle-send-escape" evil-collection-vterm-toggle-send-escape))))
个人认为为了解决其他问题,使得很多Emacs用户需要在配置中添加这个配置来解决是不可取的,更不适合提交到上游,应该仅仅作为有需求的人自己patch。毕竟字体是更加基础的功能。





