VS Code(LaTeX Workshop)

Visual Studio Code に LaTeX Workshop 拡張を入れると、汎用のコードエディタが本格的な LaTeX 執筆環境に変わります。保存するたびに自動でコンパイルし、PDF を隣のタブに表示し、ソースと PDF を相互に行き来できます。このページでは導入と設定、ビルドの仕組み(レシピとツール)、そして SyncTeX 連携を順に見ていきます。

LaTeX Workshop とは

VS Code 自体は TeX を組版しません。実際にコンパイルするのは、PC に入れた TeX Live(や MiKTeX・MacTeX)などのディストリビューションです。LaTeX Workshop は James Yu 氏による拡張で、エディタとそのディストリビューションの橋渡し役。ビルドの起動、PDF プレビュー、補完、シンタックスハイライト、\ref\cite のジャンプ、アウトライン表示などをまとめて提供します。マーケットプレースでの ID は James-Yu.latex-workshop です。

前提は、TeX のコマンドが PATH から呼べる ことです。拡張は内部で latexmkpdflatex といった実行ファイルを子プロセスとして起動するだけなので、ターミナルで latexmk --version が動けば、まず問題なく動きます。逆に組版エンジンや日本語フォントの設定は ディストリビューション側の話 で、拡張の設定ではありません。

導入と設定

手順は単純です。まず VS Code 本体を入れ、TeX Live など(2026 年なら TeX Live 2026)をインストールして PATH を通します。次に拡張ビュー(Ctrl/Cmd+Shift+X)で「LaTeX Workshop」を検索してインストール。PATH を変更した直後は、VS Code、できれば OS ごと再起動して環境変数を読み直させると確実です。.tex を開くと、左の TeX アクティビティバー(TeX マーク)からビルドやプレビューを起動できます。

設定は **settings.json** に書きます(Ctrl/Cmd+, の設定画面右上「設定(JSON)を開く」から、ユーザー全体かワークスペースの .vscode/settings.json を選べます)。まず押さえたい代表的なキーは次の三つです。

  • latex-workshop.latex.outDir** — 中間ファイルと PDF の出力先。既定は %DIR%.tex と同じ場所)。out などに変えるとソースフォルダが散らからずに済みます。
  • latex-workshop.latex.autoBuild.run** — 自動ビルドの契機。onFileChange(既定。依存ファイルの変更を検知)/onSave(保存時)/never(手動のみ)。挙動を読みやすくしたいなら onSave が無難です。
  • latex-workshop.view.pdf.viewer** — PDF の表示先。tab(既定。VS Code 内のタブ)/browser(ブラウザ)/external(外部ビューア)。SyncTeX を素直に使うなら tab が最適です。

最小の出発点はこれだけで十分です。出力を out/ にまとめ、保存でビルドし、PDF を内蔵タブに出す設定です。

settings.json
{
  "latex-workshop.latex.outDir": "%DIR%/out",
  "latex-workshop.latex.autoBuild.run": "onSave",
  "latex-workshop.view.pdf.viewer": "tab"
}

なお %DIR% は処理中の ルートファイルがあるディレクトリ に置き換わるプレースホルダで、後述のレシピでも使います。ビルドが終わると、拡張は中間ファイル(.aux.log など)を片づけたり残したりする設定(latex-workshop.latex.autoClean.run)も持っていますが、まずは出力先と契機の二つを決めれば動きはつかめます。

ビルドレシピとツール

LaTeX Workshop のビルドは 「ツール」と「レシピ」 の二段構えです。ツール(latex-workshop.latex.tools)は実際に起動する 1 コマンドの定義で、namecommand(実行ファイル)・args(引数)から成ります。レシピ(latex-workshop.latex.recipes)はツールを 順番に並べた手順 で、name と、ツール名を並べた tools 配列を持ちます。たとえば「pdflatex → bibtex → pdflatex → pdflatex」のように、文献処理を挟んで複数回まわす流れもレシピで表せます。

何も設定しなければ、拡張は組み込みの既定レシピ群を使います。先頭は単独の **latexmk** で、これが既定の本命です(latex-workshop.latex.recipe.default"first" のとき、レシピ一覧の先頭が選ばれます。"lastUsed" にすると前回使ったレシピを記憶します)。latexmk は依存関係を見て必要な回数だけ処理を繰り返してくれるため、相互参照・目次・文献のための「何回まわすか」を自分で考えずに済みます。既定の latexmk ツールはおおむね次のように定義されています。

settings.json
{
  "name": "latexmk",
  "command": "latexmk",
  "args": [
    "-synctex=1",
    "-interaction=nonstopmode",
    "-file-line-error",
    "-pdf",
    "-outdir=%OUTDIR%",
    "%DOC%"
  ],
  "env": {}
}

