文章

使用 VSCode 编写 LaTeX

Visual Studio Code (VS Code) 是一个轻量级、功能强大的源代码编辑器,支持 Windows、macOS 和 Linux,且免费、开源。其有丰富的扩展,可用于编写大部分语言代码。配合插件,我们甚至可以在本地计算机的 VS Code 中远程编辑服务器中的代码。 本文主要介绍如何使用 VS Code 并搭配 Latex Workshop 插件来编写 $\LaTeX$。

环境配置

本文所使用的环境

本文所使用的操作系统环境为 Ubuntu 20.04 LTS,在 Linux 操作系统上使用的 $\LaTeX$ 发行版为 TeX Live

本文在 Linux 服务器上配置 $\LaTeX$ 环境,然后在本地计算机中安装 VS Code,远程连接到服务器编写代码。当然,你也可以直接在本地计算机上安装 VS Code 并配置 $\LaTeX$ 环境。

TeX Live 的安装

首先我们将系统包存储库索引以及相关的软件包升级到最新版:

1
2
sudo apt update
sudo apt upgrade

使用如下命令安装 TeX Live:

1
sudo apt install texlive-full

如果遇到 Unable to locate package texlive−full 的错误,请先使用 apt updateapt upgrade 将系统包存储库索引以及相关的软件包升级到最新。

VS Code 配置

使用 VS Code 远程连接到已配置好 $\LaTeX$ 环境的 Linux 服务器,搜索 LaTeX Workshop 并安装该扩展。

LaTeX Workshop

尝试编译一个例子

下面我们来尝试编 东南大学硕士研究生学位论文 $\LaTeX$ 模板,该项目的 GitHub 链接为 https://github.com/TouchFishPioneer/SEU-master-thesis

字体问题

如在 Linux 系统中编译该模版,则可能会出现字体缺失的问题。

Fonts

需要首先使用 fc-list :lang=zh 命令检查系统中是否有常见的字体,例如Time New Roman、宋体、黑体、楷体等,如没有,则需要下载相应的字体文件。这个链接包含了Time New Roman、Ubuntu Mono、宋体、黑体、楷体、隶书、仿宋这几个字体文件。

在 Ubuntu 系统中,进入 /usr/share/fonts 文件夹,创建一个新的文件夹 myfonts,并下载上面几个字体文件并拷贝进入该文件夹内,并依次执行以下命令以更新字体缓存:

1
2
3
4
5
6
7
mkfontscale
# 如果提示 mkfontscale: command not found
# sudo apt install ttf-mscorefonts-installer
mkfontdir
fc-cache -fv
# 如果提示 fc-cache: command not found
# sudo apt install fontconfig

至此字体就安装完成。

编译工具

首先下载该模版:

1
git clone https://github.com/TouchFishPioneer/SEU-master-thesis.git

使用 VS Code 打开该文件夹,打开 main.tex 文件,我们可以看到 VS Code 左侧边栏多了一个 TEX 选项。

Recipes

$\LaTeX$ 有很多编译工具,常见的主要有 LaTeXmk、pdfLaTeX、XeLaTeX、LuaLaTeX 等,因为我们需要输出包含中文的 PDF,因此我们使用 XeLaTeX 工具。

高德纳教授在实现 TeX 的当初并没有考虑到中日韩等字符的处理,而只支持 ASCII 字符。这并不是说中日韩字符就无法使用 TeX 引擎排版了,事实上 TeX 将每个字符用一个框包括起来(这被称为盒子)然后将一个个的盒子按照一定规则排列起来,因而 TeX 的算法理论上适用于任何字符。在 XeTeX 出现之前,为了能让 TeX 系统排版中文,国人曾使用了 天元、CCT、CJK 等手段处理中文。其中 天元和 CCT 现在已经基本不用,CJK 因为使用时间长且效果相对较好,现在还有人使用。不同于 CJK 等方式使用 TeX 和 pdfTeX 这两个不直接支持 Unicode 字符的引擎,XeTeX 引擎直接支持 Unicode 字符。也就是说现在不使用 CJK 也能排版中日韩文的文档了,并且这种方式要比之前的方式更加优秀。XeLaTeX 是将 LaTeX 格式的文档进行解释,将解释之后的结果交付给 XeTeX 引擎处理。

VS Code 默认的编译工具是 LaTeXmk,因此我们需要调整设置,使用 XeLaTeX。在设置之前,我们要区分两个概念:工具(Tools)和组合(Recipe)。工具就是我们上面所描述的编译工具,而组合指编译器的组合使用,当你的LaTeX文件涉及引用等比较复杂的需求时需要进行组合编译。例如 pdflatex ➞ bibtex ➞ pdflatex × 2 这个 Recipe,我们可以看到其会先运行一次 pdfLaTeX,一次 bibTeX,再运行两次 pdfLaTeX,最终生成带有交叉引用的完整PDF:

1
2
3
4
5
6
7
8
9
10
11
12
13
{
    "latex-workshop.latex.recipes": [
        {
            "name": "pdflatex ➞ bibtex ➞ pdflatex × 2",
            "tools": [
                "pdflatex",
                "bibtex",
                "pdflatex",
                "pdflatex"
            ]
        }
    ]
}

编译 SEU 模版

根据东南大学硕士研究生学位论文 $\LaTeX$ 模板的使用指南

想要编译一篇学位论文,首先需要对文章结构和原始文本进行一次预编译;随后索引出论文中出现的所有参考文献,并建立参考文献条目与论文引用位置的连接;接下来,根据预编译所产生的文章结构,需要生成文章的图表和术语索引文件;最后通过两次编译将参考文献和图表索引编入正文中,得到完整的 PDF 版本论文。

其在项目文件夹中的 make.sh 文件中,给出了编译步骤,我们可以据此来修改编译步骤。

在 VS Code 中,按下Ctrl + Shift + P,搜索 Preferences: Open Workspace Settings (JSON) 选项,打开用户设置的JSON文件:

Settings

然后输入以下内容:

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
{
    "latex-workshop.latex.recipes": [

        {
            "name": "SEU",
            "tools": [
                "xelatex",
                "bibtex",
                "makeIndex",
                "xelatex",
                "xelatex"
            ]
        }
    ],

    "latex-workshop.latex.tools": [
        {
            "name": "xelatex",
            "command": "xelatex",
            "args": [
                "-synctex=1",
                "-interaction=nonstopmode",
                "-file-line-error",
                "-pdf",
                "-outdir=%OUTDIR%",
                "%DOC%"
            ],
            "env": {}
        },
        { 
            "name": "makeIndex",
            "command": "makeindex",
            "args": [
                "%DOCFILE%.nlo",
                "-s",
                "nomencl.ist",
                "-o",
                "%DOCFILE%.nls"
            ]
        },
        {
            "name": "bibtex",
            "command": "bibtex",
            "args": [
                "%DOCFILE%"
            ],
            "env": {}
        }
    ]
}

上述内容定义了一个 Recipe:SEU,注意该文件只对该文件夹内的项目有用。如想针对所有的 $\LaTeX$ 项目都要起作用,需要修改 Preferences: Open Remote Settings。如果是本地项目,需要修改 Preferences: Open Settings

修改完毕后,我们需要重新加载 VS Code,按下Ctrl + Shift + P,搜索 Reload Window,点击重新加载窗口。

重新加载窗口后,回到 main.tex 文件,我们可以看到现在有 SEU 这个 Recipe 了。

SEU Recipe

此时就可以正确地编译该项目了。

实时预览结果

在右上角我们点击该按钮:

View PDF

就可以实时预览 PDF 结果:

Preview

本文由作者按照 CC BY 4.0 进行授权