一种可以避免抖动的中英等宽方法

我的等宽方法,同样设置系数缩放,但不调整行距,而是通过修改行号字体预先渲染单行的高度,从而保证在中英混合字体时,不会因为先输入英文再输入中文而发生行高变化导致抖动

缺点: 1.如果中英字体选择的差距大,仍然会看上去不协调美观

优点: 1.调整行号更美观一些,而且不会导致由于调整行高行距导致的其他一系列问题,比如:在文档最后一行只输入英文,然后直接回车到下一行。如果是调整行距的方法则会发现行高发生变化。 2.可以较为自由的组合自己喜欢的中英字体和行号字体

想到了就糊了一个给大家参考,如果还有更好的,请一定也放出来让我学习一下

方法123是我已知的,方法4是我糊的,不需要调整行距,而是直接根据比例放大后的中英文字体中最高的字体高度,调整行号的每行高度到正文行高相同,在渲染行号时直接将行高撑到足够容纳中英文字体的最小高度,从而不通过调整行距仍能避免中英同行输入时产生的抖动

5 个赞

最好的办法是自己修改字体文件,比如加高英文字体的高度。比如 commitmono 这个字体是可以自定义高度的。

(set-font "Cascadia Code" "HarmonyOS Sans SC" 28 32)
(setq default-text-properties '(line-spacing 0.06 line-height 1.15))
;;通过设置行高属性的方式避免英文行输入中文后的行高抖动

感谢楼主,又学到了

1 个赞

主要是修改字体的方式可能不太适合我,所以糊了这个,因为我更喜欢可以自由选择字体。

我现在使用的是 cnfonts

下面是我的配置,非常简单方便就可以实现中英文的对齐。

(use-package cnfonts
  :ensure t
  :hook
  (after-init . cnfonts-mode)
  :config
  (setq cnfonts-profiles
        '("program" "org-mode" "read-book"))
  (setq cnfonts-personal-fontnames
        '(("CaskaydiaCove Nerd Font Mono")
          ("Sarasa Term SC Nerd")
          ()
          ("Segoe UI")
          ))
  )

不用rescale的话,怎么保证整体放大缩小时候依然等宽呢?

比如我日常用着12pt,当我做presentation的时候需要放大到24甚至32。

还是用rescale的,方法123只是常见方法,方法4才是新糊的,

说的不是一个事情