メインコンテンツへスキップ

VS CodeでLaTeXを使う

··8 分

VS CodeとLaTeX WorkshopでLaTeX環境を構築する方法を紹介する。LaTeX文書をLuaLaTeXでビルドするための設定をする。upLaTeXを使う設定も少し扱う。VS Code、LaTeX Workshop、TeX Live 2023はインストール済みとする。OSはWindows10とする。

テスト用LaTeXソースファイル #

\documentclass{jlreq}

\begin{document}

これは \LaTeX のテストです。

\end{document}

テスト用のLaTeXファイルとして上のものを使う。ドキュメントクラスは、LuaLaTeXにもupLaTeXにも対応しているjlreqを採用した。ドキュメントクラスによって対応するLaTeXエンジンが異なり、ビルドできないことがあるので注意する。

LuaLaTeXでビルドする #

LaTeX Workshopは、標準ではpdfLaTeXでビルドする設定になっている。pdfLaTeXは日本語文書に対応していないので、エラーとなる。pdfLaTeXではなく、LuaLaTeXでビルドするように設定する。

LaTeX Workshopのデフォルトレシピの設定
VS Codeの設定を開き、“latex-workshop.latex.recipe.default"を検索する。LaTeX Workshopが標準で使うレシピを設定する項目だ。“first"となっているのを、“latexmk (lualatex)“に変える。LuaLaTeXを使ってビルドされるようになる。

基本的な設定はこれだけで完了する。テスト用ファイルをビルドできるはずだ。

LaTeX Workshopのレシピとは? #

レシピはLaTeXファイルのビルド時に実行される、一連のコマンドを指す1。レシピはツールの組み合わせでできており、ツールには実行するコマンドが定義されている。“latex-workshop.latex.recipes"で設定を検索して、「setting.jsonで編集」をクリックすると、レシピの設定を見ることができる。

  {
    "name": "pdflatex -> bibtex -> pdflatex * 2",
    "tools": [
      "pdflatex",
      "bibtex",
      "pdflatex",
      "pdflatex"
    ]
  }

これは"pdflatex -> bibtex -> pdflatex * 2"という名前のレシピだ。まずpdflatexコマンドが実行され、次にbibtexコマンドが実行される。それからpdflatexコマンドが2回実行される。実際にはこれらのコマンドはツールで定義されている。レシピと同様に"latex-workshop.latex.tools"から、ツールの設定を見ることができる。

    {
      "name": "pdflatex",
      "command": "pdflatex",
      "args": [
        "-synctex=1",
        "-interaction=nonstopmode",
        "-file-line-error",
        "%DOC%"
      ],
      "env": {}
    }

pdflatexツールは上のように定義されている。commandは実行するコマンド、argsは引数を設定する2%DOC%はプレースホルダー3であり、ビルドするLaTeXファイルのフルパス(拡張子を除く)に置き換えられる。envは環境変数を設定できる。

latexmk (lualatex)レシピの解説 #

“latexmk (lualatex)“レシピはlualatexmkツールを実行する。

    {
      "name": "latexmk (lualatex)",
      "tools": [
        "lualatexmk"
      ]
    }

lualatexmkツールは以下の通り。

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

latexmkコマンドを実行している。latexmkについては後述する。初めの3つはlatex用の引数であり、latexmkからそのままlualatexに渡される。後ろの3つがlatexmk用の引数だ。

-synctex #

“-synctex=1"はSyncTeX用のデータ(.synctex.gz)を出力する。SyncTeXとはLaTeXファイルとpdfファイルの相互ジャンプを可能にするものだ4。LaTeX WorkshopにはJavaScript版のSyncTeXが内蔵されている5ので、パッケージをインストールしなくても使える。

-interaction #

“-interaction=nonstopmode"は、エラーが出てもコンパイルを中断せずに続けるオプションだ。ほかにbatchmode、scrollmode、errorstopmodeを指定できる6。指定しない場合は、標準のerrorstopmodeになる。

