![LaTeX3 Regex 使用控制序列](https://linux22.com/image/335773/LaTeX3%20Regex%20%E4%BD%BF%E7%94%A8%E6%8E%A7%E5%88%B6%E5%BA%8F%E5%88%97.png)
我想使用 l3regex 在任意变量上替换一些单词/字符。
不要这样做
\tl_set:Nn \l_myname_tl {Hello}
\regex_replace_all:nnN {(\w+)} {\1 World!} \l_myname_tl
哪个有效,我想做类似的事情
\def\myname{tmpname}
\cs_new_protected:cpn { l_\myname _tl } {Hello}
\regex_replace_all:nnN {(\w+)} {\1 World!} \use:c {l_\myname _tl}
我收到一条错误消息,说我多了一个括号 }。我对 LaTeX3 不是很熟悉,但如果我理解得好,问题就出在它\use:c {l_myname _tl}
没有像预期的那样被视为单个标记(没有括号):nnN
。
该怎么做呢?
提前致谢。
答案1
您可以定义一个变体:
\cs_generate_variant:Nn \regex_replace_all:nnN { nnc }
所以你可以打电话
\tl_set:cn { l_ \myname _tl } {Hello}
\regex_replace_all:nnc {(\w+)} {\1 World!} {l_ \myname _tl}