引数の意味を読み解くと、-synctex=1 が後述の SyncTeX 情報を出力させ、-interaction=nonstopmode がエラーで対話停止せずに走り切らせ、-file-line-error が「ファイル:行: メッセージ」形式でエラーを出して問題箇所へ飛びやすくします。-pdf は pdfLaTeX で直接 PDF を作る指定。%OUTDIR% は前述 outDir の値、%DOC%拡張子を除いたルートファイルのパス に置き換わるプレースホルダです(ほかに %DOCFILE%=拡張子なしファイル名、%DIR%=ルートのディレクトリ、などがあります)。

既定のレシピには、エンジン違いの latexmk (lualatex)latexmk (xelatex) や、.latexmkrc 任せの **latexmk (latexmkrc)**(引数を渡さず latexmk %DOC% だけ実行)も含まれます。日本語を組むなら、この「.latexmkrc にすべて書く」方式が最も素直です。プロジェクト直下に .latexmkrc を置き、エンジンと変換器を指定します。次は upLaTeX + dvipdfmx(理系の日本語論文で定番の組み合わせ)の例です。

.latexmkrc
$latex = 'uplatex -synctex=1 -interaction=nonstopmode -file-line-error %O %S';
$bibtex = 'upbibtex %O %B';
$biber = 'biber --bblencoding=utf8 -u -U --output_safechars %O %S';
$makeindex = 'upmendex %O -o %D %S';
$dvipdf = 'dvipdfmx %O -o %D %S';
$pdf_mode = 3;
$max_repeat = 5;

要は $latexuplatex$dvipdfdvipdfmx を割り当て、$pdf_mode = 3 で「DVI を作ってから dvipdfmx で PDF 化する」流れを選ぶだけです($pdf_mode = 1 は pdfLaTeX 直接、4 は LuaLaTeX)。索引は upmendex、文献は和文に強い upbibtex を使います。%S%O%D はそれぞれソース・オプション・出力ファイルを表す latexmk のプレースホルダです。これで VS Code 側はレシピ latexmk (latexmkrc) を選ぶだけで、エンジンの違いを settings.json に書かずに済みます。

もし .latexmkrc を使わず settings.json だけで日本語ビルドを完結させたいなら、ツールとレシピを自分で定義し、その日本語レシピを先頭に置きます。LuaLaTeX で日本語を組む場合の自己完結した例が次です(LuaLaTeX なら luatexjaltjsclasses 系で和文が組め、.latexmkrc も dvipdfmx も不要)。

settings.json
{
  "latex-workshop.latex.tools": [
    {
      "name": "lualatexmk",
      "command": "latexmk",
      "args": [
        "-synctex=1",
        "-interaction=nonstopmode",
        "-file-line-error",
        "-lualatex",
        "-outdir=%OUTDIR%",
        "%DOC%"
      ],
      "env": {}
    }
  ],
  "latex-workshop.latex.recipes": [
    {
      "name": "lualatexmk",
      "tools": ["lualatexmk"]
    }
  ],
  "latex-workshop.latex.outDir": "%DIR%/out",
  "latex-workshop.latex.autoBuild.run": "onSave"
}

なお、ファイル先頭に % !TEX program = ...% !TEX root = ... といった マジックコメント を書く流儀もあり、LaTeX Workshop も解釈します(無効化は latex-workshop.latex.build.enableMagicComments)。ただし現在はレシピ方式が推奨で、複数ファイル構成で「いま編集中の小ファイルから本体をコンパイルしたい」ときに % !TEX root が便利、という使い分けになります。

SyncTeX 連携

SyncTeX は、ソースの行と PDF 上の位置との対応を記録する仕組みです(前述の -synctex=1 がその対応表 .synctex.gz を出力します)。これにより、書いている箇所と PDF の表示を双方向に同期できます。内蔵 PDF ビューア(viewertab)を使うのが、設定いらずで最も快適です。

前方検索(ソース → PDF) は、本文の編集位置から PDF の対応箇所へ飛ぶ操作です。ショートカットは **Ctrl+Alt+J(Mac は Cmd+Option+J**)、コマンドパレットからは「LaTeX Workshop: SyncTeX from cursor」。ビルド直後に自動で前方検索したいときは latex-workshop.synctex.afterBuild.enabledtrue にします。

逆方向検索(PDF → ソース) は、PDF 上の場所から対応するソース行へ戻る操作です。内蔵タブビューアでは、PDF を **Ctrl(Mac は Cmd)+ クリック** すると該当行にカーソルが移ります。クリックの流儀は latex-workshop.view.pdf.internal.synctex.keybindingctrl-click(既定)か double-click を選べます。前方・後方をひと組で覚えておけば、長い文書でも該当箇所を一瞬で行き来できます。

日本語で SyncTeX を使う際の注意点として、.latexmkrc$latex-synctex=1 を渡しておくこと(上の例では指定済み)と、DVI 経由($pdf_mode = 3)でも upLaTeX + dvipdfmx は SyncTeX 情報を引き継げることを押さえておけば十分です。外部ビューアでの SyncTeX(latex-workshop.view.pdf.external.synctex.*)は設定が増えるため、まずは内蔵タブでの運用をおすすめします。