给 cnfont 里添加字体支持特别简单

我一直使用「方正聚珍新仿」这个字体,它不等高等宽,在 org-mode 里显示时,经常会碰到表格不对齐,Headlin 的中文 tag 不对齐的情况。

我一直知道 cnfonts 可以混合不同的字体解决中英文对齐的问题,但我之前不知道,如何为 cnfonts 增加其它的中文字体。今天发现,原来特别简单。

直接编辑 cnfonts.el 这个文件即可,里面有一个列表,直接列出了 cnfonts 支持的字型:

然后,在中文字体的列表里,添加自己需要的字型即可。

但需要注意的是,不能够直接输入该字体的中文名称,需要输入 emacs 可识别的中文字体名。这个解决起来也简单,借助 counsel-font 的功能,找到你需要的字体,直接点回车复制,并添加到列表里即可。

现在,我的 org 文件里的中文标签显示已经对齐:

2 个赞

這種辦法比較原始,我之前也想過這樣做,但如果下次cnfont更新,這些設置就沒了。

次原始的是,在config.el文件中把這一段重新寫一下,至少不會因更新而丟失吧。

defvar可以覆盖defconst设置的变量,不用修改cnfonts.el,放在自己配置文件里面就行

可以用这个变量

(defcustom cnfonts-personal-fontnames nil
  "用户自己维护的字体列表,其结构与 `cnfonts--fontnames-fallback' 一致."
  :group 'cnfonts
  :type '(choice (const :tag "None" nil)
                 (list (repeat :tag "English fonts" string)
                       (repeat :tag "Chinese fonts" string)
                       (repeat :tag "Ext-B fonts" string)
                       (repeat :tag "Symbol fonts" string)
                       (repeat :tag "Fonts used for ornament chars " string))))


1 个赞

大佬能舉個例子嗎?比如增加 noto sans cjk tc 字體。謝謝

可以直接用 note sans mono cjk tc 字体

在 scratch 中写一行 elisp 代码:

(cl-prettyprint (font-family-list))

执行后,就会在 scratch 中插入当前可用字体的名称列表,然后再找找你需要的字体的名称,很可能不是 “noto sans cjk tc”

比如我想增加「思源黑体 TC」的字体,是这样吗:

(defcustom cnfonts-personal-fontnames nil
  "用户自己维护的字体列表,其结构与 `cnfonts--fontnames-fallback' 一致."
  :group 'cnfonts
  :type '(choice (const :tag "None" nil)
                 (list (repeat :tag "English fonts" string)
                       (repeat :tag "思源黑体 TC" string)
                       (repeat :tag "Ext-B fonts" string)
                       (repeat :tag "Symbol fonts" string)
                       (repeat :tag "Fonts used for ornament chars " string))))```

我是使用这种方式,之前也试了好多次,亲测有效

(use-package cnfonts
  :ensure t
  :after all-the-icons
  :hook (cnfonts-set-font-finish
         . (lambda (fontsizes-list)
             (set-fontset-font t 'unicode (font-spec :family "all-the-icons") nil 'append)
             (set-fontset-font t 'unicode (font-spec :family "file-icons") nil 'append)
             (set-fontset-font t 'unicode (font-spec :family "Material Icons") nil 'append)
             (set-fontset-font t 'unicode (font-spec :family "github-octicons") nil 'append)
             (set-fontset-font t 'unicode (font-spec :family "FontAwesome") nil 'append)
             (set-fontset-font t 'unicode (font-spec :family "Weather Icons") nil 'append)))

  :custom
  (cnfonts-personal-fontnames '(("PragmataPro Mono Liga" "Go Mono" "Fira Code" "Ubuntu Mono")
                                ("M 盈黑 PRC W5" "方正聚珍新仿简繁" "苹方 常规" "微软雅黑" "苹方 中等" "M 盈黑 PRC W4" "PragmataPro Mono Liga")
                                ("Simsun-ExtB" "方正聚珍新仿简繁" "PragmataPro Mono Liga")
                                ("Segoe UI Symbol" "PragmataPro Mono Liga")))
  :config
  (cnfonts-enable))
5 个赞

確實有效,非常謝謝!同時非常感謝原創者。