とりあえずVisual Studio CodeでLaTeXを書く（ローカルでlatexmk）

[2020/04/12編集]
以前はsettings.jsonにコンパイルコマンドを一とおり書く内容でしたが、**latexmk**を使う方法に書き換えました。

# はじめに
私の周辺で、Windows PCの細かいところまでは不慣れでLaTeX初めての人が、**とりあえず**Visual Studio Code (VSCode)でLaTeXを書けるようになるまでの手順を記します。

# 関連記事
https://qiita.com/ksg/items/5597fb9e49cdb313eae0

上記の関連記事との主な違いは以下です。

- TeX Liveのインストール方法を、ISOファイルの一括ダウンロードにする
    - （個人的な好みで）
- settings.jsonの設定を、latexmkを使うようにする
- settings.jsonをワークスペース単位で設定する
    - 作る文章によってLaTeXのコンパイル方法を変えなきゃいけないことがあり、その場合はsetting.jsonを微修正&latexmkを大幅修正したほうがトータルで楽そうなので
    - いちばん下の補足1に絡んで
- **u**platexを使用する
    - （比較的新しい方法なので。uplatex以外についてはいちばん下の補足2を参照。）


# 想定環境
- Windows 10 1909
    - ファイルの**拡張子を表示**する設定になっているものとします（ https://121ware.com/qasearch/1007/app/servlet/relatedqa?QID=017779 ）
- TeX Live 2020 (20200406)
    - TeX Liveではなく、（TeXインストーラ 3などを利用して）Win32TeXをインストールした場合、latexmkを利用するには別途Perlインタプリタが必要だそうです（参考： https://texwiki.texjp.org/?Latexmk ）
- Visual Studio Code 1.44.0 (user setup)
    - Pythonプログラミングなどを行う用途として、すでにインストール済みで、日本語化されているものとします。
        - （VSCode + Pythonについては例えば https://qiita.com/surei/items/9f25d7efa7c67d55d98f が参考になります。）
    - 以下、インストールの際の**「追加タスクの選択」で、全部に☑を入れている**前提でお話をします。
        - LaTeXの場合、いくつかのファイル（.tex, .bib, 画像など）を用意したり、最終的にPDFができるまでに中間ファイルが吐かれたりするので、1つの文章は1つのフォルダー（ディレクトリ）単位（VSCodeのことばで言うと**ワークスペース**単位）で管理したほうがよいです。なので、特に「エクスプローラーのディレクトリ コンテキスト メニューに[Code で開く] アクションを追加する」にはチェックを入れることをお勧めします。これは、対象とするフォルダを右クリックで指定してVSCodeで開くことができるようにするというものです。
- LaTeX Workshop 8.8.0  

# 手順
## TeX Liveをダウンロード&インストール
### ダウンロード
全部入りのファイルをごっそりダウンロードします。
https://texwiki.texjp.org/?TeX%20Live%2FWindows
「Acquiring TeX Live as an ISO image」 → 「download from a nearby CTAN mirror」 → 「texlive2020-20200406.iso」
（※ 3.7GBほどあるので、しばらくお待ちください。）


### インストール
「texlive2020-20200406.iso」をダブルクリック → 「install-tl-windows.bat」をダブルクリック → そのままポチポチ
（※ インストールに時間がかかるので、しばらくお待ちください。）
（インストールが終わったら、ISOファイルは削除してもよいです。が、ISOファイルをダブルクリックしたときに、そのファイルがD:とかE:などのドライブとしてマウントされているので、「PC」フォルダーで該当ドライブを右クリックして「取り出し(J)」をクリックしてからであれば、ISOファイルを削除できます。または、PCを再起動すれば、取り出しの作業なしにISOファイルを削除できるはずです。）

## LaTeX WorkShopのインストール
VSCodeを立ち上げ → 拡張機能のアイコン（左はしにある□が4つのアイコン）をクリック → 「latex」と打つ → 「LaTeX WorkShop」の「インストール」をクリック → インストールが終わったらVSCodeをいったん「×」で閉じる

## LaTeX文章の作成
### 文章フォルダー（ワークスペース）の作成
1. これから中にLaTeX文章を作っていくフォルダーを作成
1. フォルダーを右クリック → 「Code で開く」

ここで開いたフォルダー = 今回の作業の対象となるVSCodeの**ワークスペース**の**ルートフォルダー**となります。

### (ワークスペースのルートフォルダー)/.vscode/setting.jsonの生成と初期設定
1. https://blog-and-destroy.com/25199 を参考に、歯車アイコン → 設定 → **ワークスペース** → 右上のアイコンをクリック（→ ` (ワークスペースのルートフォルダー)/.vscode/setting.json`が生成されます）
    - 設定をクリックしたあと、デフォルトでは「ユーザー」が選択されているので、「ワークスペース」をクリックするのを忘れないでください。
1. `settings.json`に最初から書いてある`{}`を消して、以下をコピペ

```
{
    "latex-workshop.latex.tools": 
    [
        {
            "name": "latexmk", 
            "command": "latexmk", 
            "args": 
            [
                "-pdfdvi", 
                "%DOC%", 
            ],
        },
    ],
    "latex-workshop.latex.recipes": 
    [
        {
            "name": "latexmk", 
            "tools": 
            [
                "latexmk", 
            ]
        },
    ],
    "latex-workshop.latex.clean.fileTypes": 
    [
        "*.aux", "*.bbl", "*.blg", "*.idx", "*.ind", "*.lof", "*.lot", "*.out", "*.toc", "*.acn", "*.acr", "*.alg", 
        "*.glg", "*.glo", "*.gls", "*.ist", "*.fls", "*.log", "*.fdb_latexmk", "*.synctex.gz", 
        "_minted*", "*.nav", "*.snm", "*.vrb", 
    ],
    "latex-workshop.latex.autoClean.run": "onFailed", 
    "latex-workshop.latex.autoBuild.run": "onFileChange", 
    "latex-workshop.synctex.afterBuild.enabled": true, 
    "latex-workshop.view.pdf.viewer": "tab", 
}

```

