为啥 字体 显示 粗细不一

如题, 题主用的是 MS-Windows, 字体是 Maple Mono SC NF (新装的系统, 地区设置的是 US, 只安装了这一款字体), 但是 Emacs 内的显示却很奇怪:

求助各位道友, 有没有办法把 Emacs 内的显示变得和右边记事本一样?


配置:

(custom-set-faces
 '(default ((t ( :family "Maple Mono SC NF"
                 :foundry "outline"
                 :slant normal
                 :weight normal
                 :height 102
                 :width normal)))))

emacs 里面手动设置过字体么?

(set-face-attribute 'default nil :font (font-spec :family "Maple Mono SC NF" :size 16 :weight 'regular))

我原本是用的 menu bar 设置的, 用你的代码也试了一下, 结果都一样.

试试专门设置一下中文字体?

(if (display-graphic-p)
    (dolist (charset '(kana han cjk-misc bopomofo))
      (set-fontset-font (frame-parameter nil 'font)
                        charset
                        (font-spec :family "Noto Sans Mono CJK SC" :height 120))))

1 个赞

我那个字体就是为 中英文 设计的, 你看我的截图的右边. 我的目标就是正常地使用它提供的 中文 和 英文 字体.

单独设置中文字体应该可行,刚刚我在本地试了一下:

(set-face-attribute 'default nil :font (font-spec :family "Maple Mono SC NF" :size 16 :weight 'regular))
(set-fontset-font t '(#x2ff0 . #x9ffc) (font-spec :family "Maple Mono SC NF" :weight 'regular))
1 个赞

??? 为啥这样就可以了

emacs 的字体 fallback 逻辑我也搞不太懂,你可以参考这个贴子:如何为不同 face 设置不同的中文字体

简单来说, set-face-attribute 只影响 ascii 字符使用的字体,中文字符则需要通过 set-fontset-font 来设置。

1 个赞

提问的时候最好能附带下字体相关的配置,因为 Emacs 里设置字体有很多种方法。

另外推荐阅读 Emacs,字体与字符集

1 个赞

还是有点不一样. 我的截图中, 粗的是我想要的字体, 细的好像是 Emacs 默认的字体 (? 反正不是我设置的那种), 这说明我的设置不光应用在 ASCII 字符上面, 部分汉字是正常显示的.

我是通过 menu bar 设置了我在一楼提到的那个字体.

所以说要提供代码,不然大家讨论的都不是一个东西。

那起码应该提供具体的操作。你指的是 Options->Set Default Font ? 那下面有个 Options-> Save Options 的选项,可以生成对应的代码。

我试了一下,生成如下代码,可见改的是 :famlily 而不是 :font ,可能是字体 fallback 的问题

(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(default ((t (:family "Amazon Ember" :foundry "DAMA" :slant normal :weight regular :height 98 :width normal)))))

是这样的, 我更新了问题描述.

但是这个 fallback 太奇怪了, 明明这个字体覆盖了图中的那些汉字.