VSCodeでLaTeXの句読点を楽に置換する

日本語で論文を書く際、句読点をピリオドとカンマで記述しなければならない場合が多々あります。この記事ではLaTeXをVSCodeで書く際にソースファイルの「。」「、」の句読点を「．」「，」へ楽に置換する2つの方法を紹介します。

## 1. LaTeX Workshopとlatexindentを用いる方法

### 概要

LaTeX Workshop拡張機能とlatexindentを利用して、ファイル保存時に自動的に句読点を一括置換する方法です。[latexindent](https://latexindentpl.readthedocs.io/en/latest/index.html)が利用できる環境を前提とします。

### 拡張機能のインストール

VSCodeでLaTeXを書く際におなじみの、拡張機能[LaTeX Workshop](https://marketplace.visualstudio.com/items?itemName=James-Yu.latex-workshop)をインストールします。

### latexindent設定ファイルの作成
プロジェクトルートに次の内容で`latexindent.yaml`ファイルを作成します。

```yaml:latexindent.yaml
replacements:
  -
    this: '、'
    that: '，'
  -
    this: '。'
    that: '．'
```

latexindentコマンドは`-r`スイッチを付けて実行するとファイルの内容を置換することができ[^latexindent-replace]、このファイルでは置換前・置換後の文字を設定しています。

[^latexindent-replace]: [7. The -r, -rv and -rr switches &mdash; latexindent.pl 3.19 documentation](https://latexindentpl.readthedocs.io/en/latest/sec-replacements.html#sec-replacements)

### VSCodeの設定
次のようにVSCodeの設定を追加し、ファイル保存時にLaTeX Workshopからlatexindentが実行されるようにします。

```json:settings.json
{
    "[latex]": {
        "editor.formatOnSave": true,
        "editor.defaultFormatter": "James-Yu.latex-workshop",
    },
    "latex-workshop.latexindent.path": "latexindent",
    "latex-workshop.latexindent.args": [
		"-c",
		"%DIR%/",
		"%TMPFILE%",
		"-l",
		"%DIR%/latexindent.yaml",
		"-r"
    ]
}
```

`latex-workshop.latexindent.args`に設定しているlatexindentのオプションの意味は下記の通りです。

| オプション | 意味 |
| -- | -- |
| `-c %DIR%/` | 実行ログ`indent.log`をプロジェクトルートに出力 |
| `%TMPFILE%` | フォーマット対象のTeXファイルのパス[^latex-workshop-setting-tmpfile] |
| `-l %DIR%/latexindent.yaml` | 設定ファイルとしてプロジェクトルートの`latexindent.yaml`を利用 |
| `-r` | 置換を有効にする |

[^latex-workshop-setting-tmpfile]: [latex-workshop.latexindent.args / Format · James-Yu/LaTeX-Workshop Wiki · GitHub](https://github.com/James-Yu/LaTeX-Workshop/wiki/Format#latex-workshoplatexindentargs)

### 実行
TeXファイルの保存やフォーマットを実行するとすべての句読点が置換されます。

## 2. 置換マクロを用いる方法

### 概要

ショートカットキーを押すことで、開いているTeXファイルの句読点を一括置換する方法です。

### 拡張機能のインストール

拡張機能[ssmacro](https://marketplace.visualstudio.com/items?itemName=joekon.ssmacro)をインストールします。この拡張機能はVSCode上で様々なマクロを実行できるようにするものです。詳細は[Super Simple MACRO for VSCode : OFF-SOFT.net](https://www.off-soft.net/ja/super-simple-macro-for-vscode)をご覧ください。

### コマンド定義の作成

任意の場所にコマンド定義ファイル（JSON）を作成します。

```json:regex.json
[
    "ssmacro.clear",
    {
        "command": "ssmacro.replace",
        "args": {
            "info": "句点置換",
            "find": "。",
            "replace": "．",
            "all": true,
            "reg": true,
            "flag": "gm"
        }
    },
    {
        "command": "ssmacro.replace",
        "args": {
            "info": "読点置換",
            "find": "、",
            "replace": "，",
            "all": true,
            "reg": true,
            "flag": "gm"
        }
    }
]
```
この時点で、コマンドパレット（`Ctrl + Shift + P`）から`ssmacro.run`→`regex.json`へのパス入力でも一応実行できます。

### ショートカットキーの設定

VSCodeメニューの`ファイル` > `基本設定` > `キーボード ショートカット`からJSONファイル（`keybindings.json`）を開き、下記の設定を追加します。

`args`キーには上記の`regex.json`への完全なパスを指定してください。

```json:keybindings.json
{
    "key": "ctrl+oem_comma ctrl+oem_period",
    "command": "ssmacro.macro",
    "args": {"path": "path/to/regex.json"}
}
```

### 実行

`Ctrl + ,`→`Ctrl + .`で先ほどのコマンドが呼び出され、すべての句読点が置換されます。
別のキーを指定したい場合は`keybindings.json`ファイルの`key`キーの内容を変更します。