为什么 expl3 与“gather”环境冲突?

为什么 expl3 与“gather”环境冲突?

这段代码运行良好:

\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,则不会发生正则表达式替换。有什么特别之处,如何解决这个问题?gatheramsmathgather

答案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}

在此处输入图片描述

相关内容