是否可以混合使用 LaTeX3 编程和 amsmath 环境(如 align)?

是否可以混合使用 LaTeX3 编程和 amsmath 环境(如 align)?

假设我想使用 LaTeX 3 的循环功能在 amsmath 环境中打印一些公式序列,例如 align。该怎么做?

以下是一个失败的例子:

\seq_clear_new:N \l__example_seq
\seq_set_from_clist:Nn \l__example_seq {a,b,c,d,e}
\begin{align*}
\int_until_do:nn {\seq_count:N \l__example_seq = 0}
{\seq_pop_left:NNTF \l__example_seq \l_tempa_tl 
{\tl_use:N \l_tempa_tl {&} \tl_use:N \l_tempa_tl {^{\tl_use:N \l_tempa_tl}}\\}
{} }
\end{align*}

问题主要出在环境&align*如何解决这个问题?(PS:我不是询问如何将函数应用于列表中的项目并寻找类似 \seq_map_inline 的答案。上面的代码只是为了展示这个问题。)

答案1

稍微玩一下你的例子,看看发生了什么,我将其重写为:

\documentclass{article}

\usepackage{amsmath}

\begin{document}

\ExplSyntaxOn

\seq_clear_new:N \l__example_seq
\seq_set_from_clist:Nn \l__example_seq {a,b,c,d,e}
\begin{align*} % ❶
\int_until_do:nn 
   {\seq_count:N \l__example_seq = 0}
   {
     \seq_pop_left:NNTF 
        \l__example_seq 
        \l_tempa_tl 
        {
        \typeout{\l_tempa_tl} % ❷
        \tl_use:N \l_tempa_tl \& \tl_use:N \l_tempa_tl HAT{\tl_use:N \l_tempa_tl}\\ }
        {} 
   }
\end{align*} % ❶

\end{document}

尝试定位错误。注释掉align*标记为 ❶ 的行上的环境(这就是我&\&^替换的原因HAT(并且还删除了制表符和上标表达式周围的不正确括号),我得到了扩展的预期结果,但是当我将其放回align*原位时,它显示\typeout❷ 陷入了a无限循环。这告诉我\seq_pop_left当组以表格的每一行结束时会被撤消(\seq_gpop_left应该可以完成工作)。

我觉得那里的整个构造有点可疑。如果你有一个序列,那么使用\seq_map_inline\seq_map_function迭代它比执行你正在做的事情更有意义。你会发现下面的代码有效,而且语法不那么晦涩难懂:

\begin{align*}
\seq_map_inline:Nn 
  \l__example_seq
  {
    #1 & #1^{#1} \\
  }
\end{align*}

相关内容