LaTeX with Visual Studio Code ,让你的生活更美好。

LaTeX 是什么

“LaTeX(/ˈlɑːtɛx/,常被读作/ˈlɑːtɛk/或/ˈleɪtɛk/),文字形式写作LaTeX,是一种基于TeX的排版系统,由美国计算机科学家莱斯利·兰伯特在20世纪80年代初期开发,利用这种格式系统的处理,即使用户没有排版和程序设计的知识也可以充分发挥由TeX所提供的强大功能,不必一一亲自去设计或校对,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学、物理文档。这个系统同样适用于生成从简单的信件到完整书籍的所有其他种类的文档。 ”

—— LaTeX, Wikipedia

为什么要用 LaTeX

不像 MS Word 所提倡的 WYSIWYG,LaTeX 这套排版工具讲究的是“呈现与内容分离”。作者在写文档时可以专注于文档的内容而不用去关注其外观,外观可以单独进行编辑渲染。因此,就有了“模版”这样的概念。TEX 文件一般使用简单的概念来指定整个文档的逻辑结构,如 chapter, section, table, figure 等。因此,若有了内容,想得到不同样式的输出,只要更换“模版”或是样式文件即可,跟网页开发的前端颇有相似之处。Markdown 就是为了简化人们写网页的过程,使用符号来进行逻辑的区分,并通过样式文件渲染出真正的网页。LaTeX 的排版功能要比 Markdown 强的多,而且其对于数学公式的完美支持令它在学术界大放光彩。复杂的引用参考文献的标注,在 LaTeX 中也有优雅的解决方案,不需要如在 MS Word 中一般手动更改。样式模版化使得 WYSIWYG 变得难以编辑,很难说小的改动会对整体样式造成什么样的影响。因此,使用 LaTeX 编写论文和出版物绝对是你最好的选择。

MiKTeX

Windows 上的比较好用的 LaTeX 环境包,直接官网下载安装即可。

Linux 用户可直接安装 TeX Live ,macOS 用户可安装 MacTeX 。

VS Code

MiKTeX 自带的 TeXWorks 的编辑功能非常有限,可以说就是记事本加了一些高亮的功能…… 因此,我当然要用我喜欢的 Visual Studio Code 来编辑啦!

VS Code 编辑 LaTeX 需要一个无敌插件,LaTeX Workshop 。这个插件包含了所有 VS Code 对 LaTeX 功能。

LaTeX Workshop 的默认编译链是 Latexmk 。笔者强烈建议使用 Latexmk 进行编译。还有一条默认编译链是 pdflatex -> bibtex -> pdflatex*2 ,如果需要自定义编译链,可以自行修改 settings.json 中的 latex-workshop.latex.recipes 和 latex-workshop.latex.tools 的内容。

Latexmk 编译引擎依赖 Perl 的环境,因此需要先安装 Perl 环境才能够正常使用 latexmk 。Windows 上有两种受欢迎的 Perl 实现,Strawberry Perl 和 ActiveState Perl 。选你喜欢的实现安装即可。

除此之外,还需在 MiKTeX 环境中安装 latexmk 软件包:在 MiKTeX Console > Package 中搜索 latexmk 并安装。即可使用 Latexmk 来编译你的 .tex 文件了。

中文支持

有两种方法能够实现 LaTeX 对中文的支持,分别是 CTeX 宏包和 CJK 语言支持包,笔者建议使用 CTeX 包,其方法要比 CJK 方便不少。

CTeX 宏包

通过 MiKTeX 包管理工具中安装 ctex 软件包,并在 LaTeX 文档中加入:

1
\usepackage[UTF8]{ctex}

即可。

CJK 语言支持包

通过 MiKTeX 包管理工具中安装 cjk 和 cjk-font 软件包。

并在 LaTeX 文档中加入以下内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
\usepackage{CJKutf8}

% ...

\begin{document}
\begin{CJK*}{UTF8}{gbsn}

% ...

\end{CJK*}
\end{document}

这样就可以在 LaTeX 中随意输入中英文了。

演示

总结

工欲善其事,必先利其器。这个 LaTeX 工作流目前还是让我比较满意的:使用我喜欢的代码编辑器(Visual Studio Code)进行编辑,保存后自动使用 Latexmk 编译实时预览,且能通过 SyncTeX 进行 PDF 和 LaTeX 文件的锚定,一切看起来都这么美好 😊

补充

如果不希望安装 Perl 运行环境,即无法使用 latexmk 编译引擎,可更改 LaTeX Workshop 的编译设置和编译链,使用 texify 或 pdflatex 等引擎进行编译。

使用 Texify 编译

更改 VS Code 的设置文件 settings.json ,将 latex-workshop.latex.recipes 和 latex-workshop.latex.tools 更改为以下内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
"latex-workshop.latex.recipes": [{
  "name": "texify",
  "tools": [
    "texify"
  ]
}],
"latex-workshop.latex.tools": [{
  "name": "texify",
  "command": "texify",
  "args": [
    "--synctex",
    "--pdf",
    "--tex-option=\"-interaction=nonstopmode\"",
    "--tex-option=\"-file-line-error\"",
    "%DOC%.tex"
  ]
}]

使用 PDFLaTeX 编译

更改 VS Code 的设置文件 settings.json ,将 latex-workshop.latex.recipes 和 latex-workshop.latex.tools 更改为以下内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
"latex-workshop.latex.recipes": [{
    "name": "pdflatex",
    "tools": [
        "pdflatex"
    ]
}],
"latex-workshop.latex.tools": [{
    "name": "pdflatex",
    "command": "pdflatex",
    "args": [
        "-synctex=1",
        "-interaction=nonstopmode",
        "-file-line-error",
        "%DOC%"
    ]
}]

PDFLaTeX + BibTeX 编译链

更改 VS Code 的设置文件 settings.json ,将 latex-workshop.latex.recipes 和 latex-workshop.latex.tools 更改为以下内容:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
"latex-workshop.latex.recipes": [{
    "name": "pdflatex -> bibtex -> pdflatex*2",
    "tools": [
        "pdflatex",
        "bibtex",
        "pdflatex",
        "pdflatex"
    ]
}],
"latex-workshop.latex.tools": [
	{
        "name": "pdflatex",
        "command": "pdflatex",
        "args": [
            "-synctex=1",
            "-interaction=nonstopmode",
            "-file-line-error",
            "%DOC%"
        ]
	},
	{
        "name": "bibtex",
        "command": "bibtex",
        "args": [
			"%DOCFILE%"
        ]
    }
]

SyncTeX

SyncTeX 是一个能够将输出的 PDF 文件 与 LaTeX 代码进行锚定的一个工具。要使用 SyncTeX 功能,需要安装 SyncTeX 并增加 -synctex=1 编译选项。

建议使用 Chocolatey 安装 SyncTeX :

1
PS > choco install synctex

如果没有 Chocolatey,可以参照这个回答来安装 SyncTeX。


知识共享许可协议
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。