最近在设置 IBM Plex Mono 这个字体时,发现 Emacs 在 Windows 和 macOS 上设置字体使用不同的字重时有些差异,不知道这个是字体的问题,还是 Emacs 的Bug?
在 macOS 和 Windows 上安装的都是这个字体中的 IBM Plex Mono: https://github.com/IBM/plex/releases/download/v6.3.0/TrueType.zip
在Windows 平台,下面这个设置是可以使用 regular 和 bold 这两个字重的。
(set-face-attribute 'default nil :font (format "%s:pixelsize=%d" "IBM Plex Mono" 20))
(set-face-attribute 'default nil :font (format "%s:pixelsize=%d:weight=bold" "IBM Plex Mono" 20))
但是没法这样设置使用 medium 这个字重:
(set-face-attribute 'default nil :font (format "%s:pixelsize=%d:weight=medium" "IBM Plex Mono" 20))
但是在 macOS,上面的这行配置确实可以生效的。
在 Windows 下要这样设置才可以使用 medium 这个字重:
(set-face-attribute 'default nil :font (format "%s:pixelsize=%d" "IBM Plex Mono Medm" 20))
希望大佬们指点下迷津,怎么才能设置才是正确的姿势?
我好像也有遇到过这个问题的印象。
我在Linux下,以前某个版本(至少是emacs29之前)的时候,设置medium字重是没有用的,得单独设置字体。
似乎是emacs更新过字重的设置?
有这样一个变量 font-weight-table
emacs29上关于medium的应该是这样了
[80 regular normal unspecified book]
[100 medium]
我记得以前medium和regular是在同一行的。
Nasy
4
也许可以考虑用(font-spec xxx)来配置
我确认了下,在 Windows 和 macOS 上 font-weight-table
的值是一样的:
[[0 thin] [40 ultra-light ultralight extra-light extralight]
[50 light] [55 semi-light semilight demilight]
[80 regular normal unspecified book] [100 medium]
[180 semi-bold semibold demibold demi-bold demi] [200 bold]
[205 extra-bold extrabold ultra-bold ultrabold] [210 black heavy]
[250 ultra-heavy ultraheavy]]
(set-face-attribute 'default nil :font (format "%s:pixelsize=%d:weight=medium" "IBM Plex Mono" 20))
在 macOS 生效,但在 Windows 上不生效。
原因是,在 Windows 上,medium 不在这个 IBM Plex Mono 字体名称下,而是在 IBM Plex Mono Medm
这个名称下。所以下面这个设置在 Windows 上是生效的:
(set-face-attribute 'default nil :font (format "%s:pixelsize=%d:weight=medium" "IBM Plex Mono Medm" 20))
试了下用 font-spec 来指定 weight,还是没法生效:
(set-face-attribute 'default nil
:font (font-spec :family "IBM Plex Mono"
:weight 'medium
:size 22))
M-x describe-char
的结果还是 regular的:
harfbuzz:-outline-IBM Plex Mono-regular-normal-normal-mono-22-*-*-*-c-*-iso8859-1 (#x0F)
原来这是 Emacs 在 Windows上固有的问题,是因为在Windows 平台使用的 API有限制。目前在Windows 上只对 regular, italic, bold, bold-italic 这几种字重支持的比较好。
详细解释见我提的这个 issue:
bug#64780: 30.0.50; set-face-attribute can not set the medium weight of IBM Plex Mono on Windows 10