中文标点显示宽度问题

用 Doom Emacs 挺久了,最近(似乎是某次更新后?但记不清了)突然出现中文标点符号显示宽度的问题,简单说就是中文标点的显示宽度变得既不是中文字符宽度也不是英文字符宽度,见图。

系统是 macOS 13,通过 Homebrew 安装 d12frosted 维护的 emacs-plus 28.1,Doom Emacs 最新版本。使用的中文字体是 Sarasa Mono SC,我很久没改过相关配置了,所以我觉得应该和配置关系不大,不过后面还是附上了相关的配置代码供参考。

有朋友碰到过类似的问题吗?有什么可能的线索不?拜谢先。

附:相关字体配置

(setq +main-font "Iosevka Fixed")
(setq +unicode-font "JuliaMono")
(setq +greek-font "Sarasa Mono CL")
(setq +cjk-font "Sarasa Mono SC")

(setq doom-font (font-spec :family +main-font :size 16 :weight 'light)
      doom-big-font (font-spec :family +main-font :size 20 :weight 'light)
      doom-variable-pitch-font (font-spec :family +main-font) ;; inherits the :size from doom-font
      doom-serif-font (font-spec :family +main-font :weight 'light)
      doom-unicode-font (font-spec :family +unicode-font)
      )

(setq doom-themes-enable-bold t
      doom-themes-enable-italic t)

;; fix chinese characters not using doom-unicode-font issue
(use-package! unicode-fonts
  :config
  ;; common math symbols
  (dolist (unicode-block '("Mathematical Alphanumeric Symbols"))
    (push +unicode-font (cadr (assoc unicode-block unicode-fonts-block-font-mapping))))
  (dolist (unicode-block '("Greek and Coptic"))
    (push +greek-font (cadr (assoc unicode-block unicode-fonts-block-font-mapping))))
  ;; cjk characters
  (dolist (unicode-block '("CJK Unified Ideographs" "CJK Symbols and Punctuation" "CJK Radicals Supplement" "CJK Compatibility Ideographs"))
    (push +cjk-font (cadr (assoc unicode-block unicode-fonts-block-font-mapping)))))

中文字体部分,doom emacs 依赖的 unicode-fonts ,对中文也好,其他如韩语,日语的单独配置,都貌似没有。建议按照下面的方法:

https://idiocy.org/emacs-fonts-and-fontsets.html

(set-fontset-font t 'cjk-misc “Sarasa Mono SC”),这样设置,标点符号就和你中文字体一致了。

试过这个方案了,没解决问题。

我觉得我碰到的这个问题并不是“没启用我指定的中文字体”(看我顶楼的截图,明显标点符号确实是中文字体的),而是本来应该和汉字一样宽度的标点显示时被“压缩”了宽度,我自己以前从未碰到过这种情况……

Emmm,我发现我自己把问题搞复杂了,我把配置改成最简单的两种字体:

(setq +main-font "Iosevka Fixed")
(setq +unicode-font "Sarasa Fixed SC")

(setq doom-font (font-spec :family +main-font :size 16 :weight 'light)
      doom-big-font (font-spec :family +main-font :size 20 :weight 'light)
      doom-variable-pitch-font (font-spec :family +main-font) ;; inherits the :size from doom-font
      doom-serif-font (font-spec :family +main-font :weight 'light)
      doom-unicode-font (font-spec :family +unicode-font)
      )

(setq doom-themes-enable-bold t
      doom-themes-enable-italic t)

其他字体相关的hacking都去掉,现在一切正常了 :S

感谢前面朋友的回应!