Docker+VS CodeでLaTeX環境構築 (latexmkrc依存版)

# はじめに

* この記事ではVisual Studio Code (以下VS Code)でLaTeX環境をサクっと作ります。
* 参考にもありますが、過去にも同様の記事はあります。が、本記事執筆時点 (2020年8月) ではlatexmkrcを使えば特に苦労なく設定できることから、新しく記事を起こしました。
    * 過去記事を執筆された方はこの設定とは異なることにチャレンジしているのかもしれません。どなたか違いを教えて下さい！
* EmacsからVS Codeに乗り換えたばかりのVS Code初心者の説明であるため、VS Code初心者に優しい記事 (になってるはず) です。
    * しかし、間違いがあるかもしません。VS Code玄人の方々、何か間違いがあればぜひご指摘ください。

# 検証環境

筆者の環境は以下の通りです。

* macOS Catalina 10.15.6
* Docker version 19.03.12, build 48a66213fe
* VS Code Version 1.48.1, commit 3dd905
* LaTeX Workshop 8.11.1
* docker image: pman0214/alpine-texlive-ja-epspdf:2020a

(Aug 23, 2020追記)

以下の環境でも動作しました。
* Windows 10 

# 前提

Docker及びVS Codeはインストール済みであるとします。

# 手順

## Step1: dockerイメージの取得

