# LaTeX の置換エトセトラ LaTeX で文書を作成しているときに句読点など一斉に置換したい場合がある。 ざっと次の 4 つの方法が挙げられる。 - エディタ - ssmacro - Replace Rules - latexindent - latexmk - newunicodechar パッケージ それぞれの置換方法を確認したい。今回は具体例として、句読点を `、` `。` から `,` `.` に置換する。 ## エディタ エディタでは編集中の LaTeX ファイル上で `Ctrl+H` などとすると置換画面が表示される。ここから一斉置換すれば良い。 ただし、このような方法ではそのたびに文字を入力する必要があるため面倒である。 VSCode の拡張機能では、決まった置換を設定しておくことのできるものがいくつかある。 - [ssmacro][joekon.ssmacro] - [VSCode で LaTeX の句読点を楽に置換する - Qiita](https://qiita.com/goemontech/items/f2e4d79bb1288652ba69) - [Replace Rules][bhughes339.replacerules] ```json "replacerules.rules": { "Replace 、to ,": {"find": "、", "replace": ",", "flags":"g", "languages": ["latex"]}, "Replace 。to .": {"find": "。", "replace": ".", "flags":"g", "languages": ["latex"]}, }, "replacerules.rulesets": { "Replace [、。] to [,.]": {"rules": ["Replace 、to ,", "Replace 。to ."]}, } ``` ちなみに、VSCode の正規表現は鬼雲。unicode フラッグも可能。 ## [latexindent][latexindent] latexindent では、`-r` スイッチを有効にすることで置換することが出来る。 適当な設定ファイルを作成し以下を追加することで、フォーマットと同時に置換できる。 ```yaml - this: '、' that: ',' lookForThis: 1 - this: '。' that: '.' lookForThis: 1 ``` 詳細は [latexindent のドキュメント][latexindent_doc] を確認してほしい。 ## [latexmk][latexmk] > [latexmk による LaTeX ワークフロー内で句読点を自動で置換する - Qiita](https://qiita.com/yudai-nkt/items/900a5f1c87689e033ff3) 上の記事内では、latexmk 内で sed を動かしている。これであれば、任意のビルドツール内でも同じようなことが出来るだろう。 どうせなら、ビルドツール内で perl をそのまま実行させてしまっても良いだろう。適当なスクリプトを組んでも良いだろう。 ## [newunicodechar][newunicodechar] パッケージ newunicodechar パッケージでは Unicode 文字をコマンドのように扱うことが出来るようになるパッケージである。 したがって、プリアンプルに以下を追加する。 ```latex \usepackage{newunicodechar} \newunicodechar{、}{,} \newunicodechar{。}{.} ``` この方法であれば、`\input` などで含まれる子ファイルにも一発で影響するため、上の方法よりも有用だろう。 ## まとめ 1 つの LaTeX ファイルで完結する場合は、エディタの置換やフォーマッタの置換を利用することで解決するだろう。 大型のドキュメントで複数のファイルを 1 つにする場合には、newunicodechar を利用する方が良いだろう。 置換作業をいろいろと考えていると、正規表現に行き着く。簡単だけど面倒くさいし論理積を表現できずに困るヤバいやつ。それが正規表現。もしも、正規表現が正しいかどうかを検証したい場合には、[regex101][regex101_com] を利用すると良い。 そもそも、句読点を `、` `。` から `,` `.` を打つようにキーボードの設定を変更しておくことも 1 つの手である。 [bhughes339.replacerules]: https://marketplace.visualstudio.com/items?itemName=bhughes339.replacerules [joekon.ssmacro]: https://marketplace.visualstudio.com/items?itemName=joekon.ssmacro [newunicodechar]: https://www.ctan.org/pkg/newunicodechar [latexindent]: https://www.ctan.org/pkg/latexindent [latexmk]: https://www.ctan.org/pkg/latexmk [latexindent_doc]: https://latexindentpl.readthedocs.io/en/latest/sec-replacements.html [regex101_com]: https://regex101.com/