中英文字体 cnfonts推荐

cnfonts 是一个 Emacs 中英文字体配置工具。可以比较方便地实 现中文字体和英文字体等宽(也就是大家常说的中英文对齐)

如果觉得太重 可以设置好后 单独拿出配置

实测发行版也可用

:rofl:

2赞

论坛卧虎藏龙 各种大佬 活捉一个

emacs 中文用户圈很小的,许多大牛都在这个论坛里面晃荡。。。。

据说跟神器 valign 冲突,反正有了 valign 表格对齐不是问题,其它场合不太需要中文字符宽度两倍于西文字符。

有既等宽也等高的字体吗?

有,sarasa gothic,里面的 sarasa slab sc 就是等高与等宽的。

不过用 sarasa 用久了可能有点审美疲劳,我现在都是使用非等高等宽字体了,我只要求等高,用rescale来达到等高的效果。而在org-mode里面还是需要用到等高等宽的字体的。所以我的配置如下:

(use-package faces
  :custom-face
  (variable-pitch
   ((t (:font ,(font-xlfd-name (font-spec :family "Iosevka"
                                          :foundry "Outline"
                                          ;; If we do not specify this, Emacs
                                          ;; selects ascii and we miss accents
                                          :registry "iso10646-1"))
              :slant normal :weight normal
              :height 138 :width normal))))
  (default
    ((t (:font ,(font-xlfd-name (font-spec :family "Comic Mono"
                                           :foundry "Outline"
                                           ;; If we do not specify this, Emacs
                                           ;; selects ascii and we miss accents
                                           :registry "iso10646-1"))
               :slant normal :weight normal
               :height 140 :width normal))))
  (fixed-pitch
   ((t (:inherit default))))
  :config
  (defun colawithsauce/set-unicode-fonts (&optional frame)
    "Setting unicode-char fonts for emacs."
    ;; Use Noto for everything to get consistent view
    ;; Chinese, simplified
    (set-fontset-font t 'unicode (font-spec :family "Sarasa Mono Slab SC" :weight 'normal) frame)
    ;; Symbols, including b/w emoji
    (set-fontset-font t 'symbol "Apple Color Emoji" frame 'prepend))
  ;; For initial frame
  (add-hook 'after-init-hook #'colawithsauce/set-unicode-fonts)
  (add-hook 'after-make-frame-functions #'colawithsauce/set-unicode-fonts)

  ;; Rescale to restrict font into same height.
  (add-to-list 'face-font-rescale-alist '("Apple Color Emoji" . 0.9))
  (add-to-list 'face-font-rescale-alist '("Sarasa Mono Slab SC" . 0.88))

  ;; Disable font rescale in variable-pitch mode
  (defun colawithsauce/disable-rescale-maybe ()
    "remove stuffs in `face-font-scale-alist' when in buffer-face-mode."
    (if buffer-face-mode
        (setq-local face-font-rescale-alist nil)
      (setq-local face-font-rescale-alist '(("Sarasa Mono Slab SC" . 0.88) ("Apple Color Emoji" . 0.9) ("-cdac$" . 1.3)))))
  (add-hook
   'buffer-face-mode-hook #'colawithsauce/disable-rescale-maybe)
  )

不过现在还有一些问题

  1. 只有在使用 daemon 的时候字体表现是正常的
  2. 在使用 gui 方法启动的时候,company-posframe 会使用 Noto CJK 字体,怎么调也调不好,很神秘。
  3. 我现在在使用 meow 模式编辑,然后执行 meow-cheatsheet 的时候,有的字体是 comic mono,而另外的字体就使用的是 Noto CJK,明明在同一个终端里面,而且comic mono也有这个字符的字体,不知道为啥非要使用其它的字体来显示这个字符。

我知道这些问题都是因为我没有仔细了解 emacs 的字体机制而乱配置导致的,但是因为感觉也不影响使用,就一直没有去研究了。:joy:

2赞

我是用网上以前分别为不同字符集设置字体的配置:

    (set-face-attribute 'default nil :font "Lucida Console 16")
     (dolist (charset '(kana han symbol cjk-misc bopomofo))
       (set-fontset-font (frame-parameter nil 'font)
                         charset (font-spec :family "等线"
   					 :size 32)))

这段代码好像很老了,只能做到等宽。

因为我发现设置 variable-pitch 对单独设置了中文字体的配置不管用,于是我就自己写了一个函数整了下。

在进入 variable-pitch-mode 的时候将字符恢复 scale 以实现等宽,而在其它的时候中文字体就缩小一点以实现等高。

就是我贴的代码的最后一个 defun

你那个faces包是哪里来的?我看了一下melpa好像没有这个。

;;; faces.el --- Lisp faces -*- lexical-binding: t -*-

;; Copyright (C) 1992-1996, 1998-2020 Free Software Foundation, Inc.

;; Maintainer: emacs-devel@gnu.org
;; Keywords: internal
;; Package: emacs

;; This file is part of GNU Emacs.

这里没看到org的相关配置,请问是怎样只在org里使用等宽等高?