VSCode で LaTeX Workshop を使うたびに混乱したくないのでまとめておく.
LaTeX Workshop
これ.VSCode 上で適当に LaTeX を使うには十分なんだけど十分すぎて設定の概念を忘れてしまう.
Autobuild
LaTeX Workshop はデフォルトでAutobuild が有効.もしこれが気に食わないなら never にすればよいが,監視のプロセスは常に立ち続けているので VSCode 使うなら有効にして委ねてしまうほうが良い.
recipes と tools
LaTeX Workshop でコンパイルの設定をかえるときに主に「tools」と「recipes」をいじることになる.
recipes
どのようにビルドするかのレシピ.
[
{
"name": "latexmk 🔃",
"tools": ["latexmk"]
},
{
"name": "pdflatex ➞ bibtex ➞ pdflatex`×2",
"tools": ["pdflatex", "bibtex", "pdflatex", "pdflatex"]
}
]
ここで呼ばれている tools は,記述された順番に呼ばれる.そのため,latexmk と一つだけ書かれたものは,latexmk が一度呼ばれる.pdflatex ➞ bibtex ➞ pdflatex ×2
のものは,pdflatex -> bibtex -> pdflatex -> pdflatex の順番で呼ばれる.
ここで注意したいのが,ここで呼ばれるのは latexmk
コマンドではないということ.ここで呼ばれるのは,tools
で定義したもの.
tools
上の recipes の中で呼ばれるのは tools の設定.
[
{
"name": "latexmk",
"command": "latexmk",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
"-outdir=%OUTDIR%",
"%DOC%"
],
"env": {}
},
{
"name": "pdflatex",
"command": "pdflatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOC%"
],
"env": {}
},
{
"name": "bibtex",
"command": "bibtex",
"args": ["%DOCFILE%"],
"env": {}
}
]
なので,latexmk 🔃
で呼ばれるのは latexmk のコマンドではなく,tools で定義されているlatexmk
である1.ここさえわかればあとは対して問題ではない.
自分の設定
.latexmkrc
$latex = 'platex -synctex=1 %O %S';
$bibtex = 'pbibtex %O %B';
$dvipdf = 'dvipdfmx %O -o %D %S';
$makeindex = 'mendex %O -o %D %S';
$max_repeat = 10;
$pdf_previewer = '"C:\Program Files\SumatraPDF\SumatraPDF.exe" -reuse-instance %O %S';
vscode の setting.json
{
"latex-workshop.latex.autoBuild.run": "onFileChange",
"latex-workshop.latex.recipes": [
{
"name": "latexmk 🔃",
"tools": ["latexmk"]
},
{
"name": "latexmk (latexmkrc)",
"tools": ["latexmk_rconly"]
},
{
"name": "latexmk (lualatex)",
"tools": ["lualatexmk"]
},
{
"name": "pdflatex ➞ bibtex ➞ pdflatex × 2",
"tools": ["pdflatex", "bibtex", "pdflatex", "pdflatex"]
}
],
"latex-workshop.latex.tools": [
{
"name": "latexmk",
"command": "latexmk",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdfdvi",
"%DOC%"
]
}
]
}
ちなみにデフォルトのレシピとしては一番上に設定したものが呼ばれるので,どんな状態だろうと tex ファイルを保存した瞬間に一番上のレシピである latexmk 🔃
が呼ばれる.ここの latexmk はちゃんと.latexmkrc
の設定を読み込んでくれるので日本語でも問題ないというわけ.
参考
- 具体的には
latexmk -synctex=1 -interaction=nonstopmode -file-line-error -pdf -outdir=%OUTDIR% %DOC%
というコマンドが呼ばれている. [return]