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