LaTeX Workshopの設定方法 ~コンパイルからプレビューまで~

結構前に書いたものだけど一応投稿しておく

---

最近エディタをVSCodeに変え、拡張機能のLaTeX Workshopをインストールしてみましたがなかなかコンパイルできないので設定をいじってみました。設定の仕方は[公式マニュアル][1]に書いてありますが英語です。

今回はコンパイルしてプレビューまでできればいいので、そこまで書いていこうと思います。

#動作環境
動作環境はこんな感じです。

- macOS Catalina 10.15.3
- Visual Studio Code 1.43.0
- LaTeX Workshop 8.7.2
- TexLive2018

#コンパイルできるようになるまで
とりあえず初期状態でコンパイルが通らない理由はLaTeX Workshopがデフォルトで`latexmk`コマンドを利用してコンパイルしているからみたいです。私がこれまでレポートを書くときは`platex`を使っていたのでこちらを使ってくれるように設定し直します。

##settings.jsonを開く
まずはVSCode上で`command + shift + p`でコマンドパレットを開きます。
<img width="1253" alt="スクリーンショット 2019-05-03 13.53.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378919/6d4265b9-e1dc-fb43-e12c-eb0208e52ad9.png">

次にコマンドパレットに`Preferences: Open Settings (JSON)`と入力して"settings.json"を開きます。
<img width="1253" alt="スクリーンショット 2019-05-03 13.52.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378919/49b66549-0a7f-49bf-dacf-b7bd857c73e9.png">

基本的にVSCodeはこの"settings.json"の１番外側の{}内に設定を記述することで細かなカスタマイズが可能です。今回のLaTeX Workshopの設定もこの"settings.json"に書き込んでいきます。

##レシピとツールの設定
コンパイルできるようにするために、LaTeX Workshopでは「レシピ」と「ツール」という2つの項目を設定します。「レシピ」にはレシピ名とコンパイルに使用するツール名を設定します。「ツール」にはレシピに使用するツール名と実際に使用するコマンド(`latexmk`や`platex`など)、コマンドの引数を設定します。

###レシピの設定
レシピの設定をするためには`latex-workshop.latex.recipes`の値を"settings.json"に記述します。例として`ptex2pdf`を使用する場合、`platex`を実行してdviファイルを作成した後に`dvipdfmx`でpdfファイルを作成する場合の2つを示します。

```json-doc
"latex-workshop.latex.recipes": [
  // platex(ptex2pdf)
  {
    "name": "platex(ptex2pdf)",
    "tools": [
      "ptex2pdf"
    ]
  },

  // platex → dvipdfmx
  {
    "name": "platex → dvipdfmx",
    "tools": [
      "platex",
      "dvipdfmx"
    ]
  }
]
```

- レシピは複数記述することが可能で、複数ある場合は1番最初に記述したレシピがデフォルトで使用されます。上の例の場合、"ptex2pdf"がデフォルトで使用されます。
- "name"フィールドにはレシピ名を記述します。このフィールドは任意に記述できるのでわかりやすい名前にしておくといいです。
- "tools"フィールドには使用するツール名を記述します。次に説明するツールの設定で記述したツールの名前と対応させます。ツールは複数記述することが可能で、複数記述した場合上のツールから順番に実行されます。上の"platex → dvipdfmx"の場合、"platex"を実行した後に"dvipdfmx"が実行されます。

###ツールの設定
ツールの設定をするためには`latex-workshop.latex.tools`の値を"settings.json"に記述します。例として先述のレシピに使用する"ptex2pdf"、"platex"、"dvipdfmx"の3つの場合を示します。

```json-doc
"latex-workshop.latex.tools": [
  // ptex2pdf using platex
  {
    "name": "ptex2pdf",
    "command": "ptex2pdf",
    "args": [
      "-l",
      "-ot '-synctex=1 -file-line-error'",
      "%DOC%.tex"
    ],
    "env": {}
  },

  // platex
  {
    "name": "platex",
    "command": "platex",
    "args": [
      "%DOC%.tex"
    ],
    "env": {}
  },

  // dvipdfmx
  {
    "name": "dvipdfmx",
    "command": "dvipdfmx",
    "args": [
      "%DOC%.dvi"
    ],
    "env": {}
  }
]
```
- "name"フィールドにはツール名を記述します。ツール名は任意に記述することができますがレシピはこのツール名をもとにツールを使用するため、レシピの"tools"で設定した名前と対応させる必要があります。
- "command"フィールドには実際に使用するコマンド名を記述します。ここに記述できるコマンドはターミナルで使用できるコマンドに限られるので実際にターミナルで実行可能かどうか確認しておきましょう。
- "args"フィールドにはコマンドの引数を記述します。
- "args"フィールドに見られる%DOC%のように、LaTeX Workshopではいくつかのプレースホルダーを提供しています。今回の設定において使用頻度が高いと思われるプレースホルダーを次に示します。

|プレースホルダー|置換先|
|:-------|:-------|
|%DOC%|現在開いているLaTeXファイルのパスと拡張子".tex"を抜いたファイル名|
|%DOCFILE%|現在開いているLaTeXファイルの拡張子".tex"を抜いたファイル名|
|%DIR%|現在開いているLaTeXファイルのパス|

#プレビューできるようになるまで
ここまでの設定でコンパイルすることが可能になります。適当なLaTeXファイルを作成し、`ctrl + alt + b`でLaTeXファイルをコンパイルできます。その後、`ctrl + alt + v`で出力されたPDFファイルをプレビューすることができます。しかし私のように`alt`キーが存在せず、うまくコンパイルとプレビューができない方もいるかと思いますのでキーバインドの設定方法も簡単に説明します。

##"keybindings.json"を開く
"settings.json"を開いた時と同様に`command + shift + p`でコマンドパレットを開き、今度は`Preferences: Open Keyboards Shortcuts File`と入力すると"keybindings.json"を開くことができます。この"keybindings.json"に記述することで任意のキーバインドをVSCodeで使用することができるようになります。

###キーバインドの設定
コンパイルとプレビューはそれぞれ`latex-workshop.build`、`latex-workshop.view`コマンドにキーバインドを登録することで実行できます。これら2つの設定を次に示します。

```json-doc:keybindings.json
[
  // latex shortcuts
  // build
  {
    "key": "ctrl+alt+b",
    "command": "latex-workshop.build",
    "when": "resourceLangId == latex"
  },

  // view PDF
  {
    "key": "ctrl+alt+v",
    "command": "latex-workshop.view",
    "when": "resourceLangId == latex"
  }
]
```
- "key"フィールドにはキーバインドに使用したいキーを記述します。`command + k, command + k`で実際にキーを押すことでキーを登録することも可能です。この方法の方が間違いないかもしれません。
- "command"フィールドには実際に実行するコマンドを記述します。今回の場合は先述した`latex-workshop.build`、`latex-workshop.view`をここに入力します。
- "when"フィールドには設定したキーバインドが使用できるタイミングを記述します。今回は"resourceLangId == latex"と記述することでLaTeXファイルを編集している時だけキーバインドが使用できるように設定しました。

#まとめ
私はここまでの設定でLaTeXファイルのコンパイルとプレビューがとりあえずできるようになりました。レシピとツールの内容を書き換えれば他のコマンドでコンパイルすることもできると思います。皆さんの参考になれば幸いです。

[1]:https://github.com/James-Yu/LaTeX-Workshop/wiki