这是无法编译的代码:
\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}}
{\regex_replace_all:nnN {e}{X} \l__foo_tmp_tl
\l__foo_tmp_tl}
\ExplSyntaxOff
\begin{document}
\begin{gather}
\begin{foo}
first \\ second \\ third
\end{foo}
\end{gather}
\end{document}
我正在尝试在文本进入环境之前对其进行预处理gather
。如果我用 替换gather
,equation
代码就会编译。
答案1
foo
结束后,您可以扩展全局令牌列表。
\documentclass{article}
\usepackage{amsmath}
\ExplSyntaxOn
\tl_new:N \l__foo_tmp_tl
\tl_new:N \g__foo_tmp_tl
\NewDocumentEnvironment{foo}{b}
{
\tl_set:Nn \l__foo_tmp_tl {#1}
\regex_replace_all:nnN {e}{X} \l__foo_tmp_tl
\tl_gset_eq:NN \g__foo_tmp_tl \l__foo_tmp_tl
\group_insert_after:N \g__foo_tmp_tl
}{}
\ExplSyntaxOff
\begin{document}
\begin{gather}
\begin{foo}
first \\ second \\ third
\end{foo}
\end{gather}
\end{document}
然而,我会定义一个foogather
环境。
\NewDocumentEnvironment{foogather}{b}
{
\tl_set:Nn \l__foo_tmp_tl {#1}
\regex_replace_all:nnN {e}{X} \l__foo_tmp_tl
\begin{gather}
\tl_use:N \l__foo_tmp_tl
\end{gather}
}{}
请注意这+b
是错误的,因为gather
不接受空行。
答案2
如果你真的想要这个,你需要将定义从环境中提取出来,但不使用环境语法会更容易理解
\documentclass{article}
\usepackage{amsmath}
\ExplSyntaxOn
\tl_new:N\l__foo_tmp_tl
\tl_new:N\g__foo_tmp_tl
\cs_generate_variant:Nn \tl_replace_all:Nnn {Nx}
\NewDocumentEnvironment{foo}{+b}
{\tl_set:Nn\l__foo_tmp_tl{#1}}
{\regex_replace_all:nnN {e}{X} \l__foo_tmp_tl
\tl_gset_eq:NN\g__foo_tmp_tl\l__foo_tmp_tl
\aftergroup\g__foo_tmp_tl}
\ExplSyntaxOff
\begin{document}
\begin{gather}
\begin{foo}
first \\ second \\ third
\end{foo}
\end{gather}
\end{document}