`paperist/alpine-texlive-ja`を使用する方が多いようですが、筆者はいまだにEPS画像を使うことも多いので上記にghostscriptを追加した[拙作のイメージ](https://hub.docker.com/r/pman0214/alpine-texlive-ja-epspdf)を利用します。

```bash
$ docker pull pman0214/alpine-texlive-ja-epspdf
```

## Step2: LaTeX Workshopの取得

VS Codeの拡張である[LaTeX Workshop](https://marketplace.visualstudio.com/items?itemName=James-Yu.latex-workshop)を取得します。

VS Codeを起動し、左側のExtensionsタブ (あるいは`Command+Shift+x`) から「LaTeX Workshop」を検索してインストールします。

## Step3: LaTeX Workshopの設定

VS Code上で`Command + ,`して設定を開き、右上のボタンを押して`settings.json`を開きます。
![vscode_settings.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638850/163cf3b0-cebd-74c6-d5dc-0b8adb2985f9.png)

以下の設定を追加します。
参考に示しているQiita記事では色々な設定をしていますが、docker上のLaTeXを使用するだけなら後ほど示す`latexmkrc`ファイルさえ用意すればrecipeを追加する必要はありません。

```settings.json
    "latex-workshop.latex.recipe.default": "latexmk (latexmkrc)",
    "latex-workshop.docker.enabled": true,
    "latex-workshop.docker.image.latex": "pman0214/alpine-texlive-ja-epspdf",
    "latex-workshop.latex.autoBuild.run": "onFileChange",
```

まだ`settings.json`に何も書いていなかった場合には以下のようになるはずです。

```settings.json
{
    "latex-workshop.latex.recipe.default": "latexmk (latexmkrc)",
    "latex-workshop.docker.enabled": true,
    "latex-workshop.docker.image.latex": "pman0214/alpine-texlive-ja-epspdf",
    "latex-workshop.latex.autoBuild.run": "onFileChange",
}
```

各設定を簡単に説明しますと以下の通りです。

* `latex-workshop.latex.recipe.default`でコンパイル (正確にはタイプセット？) に使うrecipeを指定します。
    ここではLaTeX Workshopインストール時にデフォルトで存在するrecipeを指定しています。
* `latex-workshop.docker.enabled`と`latex-workshop.docker.image.latex`は、docker上のlatexを使う場合の設定です。`latex-workshop.docker.image.latex`に使用するイメージ名を指定します。
    * これらの設定の詳細は[LaTeX Workshopのドキュメント](https://github.com/James-Yu/LaTeX-Workshop/wiki/Install#using-docker)を参照してください。
* `latex-workshop.latex.autoBuild.run`ではファイルを保存したときにコンパイルする設定をしています。こちらはお好みで。

# テスト

このVS Code LaTeX環境では`latexmkrc`ファイルの作成はほぼ必須です。
日本語texと英語texでそれぞれ異なる設定をするので分けてテストします。

## 日本語texのテスト

適当なディレクトリを作り、`latexmkrc`ファイルを作ります。
なお、以下はplatex+dvipdfmxを使っている前提の設定になっています。uplatexを使っている人などは適宜書き換えてください。

以下では`/tmp/textest`で作業する例を示しています。

```bash
$ mkdir /tmp/textest
$ cd !$
$ touch latexmkrc
$ code !$
```

```text:latexmkrc
$latex = 'platex';
$bibtex = 'pbibtex';
$dvipdf = 'dvipdfmx %O -o %D %S';
$makeindex = 'mendex %O -o %D %S';
$pdf_mode = 3;
$ENV{TZ} = 'Asia/Tokyo';
$ENV{OPENTYPEFONTS} = '/usr/share/fonts//:';
$ENV{TTFONTS} = '/usr/share/fonts//:';
```

**(2021/10/07追記 ここから)**
synctexを使ってvscode内のtexソースとpdfの間でカーソルを同期したい人は、 `$latex` は　`$latex = 'platex -synctex=1';` などとしましょう。

↓の方の英語版では `$latex` がないため、追加しましょう。

```text:latexmkrc英語版追記内容
$latex = 'latex -synctex=1';
$pdflatex = 'pdflatex -synctex=1';
```

**(2021/10/07追記 ここまで)**



つづいてtexファイルを作成します。
ファイル名は何でもよいですが、ここでは`main.tex`であるものとします。

```bash
$ touch main.tex
$ code !$
```

```main.tex
\documentclass{jsarticle}
\begin{document}
テストです．
\end{document}
```

VS Codeで`main.tex`を開いた状態で、`Command + Option + b`を押し、コンパイルしてみます。
VS Code下部のステータスバー (呼び名は違うかも・・・) に`Build`が表示され、終了すれば`Build`の表示が消えます。

コンパイルに成功したのであれば、`Command + Option + v`を押すとPDFファイルを閲覧できます。

上述の設定のように、`"latex-workshop.latex.autoBuild.run": "onFileChange"`としている場合は、一度コンパイルした後はファイルを保存するたびに自動的にコンパイルされます。

## 英語texのテスト

手順は日本語texのときと同様です。
`latexmkrc`ファイルは必須ではありませんが、筆者は必ず作成するようにしています。

```bash
$ mkdir /tmp/etextest
$ cd !$
$ touch latexmkrc
$ code !$
```

```text:latexmkrc
$pdf_mode = 1;
$ENV{TZ} = 'Asia/Tokyo';
$ENV{OPENTYPEFONTS} = '/usr/share/fonts//:';
$ENV{TTFONTS} = '/usr/share/fonts//:';
```

```bash
$ touch main.tex
$ code !$
```

```main.tex
\documentclass{article}
\begin{document}
Let's use \LaTeX.
\end{document}
```

## コンパイルできないとき

左側のTeXタブからCOMMANDS > View Log messages > View LaTeX compiler logとたどってログを確認し、問題を解決しましょう。

コンパイルエラーになる場合以外にも、コンパイル時間がやけに長いときは途中で止まっていることがあります。上述の例であれば長くても1秒ほどでコンパイルが終わるはずです。やけに時間がかかっているな、と思う場合はログを確認してみましょう。

# おわりに

VS Codeでlatex on dockerを使う環境をQiitaの記事を参考にして構築していましたが、ドキュメントを見たらきちんと書いてありました。
ドキュメントの確認、大切です。
筆者はPDFビューアとしてSkimを利用していますが、[Skim使用時の設定例](https://github.com/James-Yu/LaTeX-Workshop/wiki/View#skim)もドキュメントに書いてありました (公式にはサポートされていないとドキュメントに書いてありますが) 。

# 参考
* [[備忘録] VSCodeでLaTeXを保存時に自動でコンパイルする方法](https://qiita.com/karubi-krb/items/102b6ffe14283f86533a)
* [Docker+VSCodeで保存時に自動でコンパイルされるLatex環境を作る話](https://qiita.com/maitaken/items/139f626bc8d895f2cc69)
* [LaTeX-Workshop Wiki > Installation and basic settings > Using Docker](https://github.com/James-Yu/LaTeX-Workshop/wiki/Install#using-docker)