VS CodeでLaTeX環境を構築する
目次
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でビルドするように設定する。
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"と指定する。
参考文献 #
CTAN: Package latexmk latexmk.pdf p23 ↩︎