LaTeX環境構築（VSCode + LuaLaTeX）補足 ～BibTeXを用いた文献管理の設定～

# はじめに
この記事では以下の記事に沿ってLaTeXの環境構築をした人向けにBibTeXで文献管理をするための設定を行っていきます。これを読んでいない方はまず前提となっている設定をこちらで確認してきて下さい。

https://qiita.com/h_d/items/7d4e58af1a8861ec5546

また、全員に必須の設定ではないため初心者の方は読まなくて結構です。

BibTeXはとても便利な機能で、文献が多くなるほどこれがないとやってられなくなります。しかしインターネット上にはVSCodeでBibTeXをビルドする設定を教えてくれる記事はあまりありません。この記事はJSONとか何も分からんという方にも分かるように書いているので、頑張って設定して下さい。

# Settings.jsonをいじる
先程の記事ではLuaLaTeXを用いて1回だけコンパイルするように設定していましたが、BibTeXを使う際には合計で4回のコンパイルが必要になります。この設定をsettings.jsonに書き込んでいきます。変更点はrecipesとtoolsの部分だけなのでそこだけを抜粋して書きます。これ以外の部分をいじる必要はありません。
```json:settings.json
{
    "latex-workshop.latex.recipes": [
        {
          "name": "lualatex",
          "tools": [
            "lualatex",
            "pbibtex",
            "lualatex",
            "lualatex",
          ]
        }
      ],
      "latex-workshop.latex.tools": [
        {
          "name": "lualatex",
          "command": "lualatex",
          "args": [
            "--cmdx",
            "-file-line-error",
            "-synctex=1",
            "-interaction=nonstopmode",
            "-halt-on-error",
            "-output-directory=%OUTDIR%",
            "%DOC%"
          ],
          
          "env": {}
        },
        {
          "name": "pbibtex",
          "command": "pbibtex",
          "args": [
              "-kanji=utf8",
              "%OUTDIR%/%DOCFILE%"
          ]
      },
      ],
}
```
recipesの中で指定している`"tools"`の数が何やら増えている事がわかります。今回は`"lualatex"`を1回実行したあとに`"pbibtex"`を1回実行し、さらに`"lualatex"`を2回実行しています。
また、toolsの中には`"pbibtex"`が追加されています。コマンドについて詳しく知りたかったら各自で調べて下さい。

settings.jsonの変更は以上です。

# BibTeXを使う
それでは適当なフォルダにtexファイルを作成して｢tmp｣を呼び出してビルドしてみましょう。そしたらoutputディレクトリにこのようなファイルが作成されてエラーを吐くと思います。これは正常な動作です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3767777/1ce7938f-2f30-380f-0eba-450ea97e3902.png)

BibTeXを利用するためにはTeXのソース内で`\bibliography{}`と`\bibliographystyle{}`を設定する必要があります。
`\bibliography{}`は作業フォルダ内に作成した`.bib`ファイルを指定します。とりあえずここでは`a.tex`と同じディレクトリに`ref.bib`という空のファイルを作成してそれを指定してみて下さい。
`\bibliographystyle{}`ではあらかじめ用意された引用スタイルを指定します。ここではとりあえず`\bibliographystyle{junstr}`とします。

これらについてはここでは詳しく説明しないので、これらの優秀な方が書かれた記事を参考にして下さい。

https://bibtex.eu/ja/

https://mathlandscape.com/latex-bibstyles/

今回は空の参考文献を作っているので、`\bibliography{ref.bib}`の前に`\nocite{*}`を追記して下さい。これは実際に参考文献を挿入する際には必要ありません。
それではもう一度ビルドしてみましょう。うまく行けばpdfファイルが出力され、中身はこのようになっているはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3767777/a305c913-6a56-35f3-ddd4-203e7ffca5d6.png)

これでBibTeXを使うための設定は完了です。ここではBibTeXの具体的な使い方は説明しないので、それについてはGoogle等で調べて下さい。

# 普段はBibTeXを使わないけど設定は残しておきたい
~~そんな方はsettings.jsonで指定したrecipesの中身を`"lualatex"`1回だけ残してそれ以外コメントアウトしておくことをおすすめします。こんな感じです。~~ (2024/12/3 運用を変えたのでそれに合わせて編集しました)

以下のようにrecipesを2つ作っておけば普段の保存時の自動ビルドではlualatexが一回だけ実行されます。参考文献を追加してBibTeXのコンパイルが必要な時には以下のスクショのように左のTeXメニューからlua_bibを選択してコンパイルするという運用にすれば無駄なコンパイルを減らせます。
```json:settings.json
{
    "latex-workshop.latex.recipes": [
        {
            "name": "lualatex",
            "tools": [
            "lualatex",
            ]
        },
        {
            "name": "lua_bib",
            "tools": [
            "lualatex",
            "pbibtex(ja)",
            "lualatex",
            "lualatex",
            ]
        },
    ],
    "latex-workshop.latex.tools": [
        {
            "name": "lualatex",
            "command": "lualatex",
            "args": [
            "--cmdx",
            "-file-line-error",
            "-synctex=1",
            "-interaction=nonstopmode",
            "-halt-on-error",
            "-output-directory=%OUTDIR%",
            "%DOC%"
            ],
            "env": {}
        },
        {
            "name": "pbibtex(ja)",
            "command": "pbibtex",
            "args": [
            "-kanji=utf8",
            "%OUTDIR%/%DOCFILE%"
            ]
        },
    ],
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3767777/b5d63d58-d863-ef24-6205-78088a1fae47.png)

# おわりに
PCの扱いに慣れていない学生はWordのクソみたいな数式エディタに悩まされていることでしょう。ここまで読んでくださった方はこの一連の記事を周りに共有することでLaTeXの素晴らしさを布教して友人を救ってあげて下さい。