Emacs字體配置
方案一:全局等寬字體
程序員大部分是使用等寬字體的,因爲平時一些容易混淆的如 lI0O 等字符在等寬字體中可以輕易的被分辨出來,而且代碼裏也經常會使用縮進,等寬字體會使多行代碼看起來更美觀。要配置一個全局的等寬字體是最簡單的:
(set-face-attribute 'default nil :family "Maple Mono NF" :height 180)
這個函數的第一個參數被稱爲FACE,可以理解爲在Emacs中可以被設置字體、顏色等屬性的單元。按M-x describe-face
可以查看有不同的FACE的屬性。
方案二:中文特殊字體
通常一個字體很難滿足所有的需求,Emacs提供了方法對特定字符集設置字體,比如針對漢字設置:
(set-fontset-font t 'han (font-spec :family "LXGW WenKai TC"))
第二個參數也可以是Unicode範圍:
(set-fontset-font t '(#x2ff0 . #x9ffc) (font-spec :family "LXGW WenKai TC"))
方案三:文檔使用非等寬字體
其實使用方案一可以設置任意全局字體,但是如果想在代碼編輯中使用等寬字體,而在如org-mode
等文檔中使用非等寬的更適合閱讀的字體,可以這樣做:
(set-face-attribute 'default nil :family "默認字體" :height 180)
(set-face-attribute 'variable-pitch nil :family "非等寬字體,如Helvetica")
(set-face-attribute 'fixed-pitch nil :family "等寬字體,如Maple Mono NF")
設置多套方案,之後可以通過hook
功能在特定mode下啓用variable-pitch-mode
:
;; 在 `org-mode' 內使用非等寬字體
(add-hook 'org-mode-hook (lambda () (variable-pitch-mode t)))
方案四:單獨face配置
在方案一說過,set-face-attribute
這個函數可以針對不同的face設置樣式(不僅僅是字體),例如在org-mode
中,table
模塊具有自動對齊功能,但是這個對齊是通過文本的空格來對齊的,如果設置的字體不是每個字符都等寬或者有合理的比例(如中英文2:1)的話,表格顯示就會很難看了。那能否只給表格設置一個中英文2:1的字體呢?可以這樣實現:
(set-face-attribute 'org-table nil :family "LXGW WenKai Mono TC")
一些主題如modus提供混合字體支持,只需按方案三配置fixed-pitch
,主題會自動將其應用到org-mode
的表格和代碼塊等需要等寬字體的地方,其它部分可以保持使用非等寬字體。
方案五:face-remap-add-relative
現在一些字體會支持很多特性,如連字符、自帶nerdfont支持、中英文等寬等,也許在大多數場景下都夠用了,只在一些特殊情況下——如在中文筆記裏使用一個對中文顯示更美觀的等寬字體,就可以使用face-remap-add-relative
:
(set-face-attribute 'default nil :height 180 :family "Maple Mono NF")
(add-hook 'org-mode-hook (lambda () (face-remap-add-relative 'default :family "LXGW WenKai Mono TC")))
總結
以下幾個方案只是根據我認爲有可能的需求(主要是中文用戶的需求)簡單列了一下,實際使用中可以根據需要組合。
最後還有一種大道至簡的方法,適用於只需要整體上文字和諧的用戶:找一個支持nerdfont、支持中英文2:1的字體,只用一種字體。Maple Mono有一個變體就能做到。