LaTeX Workshop をもう少し使いこなす

# LaTeX Workshop をもう少し使いこなす

:::note info
[LaTeX Workshop | James Yu](https://marketplace.visualstudio.com/items?itemName=James-Yu.latex-workshop)
投稿時; ver.8.13.2（2020/11 現在）、最終更新時; **ver.8.28.0**
:::

本記事では LaTeX Workshop をもう少し使いこなせるようになりたい。
スニペットやコマンドをいくつか紹介しておく。

以下の 5 つの項目とその分枝で構成した。

- [\# スニペット](#-スニペット)
- [\# 編集コマンド](#-編集コマンド)
- [\# タイプセットとビューワ](#-タイプセットとビューワ)
- [\# Format と Lint](#-format-と-lint)

<!-- - [\# シンタックスハイライトを変更する](#-シンタックスハイライトを変更する) -->

本記事ではこれらの機能が VSCode からデフォルトで提供されているものと LaTeX Workshop から提供されているものが混在している。場合によっては注意が必要になる。

# ○ スニペット

スニペットを紹介しておきたい。これらは LaTeX Workshop から提供されているデフォルトのもののみに留めている。知っておいた方がすべて打ち込むよりも平易で楽になるだろう。

- [\# ギリシャ文字や数学記号](#-ギリシャ文字や数学記号)
- [\# 章立て](#-章立て)
- [\# 環境](#-環境)

公式 Wiki に詳細に記載されていないので省略しているが、TikZ に関するスニペットもある。スニペットパネルから閲覧することが出来る。

## ■ ギリシャ文字や数学記号

ギリシャ文字、括弧や `\frac` 等の数学記号、フォントコマンド等が提供されている。

以下の Gif では `@a` で `\alpha`, `@/` で `\frac`, `@I` で `\int` を出力する様子となっている。

> <img src = "https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/greek%20letter.gif" width = "30%" alt = "greek"></img> <img src = "https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/frac.gif" width = "30%" alt = "frac"></img> <img src = "https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/int.gif" width = "30%" alt = "int"></img>
> > *cf*. https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/greek%20letter.gif
> > *cf*. https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/frac.gif
> > *cf*. https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/int.gif

これらのスニペットに関しては、ここですべてを書き起こすよりも公式 Wiki を見た方が良いだろう。（すべて書き下すのが面倒というのもある）

> [Snippets # Inserting greek letters | James-Yu / LaTeX-Workshop Wiki - GitHub](https://github.com/James-Yu/LaTeX-Workshop/wiki/Snippets#inserting-greek-letters)

また、これらのスニペットを覚えていなくても、スニペット一覧パネルから打つことも可能。

## ■ 章立て

`S**`+`Tab` とすることで `\section{}` 等を生成することが出来る。

| スニペット | 章立て        |
| :--------: | :------------ |
|   `SPA`    | part          |
|   `SCH`    | chapter       |
|   `SSE`    | section       |
|   `SSS`    | subsection    |
|   `SS2`    | subsubsection |
|   `SPG`    | paragraph     |
|   `SSP`    | subparagraph  |

たまにしか使わないが、ちょっと覚えていれば少しだけ楽かもしれない。

## ■ 環境

公式ドキュメントでは以下の折りたたみのようなスニペットが紹介されている。が、すこし足りないような気もする。

> ![bse](https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/BSAL%20snippet.gif)
> > *cf*. https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/BSAL%20snippet.gif

<details>
<summary> デフォルトスニペット（折りたたみ）</summary>
<div>

いくつかの環境のスニペットは定義されている。
数式環境では `B**` と `*` 付き数式環境の `BS**` が用意されている。

| スニペット | 数式環境 | スニペット | `*` 付き数式環境 |
| :--------- | :------- | :--------: | :--------------- |
| `BEQ`      | equation |   `BSEQ`   | equation\*       |
| `BAL`      | align    |   `BSAL`   | align\*          |
| `BGA`      | gather   |   `BSGA`   | gather\*         |
| `BMU`      | multline |   `BSMU`   | multline\*       |
| `BSPL`     | split    |     -      | -                |
| `BCAS`     | cases    |     -      | -                |

これ以外にも itemize 環境や enumerate 環境等のスニペットも提供されている。

| スニペット | その他環境 |
| :--------- | :--------- |
| `BIT`      | itemize    |
| `BEN`      | enumerate  |
| `BFR`      | frame      |
| `BFI`      | figure     |

</div>
</details>

実は、equation 環境を `\equation` としても `\begin{equation}~\end{equation}` を出すことが出来る。
どの環境までをサポートしているのか分からなかったが、ある程度はこのようにすることでもスニペットとして機能する。

あるいは、以下のような編集も可能になっている。

1. 文字列を選択して上から `\equation` と打ち込む

    > ![environment](https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/surround-envname.gif)
    > > *cf*. https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/surround-envname.gif

2. 文字列を選択して上から `\begin` と打ち込み、`\begin` と `\end` にマルチカーソルが置かれるので、そこに `equation` を打ち込む

    > ![environment](https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/surround-beginend.gif)
    > > *cf*. https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/surround-beginend.gif

2 つ目の方法はデフォルトのスニペットに関わらず環境名を打ち込むことが出来るため少しだけ汎用性が高いと思われる。

# ○ 編集コマンド

スニペットの他にもコマンドやキーボードショートカットを利用することで編集が楽になる。特に、デフォルトでスニペットが使用できないような環境の場合には、ここで紹介するコマンドを使用することで容易になるだろう。

- [\# 章立て / 括弧で囲う](#-章立て--括弧-で囲う)
- [\# 全体の章立てを変更する](#-全体の章立てを変更する)
- [\# 環境で囲う](#-環境で囲う)
- [\# 環境を閉じる](#-環境を閉じる)
- [\# 環境名を変更する](#-環境名を変更する)
- [\# 自作スニペットのキーボードショートカット](#-自作スニペットのキーボードショートカット)
- [\# 文書を折りたたむ](#-文書を折りたたむ)

<!-- - [\# まとめてコメントアウトする](#-まとめてコメントアウトする) -->

今回は簡単にするため、ショートカットとして keybindings.json に登録しておきたい。

<details>
<summary> 環境まわりの keybindings（折りたたみ）</summary>
<div>

以下で紹介している環境まわりのキーボードショートカットをまとめておく。

```jsonc
  {
      "key": "ctrl+alt+e",
      "command": "latex-workshop.close-env",
      "when": "editorLangId == latex",
  },
  {
      "key": "ctrl+alt+w",
      "command": "latex-workshop.wrap-env",
      "when": "editorLangId == latex",
  },
  {
      "key": "alt+s",
      "command": "latex-workshop.select-envname",
      "when": "editorLangId == latex",
  },
```

</div>
</details>

## ■ 章立て / 括弧で囲う

章立てコマンドや括弧等で選択した文字列を囲いたい。
このような際には `latex-workshop.surround` コマンドを使おう。このコマンドはデフォルトで `Ctrl+L, Ctrl+W` で定義されている。

> ![surround](https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/wrap.gif)
> > *cf*. https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/wrap.gif

文字列を選択して `Ctrl+L, Ctrl+W` を押下するとコマンドパレットが表示される。ここに **section** と打って `Enter` すれば `\section` で囲われる。
あるいは、**leftright** とすれば、`\left( \right)` で囲われる。

どのコマンドまでサポートされているのか明瞭ではなかったが、無くて困ることはない程度にはサポートされている。

2 回キーを押下する必要があることとキーそのものを覚えている必要がある等を思うと少し面倒。そのため、文字列を選択してその上から **section** と打ってしまっても同じ結果を得る。

> ![alt surround](https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/wrap2.gif)
> > *cf*. https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/wrap2.gif

## ■ 全体の章立てを変更する

ドキュメント全体の章立てを section から chapter に 1 つ上げるなどの操作を 1 回の操作で可能になる。

| Keybindings  | Description              |
| :----------: | :----------------------- |
| `Ctrl+Alt+[` | 全体の章立てを一つ上げる |
| `Ctrl+Alt+]` | 全体の章立てを一つ下げる |

## ■ 環境で囲う

`latex-workshop.wrap-env` コマンドから行う。
選択した部分を `\begin{}` と `\end{}` で囲うことが出来る。`{}` 内には一気に環境名を打つことが出来ておもしろい。

> ![wrap environment](https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/surround-env.gif)
> > *cf*. https://github.com/James-Yu/LaTeX-Workshop/raw/master/demo_media/surround-env.gif

これを新たなショートカットキーとして定義しておいても良いだろう。

```jsonc
  {
      "key": "ctrl+alt+w",
      "command": "latex-workshop.wrap-env",
      "when": "editorLangId == latex",
  },
```

これまで数式環境を打ってから数式を作成していたけれども、数式を作成してから環境で囲っても簡単に生成することが出来る。

## ■ 環境を閉じる

基本的な環境は `BEQ` などとすれば `\begin` から `\end` まで自動的に出してくれるが、自作環境ではこのようにすることが出来ない。

自動的に環境を閉じる (`\begin{hogehoge}` に対して `\end{hogehoge}` を自動的に生成する) ショートカットキーを作成しておく。
これには `"~.close-env"` コマンドのショートカットキーを定義しておけば良い。

```jsonc
  {
      "key": "ctrl+alt+e",
      "command": "latex-workshop.close-env",
      "when": "editorLangId == latex",
  },
```

`Ctrl+Alt+E` を押下することで自動的に環境を閉じることが出来る。

## ■ 環境名を変更する

`latex-workshop.select-envname` コマンドを利用する。
すでにある環境名を書き変えることが出来る。`~.wrap-env` と同様に一気に環境名を変更することが出来る。

カーソルを `\end{..` の部分に合わせてコマンドを実行すると `\begin` と `\end` の括弧内にマルチカーソルが置かれる。
これもショートカットキーを設定しておくと簡単だろう。

```jsonc
  {
      "key": "alt+s",
      "command": "latex-workshop.select-envname",
      "when": "editorLangId == latex",
  },
```

## ■ 自作スニペットのキーボードショートカット

自作スニペットをキーボードショートカットから呼び出すようにしてみたい。また、このショートカットによって選択した文字を囲うように作成したい。[^snippetshortcut]

[^snippetshortcut]: この自作スニペットによるキーボードショートカットの作成はどの言語でも作成することが出来る。他の言語でも応用すると良いだろう。

以下の公式を参照すると良いだろう。

> [\# Snippet syntax \- Snippets in Visual Studio Code](https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax)

基本構文は以下のようになっている。

```jsonc
  {
  // 1st basic syntax
    "key": "<keybindings>",
    "command": "editor.action.insertSnippet",
    "args": {
      "snippet": "<snippet>"
    },
    "when": "editorLangId == latex",
  },
  {
  // 2nd basic syntax
    "key": "<keybindings>",
    "command": "editor.action.insertSnippet",
    "args": {//
      "langId": "latex",
      "name": "<snippet_name>",
    },
    "when": "editorLangId == latex",
  },
```

1 つ目の構文には `"args"` に `"snippet"` を直接挿入している。2 つ目の構文には `"args"` に `"langId"` と `"name"` が含まれている。`"langId"` を `"latex"` としておくことで Snippets の latex.json を呼び出している。また、`"name"` ではスニペット名を挿入することで特定のスニペットをキーボードショートカットから呼ぶことが出来る。

以下では、具体例として行内数式とベクトルのスニペットショートカットを紹介しておきたい。同じようにして、スニペットとして登録していたものをショートカットに切り替えても良いだろう。

> > **§** **行内数式**

`$` で囲うだけだが、これをキーボードショートカットから呼び出せるようにしてみたい。

```jsonc
  {
      "key": "ctrl+alt+m",
      "command": "editor.action.insertSnippet",
      "args":{
          "snippet": "\\$ ${1:TM_SELECTED_TEXT} \\$$0",
          // "snippet": "\\( ${1:TM_SELECTED_TEXT} \\)$0",
      },
      "when": "editorLangId == latex",
  },
```

本文に生成される `$` は `\\$` となっている。

`$TM_SELECTED_TEXT` によって選択された文字を入れられるようにしている。文字列を選択して `Ctrl+Alt+M` すれば `$ hogehoge $` とすることが出来る。

> > **§** **ベクトル**

同様にしてベクトルにもキーボードショートカットを作成しておこう。

ここでは、ベクトルは `\vect` として LaTeX で定義しているものとする。

```jsonc
  {
      "key": "ctrl+b",
      "command": "editor.action.insertSnippet",
      "args":{
          "snippet": "\\vect{${1:TM_SELECTED_TEXT}}$0",
      },
      "when": "editorLangId == latex",
  },
```

<details>
<summary> こんなのも作ってみた（折りたたみ）</summary>
<div>

align 環境等で `&=`, `\\` を打つのがちょっと面倒くさいので、`Ctrl+-`, `Ctrl+\` で打てるようにしておこうと。

```jsonc
  {
      "key":"ctrl+-",
      "command":"editor.action.insertSnippet",
      "args":{
          "snippet": "& = ",
      },
      "when": "editorLangId == latex",
  },
  {
      "key":"ctrl+\\",
      "command":"editor.action.insertSnippet",
      "args":{
          "snippet": "  \\\\\\\n",
      },
      "when": "editorLangId == latex",
  },
```

~~どうせなら、`\\` もスニペットとしておいてトグル操作できると楽なのになぁと思うが難しそうだ。~~

使用頻度の高いスニペットであればショートカットにしておいて良いだろうが、使用頻度の低いスニペットは snippets に登録しておこう。（注意喚起）

</div></details>

<!--
\#\# ■ まとめてコメントアウトする

LaTeX では、`%` を用いて各行をコメントアウトしたり、comment パッケージを用いてコメントアウトするなどの方法がある。
パッケージを用いない場合であれば逐次 `%` を行の先頭に挿入することになる。しかし、複数行に挿入する場合には少々面倒になる。一斉にコメントアウトする方法が欲しい。

VSCode デフォルトのショートカットキーとして、選択している行をまとめてコメントアウトするものがある。

| Keybindings      | Description      |              Command              |
| :--------------- | :--------------- | :-------------------------------: |
| `Ctrl+K, Ctrl+C` | 行コメントを追加 |  `editor.action.addCommentLine`   |
| `Ctrl+K, Ctrl+U` | 行コメントを解除 | `editor.action.removeCommentLine` |

これは言語によってコメントアウトの方法を自動的に判定しているようだ。

このショートカットでは、2 回のキーを押下する必要がある。すこし面倒な感じがする。
LaTeX の場合のみで新たなショートカットキーとして上書き定義しておこう。

```jsonc
  {
      "key": "ctrl+5",
      "command": "editor.action.addCommentLine",
      "when": "editorLangId == latex",
  },
  {
      "key": "ctrl+shift+5",
      "command": "editor.action.removeCommentLine",
      "when": "editorLangId == latex",
  },
```

`Shift+5` で `%` を出力するので、`Ctrl+5` では複数行でのコメントアウトが出来るようにする。また、`Ctrl+Shift+5` で取り除くようにしている。

**2020/12/4 追記**
: デフォルトで `Ctrl+/` を使えば同じことが出来る。わざわざ定義していなくても、こちらの方が簡単かもしれない。コマンドは `editor.action.commentLine` から。
-->

## ■ 文書を折りたたむ

VSCode ではコマンドパレットから **Fold All** などとすると `\chapter` などのアウトラインや任意の環境を折りたたんで中身を非表示にすることが出来る。これは、非常に長いドキュメントを編集している際には非常に楽になる機能となっている。

VSCode の設定で以下のようにしておくと良いだろう。行番号の右側に常に `>` や `⌄` が表示されるようになる。

```jsonc
  "editor.folding": true,
  "editor.showFoldingControls": "always",
```

任意の範囲を折りたたみたい場合には以下のようにすると良い。この折りたみの機能はコメントアウトを無視して実行されるため、以下のようにしていても折りたたむことが出来る。

```latex
ここは折りたたまれない
% region
  この部分は
      折りたたむことが出来る
% endregion
ここは折りたたまれない
```

以下の記事も少し参照されたい。

> [LaTeX Workshop でコード折りたたみする \- Gist](https://gist.github.com/Yarakashi-Kikohshi/0e3a5ef6d7d5be6f80a348059652c948)

もしも新しく折りたたみの要素を増やしたい場合には以下のような拡張機能を導入すると良いだろう。

> [zokugun.explicit-folding \- VSCode Marketplace](https://marketplace.visualstudio.com/items?itemName=zokugun.explicit-folding)

# ○ タイプセットとビューワ

タイプセットとビューワに関していくつか設定を変更することでより利用しやすくなるように思われる。

- [\# タイプセットのショートカット](#-タイプセットのショートカット)
- [\# タブビューワを更新する](#-タブビューワを更新する)
- [\# ビューワを毎回指定する](#-ビューワを毎回指定する)
- [\# 補助ファイルの削除方法を変える](#-補助ファイルの削除方法を変える)

## ■ タイプセットのショートカット

タイプセットには `Ctrl+Alt+T` に設定しておいて、recipe を選択して実行するように紹介していた。（[\# タイプセットの実行 LaTeX Workshop を使いこなす \- Qiita](https://qiita.com/Yarakashi_Kikohshi/items/a9357dd469320ffb65a0#-タイプセットの実行) を参照）しかし、この方法ではタイプセットするのにすこし面倒な感じがする。（3 本も指を使うのちょっと面倒だし、毎回選択するのも面倒）
そこで、すこしだけ設定を変えておきたい。

settings.json でデフォルトで `Ctrl+Alt+B` としていたタイプセット内容を変更しておこう。このショートカットは `"~.recipe.default"` によってデフォルトでは `"first"` となっており、レシピの初めの方法を実行するようになっている。
これを最後に使用したレシピを実行するように変更しておこう。

```jsonc
  "latex-workshop.latex.recipe.default": "lastUsed",
```

keybindings.json では、既に定義されているビルドショートカットを上書き定義しておく。

```jsonc
  {
  //  Resettings build shortcut: same shortcut for TeXworks.
  //  This command will execute the last recipe executed.
  //  settings "latex-workshop.recipe.default": "lastUsed" at settings.json.
      "key": "ctrl+t",
      "command": "latex-workshop.build",
      "when": "editorLangId == latex"
  },
```

`Ctrl+T` とした。これは TeXworks と同様のショートカットキーとなっている。TeXstudio 風なら `"key": "f6"` としておけば良いだろう。

settings.json で `"~.recipe.default": "lastUsed"` としているので、最後に実行したレシピを `Ctrl+T` で呼び出すことになっている。

もちろん、`"~.recipes"` のショートカットキーを `Ctrl+T` としても良いが、一発でタイプセットを実行できないので、今回はこのように設定している。

このように上書き定義をしていても、`Ctrl+Alt+B` によってビルドを実行することも出来る。

## ■ タブビューワを更新する

タブビューワを更新することでうま味があるのかいまだに分からないが、更新したいときには以下のようなショートカットキーを作成しておくと良い。

```jsonc
  {
      "key": "ctrl+alt+r",
      "command": "latex-workshop.refresh-viewer",
      "when": "editorLangId == latex",
  },
```

`Ctrl+Alt+R` とした。しかしながら、たまにビューワが更新されないこともあるので、利用価値はある。

## ■ ビューワを毎回指定する

ビューワは settings.json からタブか外部ビューワを指定することが出来る。この指定によって `Ctrl+Alt+V` からビューワを開けることが出来るようになる。

デフォルトの設定では `none` となっており、ビューワを指定してない。
settings.json でビューワの設定をせずに、キーボードショートカットからビューワを開けるようにしよう。

```jsonc
  {
      "key": "ctrl+shift+v",
      "command": "latex-workshop.tab",
      "when": "editorLangId == latex",
  },
  {
      "key": "ctrl+alt+v",
      "command": "latex-workshop.viewExternal",
      "when": "editorLangId == latex",
  },
```

`Ctrl+Shift+V` を押下することで内部ビューワのタブで開き、`Ctrl+Alt+V` で押下することで外部ビューワによって開くようにした。

<!-- (このようにした弊害として、`Ctrl+Alt+V` だけではビューワが開かないことに注意したい) -->

その日の気分でビューワを変えてみては。

<!-- **2021/11/06 追記** -->
<!-- : `Ctrl+Alt+V` のあとに `T` や `E` を入力するとき、日本語入力では全角になってしまい、その度に半角英数に切り替える必要がある。`Ctrl+Alt+V` のあとに `Ctrl+T` や `Ctrl+E` と設定した方が楽かもしれない。 -->

## ■ 補助ファイルの削除方法を変える

以下の記事では LaTeX Workshop で指定された補助ファイルを削除する方法を紹介した。

> [LaTeX Workshop を使いこなす # 補助ファイルを自動的に削除する - Qiita](https://qiita.com/Yarakashi_Kikohshi/items/a9357dd469320ffb65a0#-補助ファイルを自動的に削除する)

ver.8.16.0 以降では、これに加えて外部ツールを利用した削除方法も追加された。外部ツールによる削除方法に変更する方法を紹介したい。
ここでの設定は以下の 3 つとなる。

|        Settings         | Value                                                                                    |
| :---------------------: | :--------------------------------------------------------------------------------------- |
| `~.latex.clean.method`  | <ul><li>`"glob"`: LaTeX Workshop で指定 </li><li>`"cleanCommand"`: 外部ツール </li></ul> |
| `~.latex.clean.command` | 任意の外部ツールコマンド                                                                 |
|  `~.latex.clean.args`   | 任意の外部ツールコマンドの引数                                                           |

latexmk を利用して補助ファイルを削除する場合は以下のようにする。

```jsonc
  "latex-workshop.latex.clean.method": "cleanCommand",
  "latex-workshop.latex.clean.command": "latexmk",
  "latex-workshop.latex.clean.args": [
    "-c",
    "%TEX%"
  ]
```

llmk を利用して補助ファイルを削除する場合には以下のようにする。

```jsonc
  "latex-workshop.latex.clean.method": "cleanCommand",
  "latex-workshop.latex.clean.command": "llmk",
  "latex-workshop.latex.clean.args": [
    "-c",
    "%TEX%"
  ]
```

削除される補助ファイルは各々のツールに依存している。

# ○ Format と Lint

- [\# Formatter](#-formatter)
- [\# Linter](#-linter)

LaTeX でもフォーマットとリントが可能。また、LaTeX Workshop でもこれらに対応している。

LaTeX Workshop では、Formatter は *latexindent* を Linter は *ChkTeX* または *LaCheck* を利用することが出来る。

## ■ Formatter

LaTeX Workshop から設定することが出来る。[latex-formatter][lf-marketplace] をインストールする必要はない。

[lf-marketplace]: https://marketplace.visualstudio.com/items?itemName=nickfode.latex-formatter

> [Format - James\-Yu/LaTeX\-Workshop Wiki](https://github.com/James-Yu/LaTeX-Workshop/wiki/Format)

デフォルトのフォーマッタを LaTeX Workshop に設定しておく。
また、latexindent の引数を設定する。
<!-- ~~デフォルトの設定ではあまり上手く実行できないので変更しておくと良いだろう。~~ -->

```jsonc
  "[latex]": {
    "editor.formatOnSave": true,
    "editor.defaultFormatter": "James-Yu.latex-workshop",
  },
  "latex-workshop.latexindent.path": "latexindent",
  "latex-workshop.latexindent.args": [
    "%TMPFILE%",
    "-c=%DIR%/",
    "-y=defaultIndent: '%INDENT%'"
  ]
```

`"editor.formatOnSave": true` としている場合、保存時にフォーマットが実行される。無効にしたい場合は `false` にしておく。
また、通常のフォーマット実行は `Shift+Alt+F` を押下すれば良い。

もしも latexindent が実行されない場合は `Ctrl+Shift+U` から `LaTeX Workshop` のパネルを開き、エラー状況を確認する。場合によっては Perl が必要になる。（Windows では exe で提供されているので Perl を導入する必要はないはず）

latexindent そのものに関しては以下の記事を参考にしてほしい。使い方とユーザ設定の方法を紹介した。ちょっと長い。

> [latexindent の使い方 \- Gist](https://gist.github.com/Yarakashi-Kikohshi/8c39707f83ba73b3bce73c54638ac594)

あるいは公式ドキュメントを参照しても良いだろう。（こちらは英語）

> [latexindent\.pl documentation - latexindent\.pl 3\.9\.1 documentation](https://latexindentpl.readthedocs.io/en/latest/index.html)

## ■ Linter

Lint には ChkTeX と LaCheck を利用することが出来る。これらを有効にするには、以下の設定を `true` にすれば良い。

```json
  "latex-workshop.linting.chktex.enable": true,
  "latex-workshop.linting.lacheck.enable": true,
```

これらを実行するタイミングは `~.linting.run` で指定することが出来る。以下のいずれかの値を指定する。

|             Value             | Description                                                                         |
| :---------------------------: | :---------------------------------------------------------------------------------- |
| `"onSave"` <br>（デフォルト） | 上書き保存時                                                                        |
|          `"onType"`           | 指定された時間間隔毎 <br> 時間間隔は `"~.linting.delay"` で指定される（500 ミリ秒） |

LaCheck はパスのみを指定でき、ChkTeX ではパスと引数を指定することが出来る。

```jsonc
  "latex-workshop.linting.chktex.exec.path": "chktex",
  "latex-workshop.linting.chktex.exec.args": [
      "-wall",
      "-n22",
      "-n30",
      "-e16",
      "-q"
  ],
  "latex-workshop.linting.lacheck.exec.path": "lacheck",
```

ChkTeX の引数はデフォルトで上のようになっているが、これらに加えて自動的にいくつかの引数が渡されるようだ。これらは Output の LaTeX Workshop から確認することが出来る。

出力形式を指定するオプションの `-f` が引き渡される。(`-f%f:%l:%c:%d:%k:%n:%m`) これらは、Lint の結果をエディタ内に引き渡すため、必要な引数になっている。また、カレントディレクトリに `.chktexrc` ファイルが検出されると自動的に `-l` オプションが有効になる。したがって、`.chktexrc` を使って ChkTeX の設定を変更したい場合にはカレントディレクトリにファイルを置けば良いだろう。

これらの追加的な引数は上の `~.linting.chktex.exec.args` の後ろに続く形で渡される。

<!--
\#\# ■ Linter

ChkTeX を利用することが出来る。ChkTeX を実行させるには `"~.chktex.enabled": true` とすれば良い。（デフォルトでは `false` となっている）

> ![ChkTeX](https://github.com/James-Yu/LaTeX-Workshop/blob/master/demo_media/chktex.gif?raw=true)
> > *cf*. https://github.com/James-Yu/LaTeX-Workshop/blob/master/demo_media/chktex.gif?raw=true

また、これを実行するタイミングは `"~.chktex.run"` で指定することが出来る。以下のいずれかの値を指定することが出来る。

|             Value             | Description                                                                        |
| :---------------------------: | :--------------------------------------------------------------------------------- |
| `"onSave"` <br>（デフォルト） | 上書き保存時                                                                       |
|          `"onType"`           | 指定された時間間隔毎 <br> 時間間隔は `"~.chktex.delay"` で指定される（500 ミリ秒） |

ChkTeX の引数は `"~.chktex.args.active"` と `"~.chktex.args.root"` で指定する。デフォルトでは以下のようになっている。

もしもこのリントの警告が気に入らない場合は、"chktexrc" などと適当に検索すると警告を無くすようにすることが出来る記事を見つけることが出来るので、それを参照すると良いだろう。（他力本願）

```jsonc
  "latex-workshop.chktex.enabled": true,
  "latex-workshop.chktex.run": "onSave",
  "latex-workshop.chktex.delay": 500,
  "latex-workshop.chktex.path": "chktex"
  "latex-workshop.chktex.args.active": [
    "-wall",
    "-n22",
    "-n30",
    "-e16",
    "-q"
  ],
  "latex-workshop.chktex.args.root": [
    "-wall",
    "-n22",
    "-n30",
    "-e16",
    "-q"
  ],
```

ChkTeX の引数にはデフォルトで上のようになっているが、これらに加えて自動的にいくつかの引数が渡されるようだ。これらは Output の LaTeX Workshop から確認することが出来る。

出力形式を指定するオプションの `-f` が引き渡される。(`-f%f:%l:%c:%d:%k:%n:%m`) これらは、Lint の結果をエディタ内に引き渡すため、必要な引数になっているようだ。<br> また、カレントディレクトリに `.chktexrc` ファイルが検出されると自動的に `-l` オプションが有効になる。したがって、設定を変更したい場合にはカレントディレクトリに `.chktexrc` ファイルを置けば良いだろう。

これらの追加的な引数は上の `"~.chktex.args.active"` の後ろに続く形で渡される。

LaTeX の linter には他にも *LaCheck* があるが、以上のような理由から linter を変更することが出来ない。Issue では LaCheck が話題に上がっているので、対応される日が来るかもしれない。

> [Support lacheck \- Issue \#2393 \- James\-Yu/LaTeX\-Workshop](https://github.com/James-Yu/LaTeX-Workshop/issues/2393)
-->

<!--
○ シンタックスハイライトを変更する

LaTeX Workshop から提供されるシンタックスハイライトでは少し気に入らない部分があるように思われる。(というか少しだけあった)
変更する方法があるので、以下の記事にまとめた。もしも気に入らいない部分があれば参考にしてほしい。

> [LaTeX Workshop の Syntax highlight を変更する \- Gist](https://gist.github.com/Yarakashi-Kikohshi/948720cb69d0baafe71e62ec6cb2cb54)

1 つの記事分くらいの分量になってしまっている。

数式環境内のシンタックスハイライトが 1 色なの見づらくないですか?(記事への誘い) -->

# ○ キーボードショートカット一覧

これまでの記事と上のショートカットキーをまとめて一覧にしておく。

|         Keybindings          | Description                                  |
| :--------------------------: | :------------------------------------------- |
|  `Ctrl+Alt+S` <sup>※2</sup>  | スニペットパネルを開く                       |
|         `Ctrl+Alt+E`         | `\end{hoge}` で閉じる                        |
|         `Ctrl+Alt+W`         | `\begin{}` と `\end{}` で囲う                |
|           `Alt+S`            | 環境名を変更する                             |
|    `Ctrl+/` <sup>※</sup>     | コメントアウトのトグル                       |
|  `Shift+Alt+F` <sup>※</sup>  | latexindent を利用して文章を整形             |
|  `Ctrl+Alt+T` <sup>※2</sup>  | recipe を選択してタイプセット                |
|           `Ctrl+T`           | 最後にタイプセットした方法でタイプセットする |
|  `Ctrl+Alt+K` <sup>※2</sup>  | タイプセットを中断する                       |
|  `Ctrl+Alt+V` <sup>※1</sup>  | 既定のビューワを開く                         |
| `Ctrl+Shift+V` <sup>※3</sup> | タブのビューワを開く                         |
|  `Ctrl+Alt+V` <sup>※3</sup>  | 外部のビューワを開く                         |
|         `Ctrl+Alt+R`         | タブビューワを更新する                       |
|  `Ctrl+Alt+J` <sup>※1</sup>  | SyncTeX で Foward-search する                |

※1 : デフォルト
※2 : 前回の記事で紹介済み
※3 : `Ctrl+Alt+V` を使用できないようになる

# 参考

- 公式 Wiki
  - [Snippets | James-Yu / LaTeX-Workshop Wiki - GitHub](https://github.com/James-Yu/LaTeX-Workshop/wiki/Snippets)
  - [Environments | James-Yu / LaTeX-Workshop Wiki - GitHub](https://github.com/James-Yu/LaTeX-Workshop/wiki/Environments)
- [Snippets in Visual Studio Code # Snippet syntax](https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax)

## 関連記事

LaTeX Workshop に関する記事は以下の 5 つがあります。本記事と合わせてご覧ください。

1. **[LaTeX Workshop を使いこなす \- Qiita](https://qiita.com/Yarakashi_Kikohshi/items/a9357dd469320ffb65a0)**

    > LaTeX Workshop を使って TeX ファイルをタイプセットして PDF を作成するまでを紹介します。
2. **[LaTeX Workshop をもう少し使いこなす \- Qiita](https://qiita.com/Yarakashi_Kikohshi/items/1a275f2046b002e398b3)**  ← 本記事 :dog:

    > LaTeX Workshop で利用できるスニペットやコマンドを紹介します。また、他のカスタマイズを考えます。
3. **[LaTeX Workshop をもっと使いこなす \- Qiita](https://qiita.com/Yarakashi_Kikohshi/items/1f2225c7e28aad498998)**

    > LaTeX Workshop の便利な特徴を紹介します。ホバーによる数式や相互参照の確認、インテリセンスによる補完機能などがあります。
4. **[Zotero と LaTeX Workshop で bib ファイルを扱いこなす \- Qiita](https://qiita.com/Yarakashi_Kikohshi/items/8f720643543ba175f7cc)**

    > Zotero から bib ファイルを出力して LaTeX Workshop でフォーマットするする方法を紹介します。
5. **[LaTeX Workshop の数式プレビューを使いこなす - Qiita](https://qiita.com/Yarakashi_Kikohshi/items/4570bba51787e47a03c6)**

    > 数式プレビューをもっと使えるようにカスタマイズします。

# 余談

おもしろい設定があれば、適宜更新するつもりです。

控えめに言っても公式 Wiki の翻訳に過ぎないのではないかと感じているけれど、具体的なキーボードショートカットを追加しておけば創作性あるかなと思います。

かなり改訂された気がする。ヤバい記事が複数含まれるようになったので、楽しんでもらえればと思う。

少し遊んでいたときに latexdiff を recipe に含めてみると上手く動作しなかった。直観的には動作してくれると思ったのに意外だった。もしも latexdiff を動かしたい場合には簡易的な BAT ファイルを作成してこれを実行させると良いだろう。この場合はちゃんと動いた。

# 追記

- 2020/12/4: 軽微修正。「章や括弧で囲う」を追加。「まとめてコメントアウトする」、「ビューワを指定する」を追記。
- 2020/12/25: 自作スニペットのキーボードショートカットを一部追加。
- 2021/06/18: フォーマットとリントについて追加。シンタックスハイライトを変更する記事のリンクを追加。構成の大幅改定。
- 2021/06/20: 公式 Wiki から Gif を引用。軽微修正
- 2021/07/23: 関連記事のリンクを追加。コードの折りたたみの記事について追記。
- 2021/11/06: 軽微修正。
- 2022/07/27: Ver.8.28.0 への対応。