如何将 Noto Sans Symbols 设置为某一区间默认字体?

问题已更新,重述如下:

Spacemacs在windows系统中默认使用MS Gothic和Lucida Sans两款字体作为默认fallback字体, 本人在.spacemacs中加入了如下命令:

   (set-fontset-font "fontset-default" '(#x20a0 . #x2a3b)
                     (font-spec :family "Noto Sans Symbols"
                                :size 14) nil 'prepend)

但是尝试输入一些符号,会得到如下结果:

前三行的字体都落在(#x20a0 . #x2a3b)的区间内,Consolas会直接fallback到MS Gothic上,更奇葩的是#x2200居然fallback到了Adobe Myungjo上。经过实验,只有(#x20a0 . #x214F) (#x2190 . #x2b59)区间内的字体会 fallback 到 MS Gothic 其他区间都会采用 Noto Sans Symbols 。

Noto Sans Symbols 字符所处在的Unicode区间为:

(#x20a0 . #x214F)
(#x2190 . #x2b59)
(#x2E00 . #x2E3B)
(#x4dc0 . #x4dff)
(#xa700 . #xa71f)
(#x10100 . #x101fd)
(#x1d000 . #x1d7ff)
(#x1f000 . #x1f251)
(#x1f700 . #x1F773)

其他区间都有效,只有上文所述的那两个区间内的字体有问题,如果有办法设置该区间内的字体,请指教,感谢!

附上本人.spacemacs中有关字体的设置:

   ;; In (defun dotspacemacs/layers ()
   ;; ...
   dotspacemacs-default-font '("Consolas"
                               :size 12
                               :weight normal
                               :width normal
                               :powerline-scale 1.2)
  ;; ...)

  ;; In (defun dotspacemacs/user-init ()
  (spacemacs//set-monospaced-font "Consolas" "Noto Sans Mono CJK SC Regular" 12 14)

  (dolist (charset '((#x20a0 . #x214F) (#x2190 . #x2b59) (#x2E00 . #x2E3B) (#x4dc0 . #x4dff) (#xa700 . #xa71f) (#x10100 . #x101fd) (#x1d000 . #x1d7ff) (#x1f000 . #x1f251) (#x1f700 . #x1F773)))
    (set-fontset-font t charset
                      (font-spec :family "Noto Sans Symbols") nil 'prepend))
   ;; ...)
1 个赞

我昨天试了下你的代码,结果是正常的。

能确定被正确执行了吗?(应该需要放到字体设置的最后,以免被覆盖掉)

我是放在最后的,您可以看这个,这里的preferred charsetmule-unicode-0100-24ff却不是unicode

             position: 623 of 3322 (19%), column: 34
            character: ∀ (displayed as ∀) (codepoint 8704, #o21000, #x2200)
    preferred charset: mule-unicode-0100-24ff (Unicode characters of the range U+0100..U+24FF.)
code point in charset: 0x7820
               script: symbol
               syntax: . 	which means: punctuation
             category: .:Base, h:Korean, j:Japanese
             to input: type "C-x 8 RET 2200" or "C-x 8 RET FOR ALL"
          buffer code: #xE2 #x88 #x80
            file code: ESC #x24 #x2C #x31 #x78 #x20 (encoded by coding system iso-2022-7bit-unix)
              display: by this font (glyph code)
    uniscribe:-outline-Adobe Myungjo Std M-normal-normal-normal-serif-12-*-*-*-p-*-ksc5601.1987-0 (#xC5)

Character code properties: customize what to show
  name: FOR ALL
  general-category: Sm (Symbol, Math)
  decomposition: (8704) ('∀')

我使用describe-fontset发现希腊字母所在的#x3B1 .. #x3C1居然在fallback里面。而且Consolas在Gothic前面,但是还是显示的Gothic:

α .. ρ (#x3B1 .. #x3C1)
    -*-*-*-*-*-*-*-*-*-*-*-*-iso10646-1
    -*-*-*-*-*-*-*-*-*-*-*-*-iso8859-7
	[-outline-Consolas-normal-normal-normal-mono-12-*-*-*-c-*-iso8859-7]
    -*-*-*-*-*-*-*-*-*-*-*-*-iso10646-1
    -*-*-*-*-*-*-*-*-*-*-*-*-jisx0208.1983-0
    -*-*-*-*-*-*-*-*-*-*-*-*-gb2312.1980-0
	[-outline-MS Gothic-normal-normal-normal-mono-12-*-*-*-c-*-gb2312.1980-0]
    -*-*-*-*-*-*-*-*-*-*-*-*-big5-0
    -*-*-*-*-*-*-*-*-*-*-*-*-cns11643.1992-1
    -*-*-*-*-*-*-*-*-*-*-*-*-ksc5601.1987-0

另外,有办法在set-fontset-font里面设置高度吗?我尝试使用:height

  (set-fontset-font "fontset-default" '(#x20a0 . #x2a3b)
                     (font-spec :family "Noto Sans Symbols"
                                :size 14
                                :height 100) nil 'prepend)

然并卵…TAT