这段代码运行良好:
\documentclass{article}
\usepackage{filecontentsdef}
\usepackage{expl3}
\ExplSyntaxOn
\cs_generate_variant:Nn \tl_replace_all:Nnn {Nx}
\makeatletter
\NewDocumentEnvironment{foo}{}
{\filecontentsdefmacro\l__foo_tmp_tl}
{\endfilecontentsdefmacro%
\str_set:NV \l__foo_tmp_tl \l__foo_tmp_tl
\regex_replace_all:nnN {e}{X} \l__foo_tmp_tl
\l__foo_tmp_tl}
\makeatother
\ExplSyntaxOff
\begin{document}
\begin{equation}
\begin{foo}
test me please
\end{foo}
\end{equation}
\end{document}
它呈现tX stmX plX asX fl
(每个字母e
替换为X
)。但是,如果我更改为equation
,则不会发生正则表达式替换。有什么特别之处,如何解决这个问题?gather
amsmath
gather
答案1
我不知道 filecontentsdef 在做什么,但你可以改用 LaTeX +b 参数类型:
\documentclass{article}
\usepackage{amsmath}
\ExplSyntaxOn
\cs_generate_variant:Nn \tl_replace_all:Nnn {Nx}
\NewDocumentEnvironment{foo}{+b}
{\tl_set:Nn\l__foo_tmp_tl{#1}}
{\str_set:NV \l__foo_tmp_tl \l__foo_tmp_tl
\regex_replace_all:nnN {e}{X} \l__foo_tmp_tl
\l__foo_tmp_tl}
\ExplSyntaxOff
\begin{document}
\begin{gather}
\begin{foo}
test me please
\end{foo}
\end{gather}
\end{document}