我想要一个宏,调用\magicreplace
它获取一些任意参数(=标记序列)并用一些固定的标记序列(比如,a
或)替换某些标记(比如,或 或x
)的每次出现。,
hello
\text{hello}
因此,\magicreplace{a}{abc{abc}}
扩展为hellobc{abc}
。
是否有一些软件包可用于执行此操作?如果没有,我该如何实现这个功能?
笔记:
- 可以是 LaTeX 而不是普通的 TeX
- 请提供 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}