VSCode で LaTeX Workshop を使うたびに混乱したくないのでまとめておく.

LaTeX Workshop

James-Yu/LaTeX-Workshop: Boost LaTeX typesetting efficiency with preview, compile, autocomplete, colorize, and more.

これ.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の設定を読み込んでくれるので日本語でも問題ないというわけ.

参考


  1. 具体的には latexmk -synctex=1 -interaction=nonstopmode -file-line-error -pdf -outdir=%OUTDIR% %DOC%というコマンドが呼ばれている. [return]