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"))

大功告成……