[もう躓かない] VSCodeでLaTeXを動かしてBiBTeX等を含めて実行できるようにする

# VsCodeのLaTeXにおいてpTeXおよびBibTeXを実行し, pdfを出力する.

- かなり雑に記載していますが, 動くけどこれがうまくいかない...みたいな問題に多々ぶち当たりつつ, 試行錯誤して多分これで２度と躓かなくなったので知見を共有します.
- windows10向けに記載していますが, Macユーザーにも適用可能であることを確認しています. 適宜コマンドを読み替えてください.

参考: [Visual Studio CodeでTeXのコンパイルをできるようにする方法](https://qiita.com/SUZUKI_Masaya/items/7fb5509006163e7e671f)

## 0. TeXのインストール
brewを使ったり, diskを使ったり, オープンソースを使ったりでとりあえずTeXをインストール.

## 1. 拡張機能のインストール
VSCodeの[LaTeX Workshopの拡張機能](https://marketplace.visualstudio.com/items?itemName=James-Yu.latex-workshop)をインストールする.


## 2. setting.jsonの書き換え
`ctrl+,`をして右上のボタン
![2021-12-28-17-08-42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1224463/7e48f94e-f11b-ddd9-1cba-7d1f66eb067d.png)
を押してsetting.jsonを開く.

 setting.jsonに下記のように記載する. なお, `command: "hoge"`において私はフルパスで記載しているが, 一般的にはその必要は無い. (例: `"command": "latexmk"`と記載すれば良い.) 好みに任せる. (多分ディレクトリ探す手間もあるしフルパスで書かないほうが楽.) MaC OSの場合はターミナルでfindコマンド等を用いてtexliveがインストールしてあるディレクトリを見つけてください.


 ```
{"latex-workshop.latex.tools": [
    {
        "command": "C:\\texlive\\2017\\bin\\win32\\latexmk",
        "args": [
            "-synctex=1",
            "-interaction=nonstopmode",
            "-file-line-error",
            "-pdf",
            "%DOC%"
        ],
        "name": "latexmk"
    },
    {
        "command": "C:\\texlive\\2017\\bin\\win32\\pdflatex",
        "args": [
            "-synctex=1",
            "-interaction=nonstopmode",
            "-file-line-error",
            "%DOC%"
        ],
        "name": "pdflatex",
        },
        {
            "command": "C:\\texlive\\2017\\bin\\win32\\bibtex",
            "args": [
                "%DOCFILE%"
            ],
            "name": "bibtex",
        },
        {
            "command": "C:\\texlive\\2017\\bin\\win32\\ptex2pdf",
            "args": [
                "-interaction=nonstopmode",
                "-l",
                "-ot",
                "-kanji=utf8 -synctex=1",
                "%DOC%.tex"
            ],
            "name":"ptex2pdf",
        },
       {
            "command": "C:\\texlive\\2017\\bin\\win32\\ptex2pdf",
            "args": [
                "-l",
                "-u",
                "-ot",
                "-kanji=utf8 -synctex=1",
                "%DOC%"
            ],
            "name":"ptex2pdf (uplatex)",
        },
        {
            "command": "C:\\texlive\\2017\\bin\\win32\\pbibtex",
            "args": [
                "-kanji=utf8",
                "%DOCFILE%"
            ],
            "name": "pbibtex",
        }
],
"latex-workshop.latex.recipes": [
{
    "name": "ptex2pdf",
    "tools": [
        "ptex2pdf"
    ]
},
{
    "name": "ptex2pdf -> pbibtex -> ptex2pdf*2",
    "tools": [
        "ptex2pdf",
        "pbibtex",
        "ptex2pdf",
        "ptex2pdf"
    ]
},
{
    "name": "pdflatex -> bibtex -> pdflatex*2",
    "tools": [
        "pdflatex",
        "bibtex",
        "pdflatex",
        "pdflatex"
    ]
},
{
    "name": "latexmk",
    "tools": [
        "latexmk"
    ]
},
{
    "name": "pdflatex",
    "tools": [
        "pdflatex"
    ]
},
{
    "name": "ptex2pdf (uplatex)",
    "tools": [
        "ptex2pdf (uplatex)"
    ]
},
{
    "name": "ptex2pdf (uplatex) -> pbibtex -> ptex2pdf (uplatex) *2",
    "tools": [
        "ptex2pdf (uplatex)",
        "pbibtex",
        "ptex2pdf (uplatex)",
        "ptex2pdf (uplatex)"
    ]
},
],


"latex-workshop.latexindent.path": "C:\\texlive\\2017\\bin\\win32\\latexindent.exe",
"latex-workshop.view.pdf.viewer": "tab",

"[tex]": {
    // スニペット補完中にも補完を使えるようにする
    "editor.suggest.snippetsPreventQuickSuggestions": false,
    // インデント幅を2にする
    "editor.tabSize": 2
},

"[latex]": {
    // スニペット補完中にも補完を使えるようにする
    "editor.suggest.snippetsPreventQuickSuggestions": false,
    // インデント幅を2にする
    "editor.tabSize": 2
},  

"[bibtex]": {
    // インデント幅を2にする
    "editor.tabSize": 2
}
 ```

 以上のような記載をすると, `ctrl+S`の保存と同時にptexがコンパイルされ, pdfの出力まで行われるはずである. 超簡略化して説明すると, 
 ```
    "latex-workshop.latex.tools": []
 ```
 の部分がコンパイルの際にする作業を記載しており, その実行コマンドの名前が`name: hoge`で特徴づけされている. そして`ctrl+S`で実行されるような自動化を行っているのが. 
```
    "latex-workshop.latex.recipes": []
```
の部分であると思っていただければ良い. いまデフォルトで`ctrl+S`でptexがコンパイルされ, pdfの出力まで行われるのは`"latex-workshop.latex.recipes"`の一番始めに書いているのがptexの実行であるからそうなっている.

| レシピ | 内容 |
| ---- | ---- |
| latexmk | LaTeXmkを用いてコンパイル |
| pdflatex | pdfLaTeXを用いてコンパイル |
| pdflatex -> bibtex -> pdflatex*2 | pdfLaTeXとBibTeXを用いてコンパイル |
| ptex2pdf | ptex2pdfを用いてコンパイル |
| ptex2pdf -> pbibtex -> ptex2pdf*2 | pLaTeXとpBibTeXを用いてコンパイル |
| ptex2pdf (uplatex) | upLaTeXを用いてコンパイル |
| ptex2pdf (uplatex) -> pbibtex -> ptex2pdf (uplatex) *2 | upLaTeXとpBibTeXを用いてコンパイル |

これを踏まえて, もしbibtexを`ctrl+S`で実行したければ一番始めにbibtexをもってくればそうなる.(伝われ.)

しかし個人的には毎回pdfLaTeXとBibTeXを用いてコンパイルするのは非効率だと思うので, デフォルトはpdfLaTeXで良いかと思う. 

## 3. BibTeXのコンパイルとLaTeXの実行
実際にbibファイルを作ってbibtexをコンパイルしたい場合のやり方を説明する. コンパイルを行いたいファイルにおいて`ctrl+shift+P`を押す. そうするとコマンドパレットが開くので, build with recipeを選択. 

![2021-11-09-17-32-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1224463/70c1d069-13d3-ecbd-a3ef-bcc04e99fe06.png)


そして先の表を参考に実行したいコンパイルを選ぶ. 今のbibtexを動かすという目的においては, 日本語の場合は`ptex2pdf -> pbibtex -> ptex2pdf*2`を, 英語の場合は`pdflatex -> bibtex -> pdflatex*2`を選択すれば, pLaTeX -> pBibTeX -> pLaTeX -> pLaTeXというように実行がなされる.

![2021-11-09-17-33-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1224463/f13ef3d5-5d86-6b47-cd8d-e80f34e5288d.png)



## 4. 実行テスト
`reference.bib`ファイルを作成し, 以下のテンプレートファイルをコピペしてください.

```bib
@article{Witten:1998qj,
  author        = {Witten, Edward},
  title         = {{Anti-de Sitter space and holography}},
  eprint        = {hep-th/9802150},
  archiveprefix = {arXiv},
  reportnumber  = {IASSNS-HEP-98-15},
  doi           = {10.4310/ATMP.1998.v2.n2.a2},
  journal       = {Adv. Theor. Math. Phys.},
  volume        = {2},
  pages         = {253--291},
  year          = {1998}
}
```

`test.tex`ファイルを作成し, 以下のテンプレートファイルをコピペしてください.

```latex
\documentclass[11pt,a4paper]{jsarticle}
\usepackage{amsmath,amssymb}
\usepackage{bm}
\usepackage{graphicx}
\usepackage{ascmac}

\title{テンプレート}
\author{Hoge太hoge郎}
\date{\today}
\begin{document}
\maketitle

\section{hoge}
参考文献\cite{Witten:1998qj}

\bibliographystyle{junsrt}
\bibliography{reference}

\end{document}
```

その後, bibファイルを読み込み, ptex2pdf -> pbibtex -> ptex2pdf*2を実行するために, `ctrl+shift+P`を押して, build with recipeからそれを選んで実行. 正しくsetting.jsonの書き込みが行われていれば実行がなされ, pdfファイルが作成されるはずである

なお, PDFファイルを右ページに置くには, `Ctrl+Alt+v`を押すか, `Ctrl+Shift+P`をして, "latex-workshop.view"を選択すれば良い. 

なお, bibファイルを一度読み込めば毎度recipeから実行をする必要はなく, ptexのみを実行すれば良いため, 保存つまり`ctrl+S`をするたびにptexが実行されれ, 実質自動コンパルが行われる形となっている.

## 5. 豆知識
- プログラム中で行を折り返すには`Alt+Z`をすれば良い(これはデフォルトで設定することも可能). 
- pdfから該当のコードへジャンプするには, `ctrl`を押しながらマウスで左クリックをすれば良い.
- macOSでフォーマットが成功しない時の対処法https://zenn.dev/umi_mori/books/72d30926afbc24/viewer/c4f8a3#c.-tips%3A-macos%E3%81%A7%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88%E3%81%8C%E6%88%90%E5%8A%9F%E3%81%97%E3%81%AA%E3%81%84%E6%99%82%E3%81%AE%E5%AF%BE%E5%87%A6%E6%B3%95