Org mode 中英混排对齐的问题

如果你用 Doom Emacs 的话,使用下面的代码可以解决中英文等宽问题,使用的字体是 Sarasa Mono。其他配置也可以参考改一改。

来源:emacs配置_xhcoding的博客-CSDN博客

(setq doom-font
      (font-spec :family "Sarasa Mono SC" :size 18 :weight 'normal))

(after! doom-big-font-mode
  (setq doom-font
        (font-spec :family "Sarasa Mono SC")))

;; https://blog.csdn.net/xh_acmagic/article/details/78939246
(defun +my/better-font()
  (interactive)
  ;; english font
  (if (display-graphic-p)
      (progn
        (set-face-attribute 'default nil :font (format   "%s:pixelsize=%d" "Sarasa Mono SC" 18)) ;; 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))

Ubuntu 16.04, emacs 25解决此问题 安装 Noto Sans Mono字体,设置 (set-face-attribute 'default nil :font (font-spec :name “Ubuntu Mono” :weight 'normal :slant 'normal :size 14.0)) (dolist (charset '(kana han symbol cjk-misc bopomofo)) (set-fontset-font (frame-parameter nil 'font) charset (font-spec :name “Noto Sans Mono”
:weight 'normal :slant 'normal :size 15.0))) 或者都使用 Noto Sans Mono字体 (set-face-attribute 'default nil :font (font-spec :name “Noto Sans Mono” :weight 'normal :slant 'normal :size 13.0)) (dolist (charset '(kana han symbol cjk-misc bopomofo)) (set-fontset-font (frame-parameter nil 'font) charset (font-spec :name “Noto Sans Mono”
:weight 'normal :slant 'normal :size 15.0)))

(if (eq system-type 'windows-nt)
    (progn
      ;; Setting English Font
      (set-face-attribute 'default nil :font "Ubuntu Mono 11")
      ;; (set-face-attribute 'default nil :font "Inconsolata 11")
      ;; Chinese Font
      (dolist (charset '(kana han symbol cjk-misc bopomofo))
              (set-fontset-font (frame-parameter nil 'font)
                            charset
                            (font-spec :family "Microsoft Yahei" :size 22)))))

试过不少英文等宽字体,ubuntu mono感觉最好。Ubuntu font

下面的组合是ok了。人肉对齐。

“Ubuntu Mono 10 + Microsoft Yahei 20” org mode table是可以对齐的 “Ubuntu Mono 12 + Microsoft Yahei 24” org mode table是可以对齐的 “Ubuntu Mono 11 + Microsoft Yahei 22” org mode table是可以对齐的

Ubuntu Mono 11 + Microsoft Yahei 22。在13寸的1920x1080分辨率的笔记本上。

为什么我单独对org-table字体进行设置,会报错说“Invalid face” org-table. org version: 9.3.

你这个报错,跟我是一样的。实际我用了cnfonts这个包也很好,不过现在我用等距更纱系列字体可以做到宽高都对齐。

windows下出现乱码

发现使用Inconsalata字体+华文楷体的效果比较好,不用缩放,就可以解决对齐问题,
同时获得很多的视觉效果。 用雅黑,黑体,Noto Sans SC 等字体都会显得中文特别高大。

这里采用了@recardo的方案,在Linux ,Window,Mac 上都是一样效果。

(when (eq system-type 'darwin)
      (setq fonts '("Monaco" "STKaiti"))
      (set-face-attribute 'default nil :font
                        (format "%s:pixelsize=%d" (car fonts) 15))
      (setq face-font-rescale-alist '(("STKaiti". 1.2))))

(when (eq system-type 'windows-nt)
      (setq fonts '("Inconsolata" "华文楷体"))
      (set-face-attribute 'default nil :font
                        (format "%s:pixelsize=%d" (car fonts) 20))
      (setq face-font-rescale-alist '(("华文楷体". 1.0))))

(when (eq system-type 'gnu/linux)
      (setq fonts '("Inconsolata" "STKaiti"))
      (set-face-attribute 'default nil :font
                        (format "%s:pixelsize=%d" (car fonts) 18))
      (setq face-font-rescale-alist '(("STKaiti". 1.0))))

(dolist (charset '(kana han symbol cjk-misc bopomofo))
      (set-fontset-font (frame-parameter nil 'font) charset
                        (font-spec :family (car (cdr fonts)))))

更新:针对三大系统进行设置,更加方便不同系统使用不同字体和不同的缩放比例。
Inconslata 中文缩放1.0;Monaco,中文缩放1.2。

3 个赞

非常漂亮,很好。

用了你的配置后字体间距变得超级稀:

中文字体正常,英文字体变稀

你用的是什么字体啊?这个问题我好像之前也遇到过。

Inconsolate,下载地址: GitHub - googlefonts/Inconsolata: Development repo of Inconsolata Fonts by Raph Levien

用的是 ttf

华文楷体, 下载地址:QisiAaXiHe下载 QisiAaXiHe Regular 中文字体 字体下载-脚本之家

linux系统。

这个两个字体我是在Majaro Linux测试过没问题的。 你可以试试别的字体,原理上任何字体都可以,只是要微调缩放的比例。不同字号比例不一样。

等距更纱黑体(简体中文)+ Nerd Fonts图标库,中英文宽度完美2:1,Powerline/Powerlevel10k的好搭档。

为什么这个字体在我这里不是中英文1:2呢? arch linux系统,kde桌面环境,不想用cnfonts那些工具,视觉体验感觉不好 :shushing_face:

应该是字体没用上吧~~~

你看下中英文是不是和我给出的截屏中的字体一样

image 字体应该是用上了,但是没有2:1

Snipaste_2020-12-06_21-53-33

你自己看下汉字和英文的font size,应该是你的emacs自己有配置。

你也可以去终端下跑emacs,把终端的字体设置成这个,然后看看是不是对齐

看你的主题,像doom-one

你把光标置于汉字/英文里,然后M-x 执行 describe-font里, 就能看到相应的字体配置了