Emacs中达成中英文混排表格对齐效果
(此文已过时,请读者不要参考)
介于这可能是我写的第一篇emacs的文章,先罗嗦几句废话。不喜的读者可以直接跳往下面正文。
很早以前就想使用这种神器级的编辑器。我曾是vim的逃兵。曾经也为了适应vim那个天杀的hjkl而苦练手指,把我玩的所有游戏的左下上右重映射为了hjkl,然后逐渐熟练……可是我到现在也没办法适应那个三种模式的切换,每次我用vim,我都有种“神啊,你的武器太难用了”的想法。后来我转投emacs,09年学会了最最基本的C-x C-s和C-x C-c,然后再加上C-k与C-y,然后就没怎么学。我整整用了三年的C-x u当撤销而不知道有C-/,一想到这事我就囧。然后就直到最近,立志好好把emacs学一下,逐渐能够驾驭神器。这或许要很多年的时间,不过我想,对于整天喜欢敲键盘的我来说,这不是什么问题。
Emacs的设计里,假设一个双字节字符和两个半角英文字符是等宽的。所有的表格对齐之类的问题,无论table-insert还是org-mode,都是基于这个假设之上。可是实际上,这个假设不成立。这又是一个字体的问题:如何使一个中文字符的宽度与两个英文字符的宽度相等。所幸计算机的字体显示上不使用小数作为字号,所以找出这样一对对中英字体搭配也不是太困难,固定一个试另一个试就行了,方法参考下面一段……已知的字体对有
{"Dejavu Sans Mono 10" 与 "WenQuanyi Micro Hei Mono 12"}
{"Consolas 11" 与 "Microsoft Yahei 16"}
{"Liberation Mono 12" 与 "WenQuanYi Micro Hei Mono 15"}
;;这两句是我的全局配置,避免出现多语言混乱。
(set-language-environment 'UTF-8)
(set-locale-environment "UTF-8")
;;这句指定默认英文字体为Dejavu Sans Mono,大小10
(set-default-font "Dejavu Sans Mono 10")
;;前面一串“(if...lambda...(with-select-frame frame ())...)"是个很好的函数框架,意思是frame创建后载入,用这个框架可以解决--daemon启动的问题
;;只有set-fontset-font一句指定修改字符集'unicode的字体为文泉驿等宽微米黑,大小为12
(if (and (fboundp 'daemonp) (daemonp))
(add-hook 'after-make-frame-functions
(lambda (frame)
(with-selected-frame frame
(set-fontset-font "fontset-default"
'unicode "WenQuanyi Micro Hei Mono 12"))))
(set-fontset-font "fontset-default" 'unicode "WenQuanYi Micro Hei Mono 12"))
大功告成……