LaTeX in ArchLinux

一名经常使用 LaTeX 的用户必须配置一个好用的编辑器来提高效率。另外也得想办法提高编译速度。这里我介绍一下我的常用编译相关的内容,希望你看了有收获。

注意,本文不适合新人,要看懂偏难。


我的环境

系统:ArchLinux
编辑器:VsCode
TeX 发行版:TeXLive2020

VsCode 相关插件:LaTeX Workshop, Code Runner, psioniq File Header, Error Lens

其中的 Error Lens 不是本文必须,但是它能改善我的编译体验,推荐你也尝试使用。

配置 latexmkrc 文件

latexmkrc 文件推荐放到符合 XDG Base Directory 标准的 ~/.config/latexmk/latexmkrc 下。

我的配置比较简单

1
2
3
4
$clean_ext = "bbl nav out snm";
$out_dir=temp;
$pdf_previewer = 'okular';
$dvipdf='xdvipdfmx %O -o %D %S';

就是增加了点清理的文件类型,指定输出文件夹,指定 pdf 阅读器,以及使用的 dvipdf

配置 zshrc 文件

偶尔要在 terminal 里运行看错误,所以 rc 文件也要简单配置方便使用。我用的是 zsh ,因此配置的是 ~/.zshrc 文件。

1
2
3
4
5
alias platexmk='latexmk -pdf -shell-escape -synctex=1 -file-line-error'
alias xlatexmk='latexmk -pdfxe -shell-escape -synctex=1 -file-line-error'
alias llatexmk=' latexmk -latex -pdfdvi -shell-escape -synctex=1 -file-line-error'
alias pfly='texliveonfly --terminal_only --compiler=pdflatex'
alias xfly='texliveonfly --terminal_only --compiler=xelatex'

这里开启了 -shell-escape ,注意你的选择,以及运行来自网络代码前别直接开 -shell-escape ,有一定风险。最后两条是关于 texliveonfly 的,对于安装了完整版 TeXLive 的用户,没必要使用 texliveonfly

由于设置了 $out_dir=temp; ,所以在 terminal 里编译时可能用 -pv 参数会方便很多,例如 xlatexmk -pv main.tex

配置 VsCode

首先安装我推荐的插件,安装好后开始设置。

配置 psioniq File Header

1
2
3
4
5
6
7
8
9
{
"language": "latex",
"begin": "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%",
"prefix": "% ",
"end": "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%",
"blankLinesAfter": 2,
"forceToTop": false,
"beforeHeader": ["%&temp/<<filenamebase>>"]
},

main.tex 文件名的文件头会生成 %&temp/main 的第一行,这个告诉编译时使用 temp/main.fmt 文件。当不存在 temp/main.fmt 时也不后报错。这里可能需要查看 mylatexformat 学习加速编译才能明白这里的作用。

其实这里 psioniq File Header 最重要的作用就是自动生成第一行的信息,其余不是很重要。

配置 Code Runner

1
2
3
"code-runner.executorMap": {
"latex": "cd $dir && mkdir -p temp && etex -ini -interaction=nonstopmode -file-line-error -shell-escape -jobname=\"temp/$fileNameWithoutExt\" \"&latex\" mylatexformat.ltx $fileNameWithoutExt",
},

我最常用的是 etex 生成 fmt 文件,所以让它占 Code Runner 的编译。由于我打算让 fmt 文件放在 temp 文件下,所以必须保证 temp 文件存在,故需要使用 mkdir -p temp,当 temp 文件夹不存在是就建立它。

顺手再来个快捷键

1
2
3
4
5
{
"key": "f4",
"command": "code-runner.run",
"when": "!config.latex-workshop.bind.altKeymap.enabled && editorLangId == 'latex'"
},

这样在编辑 tex 文件时,使用 f4 可以快速编译得到 fmt 文件。

配置 LaTeX Workshop

在编译时我基本使用 latexmk 来自动编译,在这里进分享两个例子

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
"latex-workshop.latex.recipes": [
{
"name": "la-latexmk-latex🔃",
"tools": ["latexmk-la"]
},
{
"name": "x-latexmk-xelatex🔃",
"tools": ["latexmk-xe"]
},
"latex-workshop.latex.tools": [
{
"name": "latexmk-xe",
"command": "latexmk",
"args": [
"-synctex=1",
"-shell-escape",
"-interaction=nonstopmode",
"-file-line-error",
"-xelatex",
"-silent",
"%DOCFILE%.tex"
],
"env": {}
},
{
"name": "latexmk-la",
"command": "latexmk",
"args": [
"-e",
"$dvipdf='xdvipdfmx %O -o %D %S'",
"-latex",
"-pdfdvi",
"-synctex=1",
"-shell-escape",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%"
]
},
],

注意我的 latexmkrc 文件会将所有编译的东西放到 temp 文件夹,所以还需要

1
"latex-workshop.latex.outDir": "temp",

来告诉 VsCode 去哪里找 pdf 等编译后的文件。

接下来是配置其常用的快捷键

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
{
"key": "f5",
"command": "latex-workshop.build",
"when": "!config.latex-workshop.bind.altKeymap.enabled && editorLangId == 'latex'"
},
{
"key": "f5",
"command": "latex-workshop.build",
"when": "!config.latex-workshop.bind.altKeymap.enabled && editorLangId == 'tex'"
},
{
"key": "ctrl+l k",
"command": "latex-workshop.kill"
},
{
"key": "ctrl+l l",
"command": "latex-workshop.view",
"when": "!config.latex-workshop.bind.altKeymap.enabled && editorLangId == 'latex'"
},
{
"key": "ctrl+l b",
"command": "latex-workshop.recipes"
},
{
"key": "alt+a",
"command": "latex-workshop.synctex",
"when": "editorTextFocus && !config.latex-workshop.bind.altKeymap.enabled && editorLangId == 'latex'"
},

ctrl+l b 来选择编译链,之后就用 f5 就行。使用 ctrl+l k 杀灭编译进程,用 ctrl+l l 打开 pdf 文件,用 alt+a 进行正向跳转。

运用实例

在 VsCode 中新建一个 main.tex 文件

1
2
3
4
5
6
7
8
9
%&temp/main
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% @File: /nnn.tex
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\documentclass[UTF8]{ctexart}
\begin{document}
中文
\end{document}

这时先用 f4 构建 fmt 文件,再用 ctrl+l b 选择 la-latexmk-latex🔃 即可(如果你的 la-latexmk-latex🔃 在第一位直接用 f5 即可)。之后每次用 f5 编译即可。对于以上的例子我用 temp/main.fmt 文件后仅需 0.5s 左右,不用要 0.6s 。这里的时间节约不明显,但是对于导言区长的文件很好用,能节约很多时间。

其它配置

直接参考我的博客之前的文章

参考文献:打造舒适的 TeX 参考文献引用环境

texliveonfly: Arch 下 TeXlive-basic 的安装以及 texliveonfly 的基础使用的折腾日记

xelatex 的字体: LaTeX 调用发行版本的字体

VsCode 里的 vim 输入法自动切换:fcitx5 和 vim 的配合使用

Welcome to my other publishing channels