0%

在 VSCode 的 LaTeXworkshop 插件中使用 LaTeXmk

之前,东升介绍了如何将 VSCode 配置为 LaTeX 编辑器,我介绍了如何在 macOS 上配置 VSCode 与 Skim 的 LaTeX 正反跳转。按东升的配置,为解决交叉引用,我们需要在 recipes 当中多次调用编译工具,一则稍显麻烦,二则对于源文件无变动的情况会进行不必要的编译。

LaTeXmk 是为了解决这些问题而设计的。阅读其文档之后,针对以下几条编译路径,我写好了 LaTeXworkshop 的配置,供后来人参考。

  • XeLaTeX - BibTeX
  • pdfLaTeX - BibTeX
  • LuaLaTeX - BibTeX
  • LaTeX - DVIPDFMx - BibTeX
  • upLaTeX - DVIPDFMx - BibTeX
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
{
"latex-workshop.latex.tools": [
{
"name": "XeLaTeXmk",
"command": "latexmk",
"args": [
"-xelatex",
"-synctex=1",
"-shell-escape",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
]
},
{
"name": "pdfLaTeXmk",
"command": "latexmk",
"args": [
"-pdflatex",
"-synctex=1",
"-shell-escape",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
]
},
{
"name": "LuaLaTeXmk",
"command": "latexmk",
"args": [
"-lualatex",
"-synctex=1",
"-shell-escape",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
]
},
{
"name": "LaTeXmk-DVIPDFMx",
"command": "latexmk",
"args": [
"-e",
"$dvipdf='dvipdfmx %O -o %D %S'",
"-latex",
"-pdfdvi",
"-synctex=1",
"-shell-escape",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
]
},
{
"name": "upLaTeXmk-DVIPDFMx",
"command": "latexmk",
"args": [
"-e",
"$dvipdf='dvipdfmx %O -o %D %S'",
"-latex=uplatex",
"-pdfdvi",
"-synctex=1",
"-shell-escape",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
]
}
],
"latex-workshop.latex.recipes": [
{
"name": "XeLaTeXmk",
"tools": [
"XeLaTeXmk",
]
},
{
"name": "pdfLaTeXmk",
"tools": [
"pdfLaTeXmk",
]
},
{
"name": "LuaLaTeXmk",
"tools": [
"LuaLaTeXmk",
]
},
{
"name": "LaTeXmk-DVIPDFMx",
"tools": [
"LaTeXmk-DVIPDFMx",
]
},
{
"name": "upLaTeXmk-DVIPDFMx",
"tools": [
"upLaTeXmk-DVIPDFMx",
]
}
]
}

这里,针对 LaTeX 和 upLaTeX 的情形,为了使用 DVIPDFMx 覆盖 LaTeXmk 默认的 dvipdf,使用 -e 参数,将设定 dvipdf 命令的 Perl 代码作为参数传给 LaTeXmk。这样免去了修改 .latexmkrc 配置文件的麻烦。类似地,如果要使用 BibLaTeX 代替 BibTeX,则可以修改名为 $bibtex 的 Perl 变量。

此外,这里默认打开了 -shell-escape 标记。如果你不知道它意味着什么,那可以就这么保留,它会在将来给你省下一些麻烦。如果你知道它意味着什么,可以按需保留或删除。

俗话说,投资效率是最好的投资。 如果您感觉我的文章质量不错,读后收获很大,预计能为您提高 10% 的工作效率,不妨小额捐助我一下,让我有动力继续写出更多好文章。