如何使“聚集”与我对文本的自定义处理一起实现?

如何使“聚集”与我对文本的自定义处理一起实现?

这是无法编译的代码:

\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。如果我用 替换gatherequation代码就会编译。

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

相关内容