六一的部落格


关关难过关关过,前路漫漫亦灿灿。




便签

参考


方法一: 使用valign

  • 像素对齐
  • 使用时会导致图片加载卡顿
1;; (use-package valign
2;;   :ensure t
3;;   )
4;; (add-hook 'org-mode-hook #'valign-mode)

方法二: 使用cnfonts

GitHub

字体受到cnfonts支持的限制

1;; (use-package cnfonts
2;;   :ensure t)
3;; (cnfonts-mode 1)
4;; (define-key cnfonts-mode-map (kbd "C--") #'cnfonts-decrease-fontsize)
5;; (define-key cnfonts-mode-map (kbd "C-=") #'cnfonts-increase-fontsize)

方法三: 分别对中文字体和英文字体进行设置

找到满足英文:中文=1:2的两个字体


下载Iosevka

GitHub

1# brew tap homebrew/cask-fonts
2# brew install font-iosevka

设置Emacs中英文字体

字号使用14, 16正常

1;; (let ((default-font (font-spec :name "Iosevka" :size 14))
2;;       (cn-font (font-spec :name "Sarasa Mono SC")))
3;;   (set-face-attribute 'default nil :font default-font)
4;;   (dolist (charset '(kana han symbol cjk-misc bopomofo))
5;;     (set-fontset-font t charset cn-font)))

方法四: 对org-mode表格字体进行设置

Emacs 29中使用 C-c C-c , 没中文的和没中文的对齐, 有中文的和有中文的不一定能对齐, 有中文的和没中文的不能对齐…


下载更纱字体

1# brew install font-sarasa-gothic

设置表格字体


更纱黑体

1;; (custom-set-faces
2;;  '(org-table ((t (:family "等距更纱黑体 SC")))))
  • Sarasa Mono SC

    和设置更纱黑体一样

    1;; (custom-set-faces
    2;;  '(org-table ((t (:family "Sarasa Mono SC")))))

Iosevka

1(custom-set-faces
2 '(org-table ((t (:family "Iosevka")))))

设置Emacs字体

1;; (let ((emacs-font-size 14)
2;;       (emacs-font-name "Victor Mono"))
3;;   (set-frame-font (format "%s-%s" (eval emacs-font-name) (eval emacs-font-size)))
4;;   (set-fontset-font (frame-parameter nil 'font) 'unicode (eval emacs-font-name)))

方法五: 研究表格对齐实现

Emacs版本 29.2


查看face

M-x describe-face

org-table

函数: org-table-align


设置字体

1;; 表格能对齐
2;; (set-face-attribute 'default nil :font (font-spec :name "Iosevka" :size 14))
3
4;; 表格无法对齐
5;; (custom-set-faces '(default ((t (:family "Victor Mono" :foundry "outline" :slant normal :weight normal :height 140 :width normal)))))

关键语句

  1. 计算最大宽度

    1;; (setq max-width (max max-width (org-string-width cell)))
  2. 设置项宽度

    1;; (mapconcat #'identity
    2;;            (cl-mapcar #'org-table--align-field
    3;;                       fields
    4;;                       widths
    5;;                       alignments)
    6;;            "|")

关键函数: org-table–align-field

field字段存放某项(某行某列)内容, 使用 org-string-width 计算字符串长度


关键函数: org-string-width

当版本低于28时, 使用 org--string-width-1


修改

使用 org--string-width-1 替换 org-string-width

org-table.el
org-table--align-field 1处
org-table-align 1处

编译org-table.el

  1. 重启Emacs后, 提示

    Source file ‘/usr/local/Cellar/emacs-plus@29/29.2/share/emacs/29.2/lisp/org/org-table.el’ newer than byte-compiled file; using older file
  2. 编译

    M-x byte-compile-file
    
    /usr/local/Cellar/emacs-plus@29/29.2/share/emacs/29.2/lisp/org/org-table.el

    生成org-table.elc文件


书签

-
编译el文件

表格中文对齐



便签

参考


方法一: 使用valign

  • 像素对齐
  • 使用时会导致图片加载卡顿
1;; (use-package valign
2;;   :ensure t
3;;   )
4;; (add-hook 'org-mode-hook #'valign-mode)

方法二: 使用cnfonts

GitHub

字体受到cnfonts支持的限制

1;; (use-package cnfonts
2;;   :ensure t)
3;; (cnfonts-mode 1)
4;; (define-key cnfonts-mode-map (kbd "C--") #'cnfonts-decrease-fontsize)
5;; (define-key cnfonts-mode-map (kbd "C-=") #'cnfonts-increase-fontsize)

方法三: 分别对中文字体和英文字体进行设置

找到满足英文:中文=1:2的两个字体


下载Iosevka

GitHub

1# brew tap homebrew/cask-fonts
2# brew install font-iosevka

设置Emacs中英文字体

字号使用14, 16正常

1;; (let ((default-font (font-spec :name "Iosevka" :size 14))
2;;       (cn-font (font-spec :name "Sarasa Mono SC")))
3;;   (set-face-attribute 'default nil :font default-font)
4;;   (dolist (charset '(kana han symbol cjk-misc bopomofo))
5;;     (set-fontset-font t charset cn-font)))

方法四: 对org-mode表格字体进行设置

Emacs 29中使用 C-c C-c , 没中文的和没中文的对齐, 有中文的和有中文的不一定能对齐, 有中文的和没中文的不能对齐…


下载更纱字体

1# brew install font-sarasa-gothic

设置表格字体


更纱黑体

1;; (custom-set-faces
2;;  '(org-table ((t (:family "等距更纱黑体 SC")))))
  • Sarasa Mono SC

    和设置更纱黑体一样

    1;; (custom-set-faces
    2;;  '(org-table ((t (:family "Sarasa Mono SC")))))

Iosevka

1(custom-set-faces
2 '(org-table ((t (:family "Iosevka")))))

设置Emacs字体

1;; (let ((emacs-font-size 14)
2;;       (emacs-font-name "Victor Mono"))
3;;   (set-frame-font (format "%s-%s" (eval emacs-font-name) (eval emacs-font-size)))
4;;   (set-fontset-font (frame-parameter nil 'font) 'unicode (eval emacs-font-name)))

方法五: 研究表格对齐实现

Emacs版本 29.2


查看face

M-x describe-face

org-table

函数: org-table-align


设置字体

1;; 表格能对齐
2;; (set-face-attribute 'default nil :font (font-spec :name "Iosevka" :size 14))
3
4;; 表格无法对齐
5;; (custom-set-faces '(default ((t (:family "Victor Mono" :foundry "outline" :slant normal :weight normal :height 140 :width normal)))))

关键语句

  1. 计算最大宽度

    1;; (setq max-width (max max-width (org-string-width cell)))
  2. 设置项宽度

    1;; (mapconcat #'identity
    2;;            (cl-mapcar #'org-table--align-field
    3;;                       fields
    4;;                       widths
    5;;                       alignments)
    6;;            "|")

关键函数: org-table–align-field

field字段存放某项(某行某列)内容, 使用 org-string-width 计算字符串长度


关键函数: org-string-width

当版本低于28时, 使用 org--string-width-1


修改

使用 org--string-width-1 替换 org-string-width

org-table.el
org-table--align-field 1处
org-table-align 1处

编译org-table.el

  1. 重启Emacs后, 提示

    Source file ‘/usr/local/Cellar/emacs-plus@29/29.2/share/emacs/29.2/lisp/org/org-table.el’ newer than byte-compiled file; using older file
  2. 编译

    M-x byte-compile-file
    
    /usr/local/Cellar/emacs-plus@29/29.2/share/emacs/29.2/lisp/org/org-table.el

    生成org-table.elc文件


书签

-
编译el文件