Skip to content

Instantly share code, notes, and snippets.

@yarakos95
Created May 14, 2022 08:45
Show Gist options
  • Save yarakos95/825806b681d0f1b4c72a6a36860d4568 to your computer and use it in GitHub Desktop.
Save yarakos95/825806b681d0f1b4c72a6a36860d4568 to your computer and use it in GitHub Desktop.
LaTeX の置換エトセトラ

LaTeX の置換エトセトラ

LaTeX で文書を作成しているときに句読点など一斉に置換したい場合がある。

ざっと次の 4 つの方法が挙げられる。

  • エディタ
    • ssmacro
    • Replace Rules
  • latexindent
  • latexmk
  • newunicodechar パッケージ

それぞれの置換方法を確認したい。今回は具体例として、句読点を から に置換する。

エディタ

エディタでは編集中の LaTeX ファイル上で Ctrl+H などとすると置換画面が表示される。ここから一斉置換すれば良い。

ただし、このような方法ではそのたびに文字を入力する必要があるため面倒である。

VSCode の拡張機能では、決まった置換を設定しておくことのできるものがいくつかある。

  • ssmacro

  • Replace Rules

      "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 では、-r スイッチを有効にすることで置換することが出来る。

適当な設定ファイルを作成し以下を追加することで、フォーマットと同時に置換できる。

    -
        this: ''
        that: ''
        lookForThis: 1
    -
        this: ''
        that: ''
        lookForThis: 1

詳細は latexindent のドキュメント を確認してほしい。

latexmk による LaTeX ワークフロー内で句読点を自動で置換する - Qiita

上の記事内では、latexmk 内で sed を動かしている。これであれば、任意のビルドツール内でも同じようなことが出来るだろう。

どうせなら、ビルドツール内で perl をそのまま実行させてしまっても良いだろう。適当なスクリプトを組んでも良いだろう。

newunicodechar パッケージ

newunicodechar パッケージでは Unicode 文字をコマンドのように扱うことが出来るようになるパッケージである。

したがって、プリアンプルに以下を追加する。

\usepackage{newunicodechar}
\newunicodechar{、}{,}
\newunicodechar{。}{.}

この方法であれば、\input などで含まれる子ファイルにも一発で影響するため、上の方法よりも有用だろう。

まとめ

1 つの LaTeX ファイルで完結する場合は、エディタの置換やフォーマッタの置換を利用することで解決するだろう。

大型のドキュメントで複数のファイルを 1 つにする場合には、newunicodechar を利用する方が良いだろう。

置換作業をいろいろと考えていると、正規表現に行き着く。簡単だけど面倒くさいし論理積を表現できずに困るヤバいやつ。それが正規表現。もしも、正規表現が正しいかどうかを検証したい場合には、regex101 を利用すると良い。

そもそも、句読点を から を打つようにキーボードの設定を変更しておくことも 1 つの手である。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment