VS CodeでLaTeXのコンパイル方法をファイル毎に設定するには

VS CodeでLaTeX Workshopを使用している場合、.texファイルの先頭に以下のようなコメントを追加することで、レシピ ($\approx$ コンパイル方法) を指定できます。

%!LW recipe=recipe-name

このmagic commentはLaTeX WorkshopのWikiに記述されています。ただし、記事後半に記した注意点と代替手段もあるため、使用する際は注意が必要です。

また、他にもいくつかmagic commentがありますが、それらは非推奨のようです。詳しくはWikiの当該箇所をご覧ください。

詳細な説明

一例として、検索上位に来るLaTeXの環境構築記事で使われているレシピを使い分けます。

以下がレシピの引用ですが、これら2つのレシピを登録しているとします。

// ......(中略)......
    //latexmkのビルドレシピ
    "latex-workshop.latex.recipes": [
        //bibTexを使用しない場合のレシピ
        {
            "name": "ptex2pdf (uplatex)*2",
            "tools": [
                "ptex2pdf (uplatex)",
                "ptex2pdf (uplatex)"
            ]
        },
        //bibTexを使用する場合のレシピ
        {
            "name": "ptex2pdf (uplatex) -> bibtex -> ptex2pdf (uplatex) *2",
            "tools": [
                "ptex2pdf (uplatex)",
                "pbibtex",
                "ptex2pdf (uplatex)",
                "ptex2pdf (uplatex)"
            ]
        }
    ],
// ......(中略)......

この内容を当該記事のように設定することで、下図のように複数のレシピが登録されます。

recipes

latex-workshop.latex.recipe.defaultという設定でデフォルトの”first”を指定していると、これらレシピのうち、先頭にあるptex2pdf (uplatex)*2がautoBuildにおいて使われます。

一応、この設定でlastUsedを指定すると、LaTeX Workshop: Build with recipeコマンドで最後に使用されたレシピが選択されますが、自由度は低いです。

そこで、基本は前者のレシピを使いながら、ある特定のファイルでは後者のレシピを使いたい場合、以下のように.texファイルの先頭にmagic commentを追加します。

%!LW recipe=ptex2pdf (uplatex) -> bibtex -> ptex2pdf (uplatex) *2

\documentclass[a4paper,12pt]{jlreq}

\title{サンプル}
\author{Hiroki Hamaguchi}

\begin{document}
\maketitle

常にbibtexを走らせたい\cite{sample}\bibliographystyle{jplain}
\bibliography{sample}

\end{document}

すると、確かにこのレシピが使用され、ファイル毎にレシピを使い分けられます。

注意点と代替手段

注意として、

  • localにしかレシピ名を保存しない場合に環境に依存するtexファイルが増える
  • localの場合でもファイルを移動する際にsettings.jsonと一緒にしないと壊れる
  • 仕様を知らない人とファイル共有をするとバグの原因になる

などの欠点も存在します。

また、より簡潔に正攻法で解決できる場合にはmagic commentを使う必要はありません

例えばTikZでは、

\documentclass{standalone}

ptex2pdfでコンパイルすると正しく表示されないことがある一方、pdflatexでコンパイルすると正しく表示されることがあります。

この場合、%!LW recipe=pdflatexを指定することも可能ですが、

\documentclass[dvipdfmx]{standalone}

とすればptex2pdfでも正常にコンパイル可能です。

有効なシナリオ

上記の欠点こそあるものの、この機能は様々なシチュエーションで便利かと思います。

例えば、やはり図や数式などを単体で出力するような、Overleafにもアップしない補助的な役割を果たす.texファイルを作成する場合や、学会や出版社側からの指定で特定のdocument classやレシピを使用する必要がある場合などが最も有効そうなシナリオだと思います。

特に、latexmkrcを使っても%!LW recipe=と似たようなことは達成可能のようですが、そのような曲芸に比べれば遥かに簡潔で汎用的だと思います。このようなmagic commentの存在を把握しておくこと自体に損はないと思われます。

最後に

本記事が%!LW recipe=の周知および、快適なLaTeX生活の一助になれば幸いです。