刚发完有关上划线的东西,我就把Emacs折腾到能显示这些符号了,很简单,在已经有的配置里加一句

1
(set-fontset-font t 'unicode "STIX" nil 'prepend)

让STIX字体也用于显示这些特殊符号,于是就解决了特殊符号的问题,但由于字母还是用Inconsolata显示的,所以刚才说的上划线还是没法实现😭

既然字体设置已经完善了,就分享出来。

Update: 我发现我糊涂了,prepend是放在前面,append是放在后面,这个时候要用append

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
(defun my--set-font (&optional frame)
(with-selected-frame (or frame (selected-frame))
(if (string-equal system-type "windows-nt")
;; 下面是用于Windows的配置。
(progn
;; 设置英文字体为Inconsolata,并指定字号18。
;; 因为不同操作系统下字体显示的大小不一样(DPI的问题),所以分开设置。
(set-face-attribute 'default nil :font "Inconsolata 18")
;; 给相应的字符集设置中文字体,这里的字体是冬青黑体简体中文 W3。
(dolist (charset '(han cjk-misc chinese-gbk))
(set-fontset-font "fontset-default"
charset (font-spec :family "冬青黑体简体中文 W3")))
;; 设置默认字体和用于显示特殊符号的字体,如果不需要下面三句可以删除。
(set-fontset-font "fontset-default"
'unicode "Segoe UI Symbol" nil 'append)
(set-fontset-font "fontset-default"
'(#x1F600 . #x1F64F) "Segoe UI Symbol") ; Emoji
(set-fontset-font "fontset-default"
'(#xE000 . #xF8FF) "STIX")) ; Private Use Areas
;; 下面是Linux的配置,道理类似。
(set-face-attribute
'default nil :font "Inconsolata 14")
(dolist (charset '(kana han cjk-misc bopomofo))
(set-fontset-font "fontset-default"
charset (font-spec :name "Hiragino Sans GB")))))
;; 对于特定的符号设置字体,不分操作系统。我的个人爱好,可以删除。
(set-fontset-font "fontset-default" ?– "Symbola")
(set-fontset-font "fontset-default" ?— "Symbola")
(set-fontset-font "fontset-default" ?′ "Symbola")
(set-fontset-font "fontset-default" ?″ "Symbola"))
;; 运行一下立即设置字体。
(my--set-font)
;; 对于新建的frame应用设置。
(add-hook 'after-make-frame-functions 'my--set-font)

分三部分,第一个是设置默认字体为Inconsolata,第二个是设置中文字体,之后是附加字体以显示缺失的字形。

上面的设置需要在电脑上安装以下字体:

  1. Inconsolata。这是1.x版,有2.x版但有点太高不好看。
  2. 冬青黑体简体中文 W3。从Mac电脑上扒来的,好像改过参数。
  3. Symbola全套字体下载地址
  4. Segoe UI Symbol。Windows自带,Win8以上的不用安装,Win7如果没有打补丁可能需要安装。
  5. STIX全套字体下载地址

2017-02-07 Update: 我最新的字体配置文件可以看这个文件

https://coding.net/u/Chris_Zheng/p/dotEmacs/git/blob/master/.init/font-settings.el