パラメータ内の一致するトークンを置き換えるマクロですか?

パラメータ内の一致するトークンを置き換えるマクロですか?

任意のパラメータ (トークンのシーケンス) を取得し、何らかのトークン (たとえば、またはまたは)\magicreplaceが発生するたびに、それを何らかの固定されたトークンのシーケンス (たとえば、または) に置き換えるマクロを作成したいと思います。ax,hello\text{hello}

したがって、\magicreplace{a}{abc{abc}}は に展開されますhellobc{abc}

それを実行するためのパッケージはありますか? そうでない場合、これを実装するにはどうすればよいでしょうか?

ノート:

  • プレーンTeXではなくLaTeXでも可
  • pdftex または xetex をお願いします

答え1

これは、次の製品ですでにすぐに使用できますexpl3:

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\magicreplace}{mmm}
 {
  \tl_set:Nn \l_einpoklum_magicreplace_tl { #3 }
  \tl_replace_all:Nnn \l_einpoklum_magicreplace_tl { #1 } { #2 }
  \tl_use:N \l_einpoklum_magicreplace_tl
 }
\tl_new:N \l_einpoklum_magicreplace_tl
\ExplSyntaxOff

\begin{document}

\magicreplace{a}{hello}{abc{abc}}

\magicreplace{a}{hello}{a b c{a b c}a}

\end{document}

ここに画像の説明を入力してください

置換文字列が固定されている(ただし変更可能)別のバージョン。

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\magicreplace}{mm}
 {
  \tl_set:Nn \l_einpoklum_magicreplace_tl { #2 }
  \tl_replace_all:NnV \l_einpoklum_magicreplace_tl { #1 } \l_einpoklum_magicreplace_rep_tl
  \tl_use:N \l_einpoklum_magicreplace_tl
 }
\NewDocumentCommand{\setreplacement}{m}
 {
  \tl_set:Nn \l_einpoklum_magicreplace_rep_tl { #1 }
 }

\tl_new:N \l_einpoklum_magicreplace_tl
\tl_new:N \l_einpoklum_magicreplace_rep_tl
\cs_generate_variant:Nn \tl_replace_all:Nnn { NnV }
\ExplSyntaxOff

\begin{document}

\setreplacement{hello}

\magicreplace{a}{hello}{abc{abc}}

\setreplacement{world}
\magicreplace{a}{a b c{a b c}a}

\end{document}

ここに画像の説明を入力してください

答え2

空白スペースにもっと気を配ることもできますが、シンプルなバージョンは

ここに画像の説明を入力してください

\documentclass{article}

\def\zz#1#2#3{\def\zzz##1#1{##1#2\zzz}{\zzz#3\zzzz#1\relax}}
\def\zzzz#1\relax{}
\begin{document}

\zz{a}{hello}{abc{abc}abc}
\end{document}

関連情報