AUCTeX+Emacs 是目前我见过的能最大限度提高 LaTeX 编辑效率的编辑器
效率的提高程度取决于你对 Emacs/lisp 的熟悉程度,但可以说基本上能提高到你所能想象的最大程度了。下面我会就效率方面介绍它的几个特性,不仅与 WinEdt 做对比,同时也和其他 OSX上的某些编辑器做一下对比,
安装和配置网上很多,比如这篇小文档[1],这里就不介绍了。
- 强大的快捷键系统 (CDLaTeX)
就提高编辑效率而言,快捷键是最重要的,同样的内容别的编辑要按10下键盘才能实现你就按5下就实现了,如果熟练的话显然是会快很多的。这里需要对 AUCTeX+Emacs 加上一个强力助推器:CDLaTeX [2]. 有了个这个插件,加上 Emacs 自带的快捷键,就已经能满足大部分人对于快捷键的需求了。
CDLaTeX 是干什么的呢?最主要的一个功能就是环境的快速输入。比如\begin{equation}... \end{equation}, \begin{itemize} ...\end{itemize}. 每次想输入这些环境的时候,如果一个字母一个字母打完,往往令人捉急,WinEdt 以及其他编辑器的处理方式是(1) 纯快捷键,比如你可以定义 shift+ctrl+e 快捷输入 equation 环境;(2) 或者你输入完了\begin{xxx} 可以自动帮你补全\end{xxx}. 但这些,还是不够快的。CDLaTeX的方案是,输入环境名的前三个字母,比如
equ,然后点 <tab>,自动完成整个环境,光标放在\begin{equation}后面并给你换好了行,更进一步还可以自动加入智能标签帮你输入好这样的内容:\begin{equation}\label{eq:1} [光标] \end{equation}
注意\label{eq:1}是自动生成的,会帮你自动编号。当然你想改成别的内容也可以。最方便的是,key(比如上面的equ),自动补全的内容,以及自动补完之后的光标位置都可以自定义。你完全可以自定义为最适合你记忆的几个字母,只要不混淆即可。所以这样以来,输入一个环境,最多就需要按3-4次键盘,还不需要刻意去记快捷键 (WinEdt 那种方式难记而且毕竟可定义的快捷键很有限),我没见过还能比这个更方便的。
除此之外,这种方案也运用在了输入数学公式中,那真是可谓行云流水,输入 fr<tab> 补全\frac{[光标]}{},lr ( <tab> 补全\left( [光标] \right). 这些key几乎都不用记,因为就是个缩写而已,觉得不好记还可以自定义。另外想输入 \tilde{a},只需输入 a`~ 即可,因为 tilde 就是~嘛,输入\bar{a},就是 a`-. 比方说,我要输入 $\tilde{a} \left( \frac{\beta^{\gamma} }{x\times y} \right)$
这么长的表达式(53个字符),我只要输入,$a`~lr(<tab>fr<tab>`b^`g<tab>x`*y 即可(21个字符), 少了一半多。总的来说,几乎所有环境和数学模块的输入,都只需要按4次以内键盘。这将极大提高编辑效率。 大多数的编辑器,比如 TeX Works, TeX Shop, Sublime , vim,TeX Studio, 都没有这么快捷的输入方式。这个是其最大的优势。
最后,不得不再提一个 CDLaTeX的功能(因为很受用),就是带模式识别的补全,比如在数学模式中,输入"_" / "^"自动补全 "_{}" / "^{}",如果是文本模式就补全 "$_{}$" / "$^{}$" (数学模式里面的文本模式都可以),加上成对符号$ { [ (自动补全,基本上避免了很多粗心造成的错误 (被惯坏了再去用别的编辑器就更加容易犯错了)。你还可以自定义补全哪些符号。
- 方便的自动补全 (auto-complete)
事实上,CDLaTeX 也算某种意义上的自动补全了,但这里说的是关键词(keyword)的自动补全,这个有什么意义呢,这个意义在于 LaTeX 的很多 command 实在是难记,甚至是你自己定义的 command (呵呵)。 这时候 Emacs 的自动补全就派上用场了,他会像 Visuo Studio 一样给出一个下拉菜单 (如下图,虽然很丑),注意菜单里可不只是 LaTeX command 哦,所有你的历史输入都会被记录入词库,并根据使用频率自动改变排序。
本来这是为写代码服务的,写代码自动补全很常见,但如果写文章也按写代码来招待,这功能就体现出了一个新的优势,你在写论文的时候,输入单词都能自动补全!而且你用的越久,词库越成熟,我现在写论文已经是每个单词就输两三个字母然后回车了。(导致好多单词都忘记了怎么拼写......)。
当然这个功能也不算什么特色,因为很多别的编辑器也有,比如收费的 texpad, sublime text 2/3 或者免费的 vim, TeXworks。不过这个 auto-complete 跟后面说的 yasnippet 功能结合起来可谓强强联合,事半功倍 [3]。
(补充:但是比较遗憾的是,自动补全其实 Emacs 比不上 vim 和 Sublime Text,因为后者支持模糊补全,而 Emacs 的 auto-complete 插件对模糊补全支持的很不好)
- 完善的引用系统 (RefTeX)
引用功能对于 latex 编辑器来说也是至关重要的,包括交叉引用和参考文献引用。RefTeX也是一个 Emacs 插件,辅助 AUCTeX 的。当文档较大时,此功能尤为好用。输入 ref 然后<tab>,再输入 e,就可以在所有公式 (equation) 中搜索 label,搜到了直接选中即可,搜索图片就把 e 换成 f。分类管理,层次清晰。对于参考文献,输入 cte 然后<tab>,回车输入关键字就能搜到相应文献,回车就插入了引用。跟 CDLaTeX 类似,插入一个项目的引用只需按5-6次键盘加关键词即可。
引用功能可谓和 WinEdt 不相上下,WinEdt 里面是输入\cite, \ref 之后自动弹出对话框,然后输入关键字即可查找label或者文献的key。
(补充:其实 sublime text 3 做的挺好的,而且还支持文献的模糊搜索,这个角度来看其实比 Emacs 做的要好一些。)
- 快捷的自定义模板与环境 (Yasnippet)
snippet 功能像 sublime, vim 也是有的,不过这里介绍的 Yasnippet 配合起自动补全对于 LaTeX 用户来说是非常好用的。我们用 LaTeX 的时候最头疼的往往是想用一个模板 (比如输入一个具有一些特性的表格,或者图片环境),那一堆代码每次都一样但又懒得记,而且代码里面还有很多重复部分也不想多次输入,没问题,Yasnippet 帮你搞定,你完全可以自定义一个 snippet 并绑定一个 key。比如我绑定了一个输入并排子图的 snippet 如下:
绑定的 key
是 subfig, 注意我定义每个子图的 label 是 fig:xxx ,其中 xxx 是该图的文件名,所以当我输入 fig:aaaaa 的时候,下面的文件名自动变为 {./figures/aaaaa},不用输入两遍。之后每按一次 tab 光标就转到下一个要输入的地方。另外要知道我们是有自动补全的,来让我数下输入这么个大块模板要按几次键,输入 sub (补全自动亮出来了),回车 (完成 subfig),再<tab>,done!只按了5次键盘,可见两者搭配多么提高效率!当然这只是冰山一角,具体可参见[1]和[3]。
以上这几点基本上是 AUCTeX+Emacs关于提高编辑效率的几个比较明显的优势了,可以看出 AUCTeX+Emacs 基本上综合了众多编辑器的优点。此外像 部分预览,语法高亮自定义这些也很好,但对于提高输入效率并无太大帮助就没有提了。说到语法高亮,根据水木社区这里的说法,
只有 Emacs+AUCTeX 和 WinEdt 的语法高亮比较完整地支持 LaTeX,另外一些编辑器不能识别“环境级”的内容,如 SciTE 只能识别出环境标签。