→ 「ファイル(F)」 → 「保存　　Ctrl+S」


###  (ワークスペースのルートフォルダー)/.latexmkrcの作成
1. 「ファイル(F)」 → 「新規ファイル　　Ctrl+N」をクリック
2. 表示された未保存の空のファイル（`Untitled-1`などといった名前で表示される）に、以下をコピペ

```
#!/usr/bin/env perl
$latex                       = 'uplatex -synctex=1 -halt-on-error -interaction=nonstopmode -file-line-error';
$latex_silent                = 'uplatex -synctex=1 -halt-on-error -interaction=nonstopmode -file-line-error';
$bibtex                      = 'upbibtex';
$dvipdf                      = 'dvipdfmx %O -o %D %S';
$max_repeat                  = 6;
$pdf_mode                    = 3;
$pvc_view_file_via_temporary = 0;

```

→ 「ファイル(F)」 → 「保存　　Ctrl+S」 → `.vscode`フォルダー**から、ワークスペースのルートフォルダーに移動** → ファイルの種類(T)を「**すべてのファイル (\*.\*)**」 → ファイル名(N)を`.latexmkrc`にして保存


### 文章の作成とコンパイル
1. 「ファイル(F)」 → 「新規ファイル　　Ctrl+N」をクリック
2. LaTeXの文章（例えば以下）を書く

```
\documentclass[uplatex, dvipdfmx]{jsarticle}
\begin{document}
数式をだしてみます：$Ax = b$。
\end{document}

```

→ 「ファイル(F)」 → 「保存　　Ctrl+S」 → ワークスペースのルートフォルダーが選択されているか確認し、選択されていなければルートフォルダーに移動 → ファイルの種類(T)を「LaTeX (\*.tex;\*.ltx;\*.ctx)」 → ファイル名(N)を`(好きなファイル名).tex`にして保存


あとは、少し編集して保存するたびに、ワークスペースのルートフォルダーにPDFが生成されるはずです。VSCodeの右上のほうにある虫眼鏡のアイコンをクリックすると、VSCode内のPDFビューワーが起動して、生成されたPDFファイルが見られます。


# 補足1：参考文献アウトプットの細かい調整
論文誌や学会によっては、参考文献の書式を指定し、参考文献スタイルファイル（`～.bst`）を提供しているところがあります。が、提供された参考文献スタイルファイルを使ってコンパイルしても、細かいところで**指定の書式どおりの出力が得られない**場合があります。
まあこれは提供側の問題なのですが、自分で直すとしたら、以下の手順でできます。

- まずは通常どおり、以下のように.bstを使ってコンパイルする

```
\bibliographystyle{～.bst}
\bibliography{./～～.bib}
```

- 作成された`～～.bbl`ファイルを、サブフォルダーに移動する
- `～～.bbl`ファイルを編集する
- 上記の`\biblio～`の2行をコメントアウトし、代わりに以下を書いてコンパイルする

```
\input{./(サブフォルダー名)/～～.bbl}
```

※ なぜ.bblファイルをサブフォルダーに移動しているかというと、settings.jsonで、コンパイルに失敗した場合はワークスペースのルートフォルダーにある.bblファイルを削除する設定にしているからです。

なお、settings.jsonに、latexmkではなくuplatex → upbibtex → uplatex → uplatexというコマンドの流れを書くやり方だと、このような手順で参考文献を微修正する際にsettings.jsonを書き換える必要がでてくると思いますす。そういう理由もあって、latexmkをお勧めしています。


余談ですが、.bstファイルをカスタマイズするのは、（少なくとも私には）難易度が高いので、お勧めしません。文法が逆ポーランド記法のようです。代わりに、↓の「jecon.bst」をカスタマイズするという手段があります。
http://shirotakeda.org/ja/tex-ja/jecon-ja.html
（私もお世話になりました。ありがたいです。）

# 補足2：uplatex以外の使用
上記のsettings.jsonと.latexmkrcの設定に基づく`uplatex`でのコンパイルがうまくいかない場合があります。以下、考えられるケースと、対処の方向性はこうなんじゃないかなという推測をメモします。

- 国際的な論文誌・学会のスタイル｜`pdflatex`使用が前提？
    - `pdflatex`は.texから（.dviを中間ファイルとして吐かずに）PDFを直接生成するので、settings.jsonの`-pdfdvi`あたりのオプションの記述の変更が必要？
    - .latexmkrcも、`pdflatex`を使うように記述の変更が必要？
    - .texファイルで、\documentclassから`uplatex, dvipdfmx`を削除

- 日本の（過去との互換性を考えた）論文誌・学会のスタイル｜`platex`が前提？
    - .latexmkrcで、`platex`を使うように記述の変更が必要？
    - .texファイルで、\documentclassから`uplatex`を削除

https://texwiki.texjp.org/?Latexmk がたいへん参考になります。最初からこのページのとおりに設定ファイルを記述しとけばよいのに…という話もありますが、この記事は不慣れな人が**とりあえず**VSCodeでLaTeXをコンパイルできるようになるのが目標なので、設定ファイルの記述もできるだけ少ないほうがよいと思いました。

# 感想
2020/04/12に記事をまとめ直してみましたが、相変わらずLaTeXの環境構築は敷居が高いですね。もっと簡単な方法があれば指摘ください。
クラウドサービス上で書ける(La)TeXもあるんですが、細かい設定ができないので、やはりローカルにイチから環境構築が必よ…あっ今はDockerがあるのか……