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 から呼べる ことです。拡張は内部で latexmk や pdflatex といった実行ファイルを子プロセスとして起動するだけなので、ターミナルで 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 を内蔵タブに出す設定です。
{
"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 コマンドの定義で、name・command(実行ファイル)・args(引数)から成ります。レシピ(latex-workshop.latex.recipes)はツールを 順番に並べた手順 で、name と、ツール名を並べた tools 配列を持ちます。たとえば「pdflatex → bibtex → pdflatex → pdflatex」のように、文献処理を挟んで複数回まわす流れもレシピで表せます。
何も設定しなければ、拡張は組み込みの既定レシピ群を使います。先頭は単独の **latexmk** で、これが既定の本命です(latex-workshop.latex.recipe.default が "first" のとき、レシピ一覧の先頭が選ばれます。"lastUsed" にすると前回使ったレシピを記憶します)。latexmk は依存関係を見て必要な回数だけ処理を繰り返してくれるため、相互参照・目次・文献のための「何回まわすか」を自分で考えずに済みます。既定の latexmk ツールはおおむね次のように定義されています。
{
"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(理系の日本語論文で定番の組み合わせ)の例です。
$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;要は $latex に uplatex、$dvipdf に dvipdfmx を割り当て、$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 なら luatexja/ltjsclasses 系で和文が組め、.latexmkrc も dvipdfmx も不要)。
{
"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 ビューア(viewer が tab)を使うのが、設定いらずで最も快適です。
前方検索(ソース → PDF) は、本文の編集位置から PDF の対応箇所へ飛ぶ操作です。ショートカットは **Ctrl+Alt+J(Mac は Cmd+Option+J**)、コマンドパレットからは「LaTeX Workshop: SyncTeX from cursor」。ビルド直後に自動で前方検索したいときは latex-workshop.synctex.afterBuild.enabled を true にします。
逆方向検索(PDF → ソース) は、PDF 上の場所から対応するソース行へ戻る操作です。内蔵タブビューアでは、PDF を **Ctrl(Mac は Cmd)+ クリック** すると該当行にカーソルが移ります。クリックの流儀は latex-workshop.view.pdf.internal.synctex.keybinding で ctrl-click(既定)か double-click を選べます。前方・後方をひと組で覚えておけば、長い文書でも該当箇所を一瞬で行き来できます。
日本語で SyncTeX を使う際の注意点として、.latexmkrc の $latex に -synctex=1 を渡しておくこと(上の例では指定済み)と、DVI 経由($pdf_mode = 3)でも upLaTeX + dvipdfmx は SyncTeX 情報を引き継げることを押さえておけば十分です。外部ビューアでの SyncTeX(latex-workshop.view.pdf.external.synctex.*)は設定が増えるため、まずは内蔵タブでの運用をおすすめします。