[理系学生向け] VSCodeでLaTeXを書く際の個人的Tipsまとめ （随時更新）

# 目次
[1. はじめに](#1-はじめに)
[2. 環境構築まわり](#2-環境構築まわり)
[3. スニペット・ショートカットキー](#3-スニペット・ショートカットキー)
[4. ChkTexを用いた構文チェック](#4-ChkTexを用いた構文チェック)
[5. 数式あれこれ](#5-数式あれこれ)

# 1. はじめに

本記事はVSCodeでLaTeXを書く際の実用的で細かなTips、もしくは有用な記事へのリンクをまとめておくことを大目的としています。
筆者は2020年の夏あたりからVScodeを用いてLaTeXを用いて、研究ノートや各種論文を執筆している大学院生(2022現在)です。
あくまでも、一学生の個人的なまとめなので、参考になる内容があればラッキー程度の期待感で読んでいただくと幸いです。

現在の環境とLaTeXに関わるExtensionは以下の通り。

[ 環境 ]
- MacBook pro, M1 chip, OS = BigSur 11.2.3

[ Extension ]
- LateX WorkShop (必須)
- LaTeX language support


# 2. 環境構築まわり
Mac環境ではMacTexをダウンロードすることがまず最初のステップです。
各々で好みのビルドレシピはあるとは思いますが、`latexmk`を使用した方法が最も簡単です。
具体的な方法等はリンク先の記事に委ねますが、VScodeは単に編集内容を保存した際に`latexmk`コマンドを用いてビルドし、当該のPDFを表示しているにすぎません。
ですので、まずはターミナル上で、`latexmk -pdfdvi test.tex` として、`latexmk`が正常に動作していることを確認した上で、VScodeの設定を行うことをお勧めします。

コンパイルを実現するために、最低限いじらないといけない場所は、
- `settings.json`(VScode内)
- `~/.latexmkrc` (ローカル環境)

の二つになるかと思います。


[ 参考 ]
- [VSCode で最高の LaTeX 環境を作る](https://qiita.com/rainbartown/items/d7718f12d71e688f3573)
- [VS CodeでTeXを使う方法](https://elecho.hatenablog.com/entry/2017/04/27/175500)
- https://texwiki.texjp.org/?Latexmk

# 3. スニペット・ショートカットキー
VSCodeのようなエディター(エディターではない説もありますが、、、)を用いる最大の目的は作業効率をアップさせることです。その際に、スニペットを用いて入力文字数を減らす努力は最重要となります。

## 3.1 デフォルトのショートカットキー
LaTeX Workshopをインストールしていれば、デフォルトで多くのショートカットキーを使用することができます。( [LaTeX-Workshop/Intellisense](https://github.com/James-Yu/LaTeX-Workshop/wiki/Intellisense#-suggestions) )

例えば、`@a` -> `\alpha`といったギリシャ文字の入力や、
`BEQ` -> `\begin{equation} contents \end{equation}` による環境の補完など、emacsの[YaTeX](http://www.yatex.org/)には劣りますが、ある程度のスニペットは登録されているので、勉強しておくとかなり作業スピードが向上すると思います。

また、VScodeのデフォルトのkeybindingも役に立ちます。
よく使用するものについて、いくつかまとめます。

### コメントアウト
各行ごとにコメントアウト(`Cmd+K Cmd+C`)とコメントアウトの解除(`Cmd+K Cmd+U`)が一括でできます。(Mac以外だと`Cmd` -> `Ctrl`) 
複数行選択して上記の操作を行えば、選択範囲の行が一気にコメントアウト or 解除ができて非常に便利です。

### 一括置換
`Cmd + F` で文字の検索を行えますが、`Cmd + opt + F` (or `Ctrl + Alt + F`) で指定したワードの置換を行えます。`Enter`では一単語ごとの置換が行えますが、`Cmd + Enter`を行うと、同一ファイル内の指定ワードを一括で置換することができます。

### 複数行同時編集
あるワードを選択して`Cmd + D`を行うと、選択箇所の下にあるワードを一つずつ選択し、同時に編集することができます。
また、`Cmd + opt`を押しながら、`↑`か`↓`を選択すると、カーソルを増殖させることができ、複数行を同時に編集することができます。これこそVSCodeの醍醐味ですので、使用したことがない方はぜひ試してみてください。

[ 参考 ]
- [LaTeX-Workshop/Intellisense](https://github.com/James-Yu/LaTeX-Workshop/wiki/Intellisense#-suggestions)
- [LaTeX Workshopをもう少し使いこなす](https://qiita.com/Yarakashi_Kikohshi/items/1a275f2046b002e398b3)
- [VSCodeの便利なショートカットキー](https://qiita.com/12345/items/64f4372fbca041e949d0)
- [テキストエディターの複数行同時編集で仕事がはかどる](https://tech.torico-corp.com/blog/text-editor-multiline-edit/)


## 3.2 自作スニペット
デフォルトのスニペットだけでは作業効率を最大化することはできません。
自分の専門分野等に応じて、よく使用する単語や数式等をスニペットに登録することを強くお勧めします。
[ 手順 ]
1. 左下の設定ボタンから`User snipet`を選択
2. スニペットを作成したい言語を選択 (今回は`latex.json`を選択)
3. スニペットを登録

例えば、画像を貼り付ける際のスニペットを以下のように登録してみましょう
```latex.json
"image_center":{
		"prefix": "@image",
		"body": [
				"\\begin{figure}[htbp$1]",
  				"\t\\begin{center}",
    			"\t\t\\includegraphics[keepaspectratio,scale=0.45]{$2}",
				"\t\\caption{図の説明$3}",
				"\t%\\label{fig1$4}",
  				"\t\\end{center}",
				"\\end{figure}",
				"$0"
		],
		"description": "put figures "
	},
```
簡単に内容を説明します。
`"prefix"` : スニペットを呼び出す際のキーワードです
`"body"` : スニペットの中身です。
`"description"` : このスニペットの説明です (サジェストされる際に参照できる)

LaTeXのコマンドを呼び出す際には、例えば`\begin`など必ずエスケープ記号`\`がついていると思います。
`.json`ファイル内でも`\`はエスケープを行うための記号(例えばタブは`\t`とするなど)に使用されているので、`\`という文字を出力させたいのであればそれをさらにエスケープして`\\`と書く必要があります。
これが、上のサンプルでエスケープ記号`\`が大量出没している理由です。

また、`$1`などは、スニペットを呼んだ際のカーソルの位置の順番を示しています。ですので、上のサンプルでは
スニペットを呼び出し -> `$1` 画像位置を選択(htbp) -> `$2` 画像ファイルを選択 -> `$3` キャプションを入力 -> `$4` ラベルの指定
という順番になります。
**移動する際には`Tab`を押してください。**
`$0`は最終的なカーソルの位置を示していて、上のサンプルでは、キャプションを入力後、`Tab`を押すと`$0`の位置にカーソルが移動するというわけです。

他にも、よく使用する定数 (例えば $k_BT$とか) や先行研究に出てくるドイツ人の名前(例えばäは`\"{a}`と書かなくてはいけないので)などの固有名詞を登録しておくと便利だと思います。

---
また、環境自体も自作のショートカットとして登録することが可能です。
[ 手順 ]
1. 左下の設定ボタンから`Keyboard shortcut`を選択
2. 右上の![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586286/1ff137bd-63e9-8a5b-594f-2312ae296dda.png)ボタンから`keybindings.json`を呼び出し
3. Keybindingを設定

例えば、インライン数式のコマンドを以下のように設定することができます。
```keybindings.json
{
    "key":"ctrl+m",
    "command":"editor.action.insertSnippet",
    "args":{
		"snippet": "\\( ${TM_SELECTED_TEXT}$1 \\)$0",
    },
    "when": "editorTextFocus && editorLangId == 'latex'"
}
```
`snippet`についてですが、[LaTeX Workshopをもう少し使いこなす](https://qiita.com/Yarakashi_Kikohshi/items/1a275f2046b002e398b3) では、`${1:TM_SELECTED_TEXT}`として書かれていましたが、私の環境ではそれではうまく動作しなかったため、少し修正を加えました。
ここで、`${TM_SELECTED_TEXT}`は「選択した文字列 もしくは 何も入力しない」ことを示す環境変数です。
使用可能な環境変数は[公式HP](https://code.visualstudio.com/docs/editor/userdefinedsnippets#_snippet-syntax)にまとめられているので、こちらを参考に柔軟なスニペットを作成してみてください。

[ 参考 ]
- [LaTeX-Workshop/Intellisense](https://github.com/James-Yu/LaTeX-Workshop/wiki/Intellisense#-suggestions)
- [LaTeX Workshopをもう少し使いこなす](https://qiita.com/Yarakashi_Kikohshi/items/1a275f2046b002e398b3)
- [VSCodeの便利なショートカットキー](https://qiita.com/12345/items/64f4372fbca041e949d0)

# 4. ChkTexを用いた構文チェック
ChkTexはLaTeXの構文をチェックしてくれるソフトウェアであり、VScodeで使用するには、LaTeX Workshopの設定から`Chktex:Enabled`の欄にチェックを入れる必要があります。
もしくは`settings.json`内に`"latex-workshop.chktex.enabled": true`を記入してください。

ChkTeXをONにすることでより良い構文を書くことが可能になりますが、日本語だと回避できない警告(例えば19番の `19: Use "'" (ASCII 39) instead  of "'" (ASCII 180).`など)や必要のない警告まで大量に出てくるので、そこがマイナスポイントにもなり得ます。
この警告の種類を調整する方法が二つあります。

1. LaTexファイルと同じディレクトリ内に`.chktexrc`を作成し、以下のように必要のない警告指定する。
```.chktexrc
CmdLine
{
    -n19
    -n24
    -n26
}
```
~~2. `LaTeX Workshop`の`Extension settings`から`Chktex` > `Args:Root` にchktexのコンパイルコマンドを追加する。例えば警告の19番を無効にしたければ`-n19`のようにする。~~ -> なぜか効きませんでした

rootにある`~/.chktexrc`を参照するようにどこかでPathを設定できれば便利なんでしょうけど、[公式Wiki](LaTeX-Workshop/wiki/Linters#chktex)の情報によるとやはり1の同一フォルダ内に`.chktexrc`を配置するしかないようです。(rootにある`~/.chktexrc`のハードリンクを作成するのが一番無難でしょうか : `ln ~/.chktexrc latexを書いているディレクトリ `)


[ 参考 ] 
- [vscodeのLaTeX Workshopで「chkTeX」による日本語エラーが頻出する](https://qiita.com/ganyariya/items/c8f02f10f4546900bb68)
- [LaTeX-Workshop/wiki/Linters#chktex](https://github.com/James-Yu/LaTeX-Workshop/wiki/Linters#chktex)


# 5. 数式あれこれ

## 5.1 各種コマンド
- 二重の山括弧($ \langle \langle \cdot \rangle \rangle $)を使用する場合については、 `Mnsymbol`というpackage内の`\llangle \rrangle` を使用します。
ただし、このMnsymbolが厄介で、txfontsや通常使用するamsfontsとbattingする場合が多々あるらしい。
書き方としては以下の通り。
```tex 
\usepackage{MnSymbol}
... 
\left\llangle \frac{k_BT}{E} \right\rrangle
```
Qiita上というかKaTeXでは`\llangle`等は見れないのようなので、どのように出力されるのかについては、ご自身の環境でご確認ください。

To be continued ...