hek14
2019 年6 月 15 日 04:35
1
我目前在使用doom emacs, 我想单独为中文设置字体, 相关片段如下:
(setq face-font-rescale-alist `((“STkaiti” . ,(/ 16.0 13))))
(set-fontset-font t 'han (font-spec :family “STKaiti” :size 16))
(set-fontset-font t 'cjk-misc (font-spec :family “STKaiti” :size 16))
尝试了以下做法:
在~/.doom.d/config.el中插入上述片段, 发现无效; 原因我猜是doom在doom-after-init-modules-hook
中加入了doom|init-fonts
;
将上述代码用lambda函数加入到 doom-after-init-modules-hook
末尾, 此时会报错: Invalid function: (set-fontset-font t (quote han) (font-spec :family "STKaiti" :size 16))
真心请教一下doom emacs下如何单独为中文设置字体
Update : 上述代码片段是没有问题的, 在启动emacs之后 , 拷贝到scratch buffer 然后 evaluate之后, 能够让设置生效.
1 个赞
(defun custom-font()
;; your settings
)
(add-hook 'after-make-frame-functions #'custom-font)
hek14
2019 年6 月 15 日 12:00
6
cnfont 有一些问题, 在doom中使用cnfont之后, modeline的字体会出现问题. 所以我没有用cnfont了
(defun +my/better-font()
(interactive)
;; english font
(if (display-graphic-p)
(progn
(set-face-attribute 'default nil :font (format "%s:pixelsize=%d" "Fira Code" 17)) ;; 11 13 17 19 23
;; chinese font
(dolist (charset '(kana han symbol cjk-misc bopomofo))
(set-fontset-font (frame-parameter nil 'font)
charset
(font-spec :family "Sarasa Mono SC")))) ;; 14 16 20 22 28
))
(defun +my|init-font(frame)
(with-selected-frame frame
(if (display-graphic-p)
(+my/better-font))))
(if (and (fboundp 'daemonp) (daemonp))
(add-hook 'after-make-frame-functions #'+my|init-font)
(+my/better-font))
这是我现在的设置,是之前论坛一个帖子中提到的,在Doom中用起来一切正常。
9 个赞
(when IS-WINDOWS
(when (display-graphic-p)
(defun set-font (english chinese english-size chinese-size)
(set-face-attribute 'default nil :font
(format "%s:pixelsize=%d" english english-size))
(dolist (charset '(kana han symbol cjk-misc bopomofo))
(set-fontset-font (frame-parameter nil 'font) charset
(font-spec :family chinese :size chinese-size))))
(set-font "Source Code Pro" "simsun" 12 14)
))
1 个赞
hek14
2019 年6 月 15 日 12:48
10
谢谢您的回复, 这段代码是work的, 确实写得逻辑完备, 学习了~谢谢
你好,我也在用这段代码。但是发现了一个问题。
Doom默认的字体是monaco 12。这段代码里如果我把english那里的字体或size设置成别的,就一点问题没有。如果那里和doom默认一样也是monaco 12,那后面的中文字体直接就不加载了。我跑到代码这里手动C-x C-e
才生效。不知道这种问题有遇到过吗?可否帮忙解决一下?
Doom FAQ 里提到如何修改字体 ,既然用了 doom emacs 就不要再用其它方法了,免的冲突或者不生效。
~/.doom.d/config.el:
;; Doom exposes five (optional) variables for controlling fonts in Doom. Here
;; are the three important ones:
;;
;; + `doom-font'
;; + `doom-variable-pitch-font'
;; + `doom-big-font' -- used for `doom-big-font-mode'; use this for
;; presentations or streaming.
;;
;; They all accept either a font-spec, font string ("Input Mono-12"), or xlfd
;; font string. You generally only need these two:
;; (setq doom-font (font-spec :family "monospace" :size 12 :weight 'semi-light)
;; doom-variable-pitch-font (font-spec :family "sans" :size 13))
(setq doom-font (font-spec :family "Menlo" :size 12 :weight 'semi-light)
doom-unicode-font (font-spec :family "monospace"))
5 个赞
从陈斌哪里看到了 cnfonts的包 这个包 可以分别设置中文和英文字体大小
调整等宽 如果觉得 cnfont太重 还可以把设置好的配置 直接复制出来 我测试了一下 在doom中是生效的
;; Auto generated by cnfonts
;; <https://github.com/tumashu/cnfonts>
(set-face-attribute
'default nil
:font (font-spec :name "-*-Courier New-normal-normal-normal-*-*-*-*-*-m-0-iso10646-1"
:weight 'normal
:slant 'normal
:size 16.0))
(dolist (charset '(kana han symbol cjk-misc bopomofo))
(set-fontset-font
(frame-parameter nil 'font)
charset
(font-spec :name "-*-STKaiti-normal-normal-normal-*-*-*-*-*-p-0-iso10646-1"
:weight 'normal
:slant 'normal
:size 20.0)))
用doom emacs官方的方式设置, 目前测试下来是最好的. 好像他还同样解决了两中等宽字体的宽度适配问题.