让多种编辑器支持LaTeX的补全

在Qt creator, Sublime Text 3, VS Code中添加相关的snippets,让这些编辑器可以得心应手的处理LaTeX公式。


最近用LaTeX写作业,包括在博客里面用MathJax,输入公式总需要一个自动补全的编辑器。用TeX Studio用着很不顺手,因为它的自动补全是用回车键,而我习惯TAB键。于是只能用别的编辑器来替代了。

Sublime Text 3

首先是Sublime Text 3,这个有相应的LaTeX插件LaTeX Tools,比较方便。为了让它自动补全更加智能,需要在用户设置中增加下面一条语句:

"auto_complete_selector": "source, text",

不过这样仅仅是针对.tex文件,为了让平时写Markdown文件时也能有自动补全,还需要自己写sublime的sublime-completions文件。这个文件可以存储多个snippet,而一个sublime-snippet文件只能存储一个snippet.在文件中加入如下语句:

{
   //"scope": "text.html - source - meta.tag, punctuation.definition.tag.begin",

   "completions":
   [
      { "trigger": "frac", "contents": "frac{$1}{$2}$0" },
      { "trigger": "bmatrix", "contents": "\\begin{matrix}\n${1}\n\\end{matrix}\n$0" },
      { "trigger": "mathbf", "contents": "mathbf{$1}{$2}$0" },
      { "trigger": "equaton", "contents": "\\begin{equation}\n${1}\n\\end{equation}\n$0"},
      { "trigger": "\\begin", "contents": "\\begin{$1}\n${2}\n\\end{$1}\n$0"}
   ]
}

大体上常用的也就是这些了,这样能够大大提升写作效率。

Qt Creator

没错,这是一个IDE,但是也可以充分挖掘它的文字编辑器功能。用Qt Creator打开一个Markdown文件,这个时候它会问你是否加载高亮方案,选择加载可以发现很多可以用的高亮格式,是基于Kate编辑器的所以非常齐全,把SQL, Markdown, LaTeX等等常用的高亮方案都下载下来。

接着就是设置snippet了,在Qt中可以不用手动地自己编写xml文件,只需要工具-选项-文本编辑器-片段里面自己设置一些snippet.最后生成的xml文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<snippets>
    <snippet group="Text" trigger="begin" id="" complement="" removed="false" modified="false">begin{$environment$}
$$
\\end{$environment$}
$next$</snippet>
    <snippet group="Text" trigger="bmatrix" id="" complement="" removed="false" modified="false">\\begin{bmatrix}
$$
\\end{bmatrix}
$next$</snippet>
    <snippet group="Text" trigger="equation" id="" complement="" removed="false" modified="false">\\begin{equation}
$$
\\end{equation}
$next$</snippet>
    <snippet group="Text" trigger="frac" id="" complement="" removed="false" modified="false">frac{$num$}{$den$}$$</snippet>
    <snippet group="Text" trigger="global" id="text_global" complement="example" removed="false" modified="true">// This is available in all editors.</snippet>
    <snippet group="Text" trigger="mathbf" id="" complement="" removed="false" modified="false">mathbf{$$}$next$
</snippet>
</snippets>

其实还可以自己开发Qt Creator的插件,实现LaTeX文件的编译、预览这些。不过总的来说,Qt Creator的功能稍差些。但是我平时使用这个IDE的机会比较多,偶尔也会用这个处理一些文件。

VS Code

这个也是比较容易设置的,代码如下:

{
        // Place your global snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and
        // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope
        // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is
        // used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
        // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders.
        // Placeholders with the same ids are connected.
        // Example:
        // "Print to console": {
        // 	"scope": "javascript,typescript",
        // 	"prefix": "log",
        // 	"body": [
        // 		"console.log('$1');",
        // 		"$2"
        // 	],
        // 	"description": "Log output to console"
        // }
        "eqn": {
                "prefix": "equation",
                "body": [
                        "\\begin{equation}\n$1\n\\end{equation}"
                ],
                "description": "A LaTeX equation"
        }
}

不过一开始我很奇怪,同样设置了snippet,在LaTeX文件中就会提示,但是Markdown文件中就不提示。GOOGLE了一把,发现原因是:

Full extensions get auto (7x24) completion by default (e.g. latex, cake), some built-in extensions like Markdown do not.

所以需要进行特定语言设置:敲击Ctrl+Shift+P,输入Configure language specific settings,输入Markdown,进行下面的设置:

"[markdown]": {
        "editor.quickSuggestions":true
    }


更新:我发现了支持TAB键补全的LaTeX编辑器:TeXMaker,在写tex文件时就用TeXMaker了,不过在写Markdown文件时还是这些文本编辑器更好用,因为有时还需要打开别的类型的文件。