batchmodeはコンパイルを中断しないのに加えて、ログやエラーメッセージを表示しない。

scrollmodeはファイルが見つからないエラーの場合だけコンパイルを中断する。

errorstopmodeは、エラーが出たらコンパイルを中断して、ユーザーに対処を求める。

-file-line-error #

“-file-line-error"は、エラー表示にファイル名と行番号を追加する。ファイル名:行番号: <エラーメッセージ>のように表示される。

-lualatex #

“-lualatex"はlualatexでコンパイルするためのオプションだ。dviファイルを生成せず、直接pdfを出力する。

-outdir #

“-outdir=%OUTDIR%“はlatexが生成するファイル(pdfやdviなど)の出力先を指定する。%OUTDIR%はプレースホルダーであり、標準ではビルドするLaTeXファイルのディレクトリーに置き換えられる。%OUTDIR%の値は"latex-workshop.latex.outDir"で設定できる。

latexmk #

latexmkはLaTeXファイルのコンパイルを自動化してくれるツールだ。“pdflatex -> bibtex -> pdflatex * 2"というレシピがあったが、このように複数回コンパイルしないといけない場合がある。それを自動判定して必要なコマンドを実行してくれる。

latexmkの設定 #

latexmkの設定は、".latexmkrc"ファイルに記述する7。"%USERPROFILE%“ディレクトリーに置くと自動的に読み込まれる。また、LaTeXソースファイルと同じディレクトリーにある.latexmkrcも自動的に読み込まれる。後者はあとから読み込まれて優先される。なので、ビルドするLaTeXファイルに応じた.latexmkrcを同じディレクトリーに置くとよい。

.latexmkrcはPerlスクリプトになっている。Perl言語の知識があれば複雑な設定もできるが、通常の用途では単純な設定で十分だ。

日本語文書用の.latexmkrc #

日本語文書向けの.latexmkrcの例を示す。latexコマンドでupLaTex、bibtexコマンドでupBibTeXを使うための設定だ。以下のコードを.latexmkファイルとして保存し、LaTeXソースファイルと同じディレクトリーに置けばいい。

LuaLaTeXを使う場合は$bibtexの設定だけでいい。bibtexを使わない場合は設定自体が不要だ。

# %O:オプション
# %S:ソースファイル
# %D:出力ファイル

$latex = 'uplatex %O %S';
$bibtex = 'upbibtex %O %S';
$dvipdf = 'dvipdfmx %O -o %D %S';

%Oや%Sはプレースホルダーで、適切な値に置き換えられる。%Oはオプションになる。%Sはソースファイル名(test.dviからtest.pdfを生成するときは、test.dvi)になる。

dvipdfmxは、-oオプションで出力ファイル名を指定している8。%Dは出力ファイル名(test.dviからtest.pdfを生成するときは、test.pdf)に置き換えられる。

-oオプションで指定しない場合はソースファイル名から出力ファイル名が決まる(test.dviを入力したら、test.pdfになる)。なので基本的に-oオプションはなくても同じだが、公式マニュアル通りに記述した。latexmk側で出力ファイル名を指定できるということだろう。

latexmkレシピを日本語文書用に変更する #

LaTeX Workshopの標準であるlatexmkレシピを日本語文書用に変更する。レシピはそのままで、“latex-workshop.latex.tools"からlatexmkツールを変更する。

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

argsの”-pdf"オプションはpdfLaTeXを指定している。これを削除して、代わりに”-pdfdvi"オプションを追加する。dviファイルを経由してpdfファイルを生成するオプションだ。pdflatexコマンドではなく、latexコマンドで処理される。日本語文書用の.latexmkrcを設定して、latexコマンドをuplatexにすれば、upLaTeXでビルドできる。

標準でlatexmkレシピを使うには、LuaLaTeXでビルドする設定を再び変える必要がある。レシピの順番を変更していなければ"first"にする。もしくは、明確に"latexmk"と指定する。

参考文献 #