`\seq_item` 在 `cases` 环境中不起作用

`\seq_item` 在 `cases` 环境中不起作用

我正在尝试创建一个可以动态创建cases环境的宏。不幸的是,有一个问题我无法理解。

由于某种原因,使用时调用\seq_item不会产生文本-token &。将其他文本放在&-token 之后或{\seq_item:Nn \l_tmpb_seq {2}}之前&都会产生预期的文本。

\documentclass{article}
\usepackage{expl3}
\usepackage{amsmath}

\begin{document}

\ExplSyntaxOn
\newcommand{\caseExp}[1]{
\group_begin:
  \seq_set_from_clist:Nn \l_tmpa_seq {#1}
  \seq_set_map:NNn \l_tmpa_seq  \l_tmpa_seq {
    \seq_set_from_clist:Nn \l_tmpb_seq {##1}
    {\seq_item:Nn \l_tmpb_seq {1}} & {\seq_item:Nn \l_tmpb_seq {2}} 
  }
  \begin{cases}
  \seq_use:Nn \l_tmpa_seq {\\}
  \end{cases}
\group_end:
}
\ExplSyntaxOff

$
f(x) = \caseExp{{AAAA,BBBB},{CCCC,DDDD}}
$

\end{document}

代码的输出如下,但我希望看到BBBB那里DDDD

在此处输入图片描述

这种令人费解的行为的原因是什么?该如何解决?

答案1

cases在内部使用对齐,每个单元格形成一个组,并且您在一个组中设置一个序列,但尝试在另一个组中使用它的值。

\clist_use:nn您可以使用更简单且完全可扩展的策略。

\documentclass{article}
\usepackage{amsmath}

\ExplSyntaxOn
\NewDocumentCommand{\caseExp}{m}
 {
  \group_begin:
  \seq_set_from_clist:Nn \l_tmpa_seq {#1}
  \seq_set_map_x:NNn \l_tmpa_seq  \l_tmpa_seq
   {
    \clist_use:nn { ##1 } { & }
   }
  \begin{cases}
  \seq_use:Nn \l_tmpa_seq {\\}
  \end{cases}
  \group_end:
 }
\ExplSyntaxOff

\begin{document}

\[
f(x) = \caseExp{{AAAA,BBBB},{CCCC,DDDD}}
\]

\end{document}

在此处输入图片描述

您甚至可以通过在第一个单元格中完成所有工作来避免使用封闭组。

\documentclass{article}
\usepackage{amsmath}

\ExplSyntaxOn
\NewDocumentCommand{\caseExp}{m}
 {
  \begin{cases}
  \seq_set_from_clist:Nn \l_tmpa_seq {#1}
  \seq_set_map_x:NNn \l_tmpa_seq  \l_tmpa_seq
   {
    \clist_use:nn { ##1 } { & }
   }
  \seq_use:Nn \l_tmpa_seq {\\}
  \end{cases}
 }
\ExplSyntaxOff

\begin{document}

\[
f(x) = \caseExp{{AAAA,BBBB},{CCCC,DDDD}}
\]

\end{document}

事实上,\seq_use:Nn将会“一次性”提供结果,因此 TeX 将在不再需要保存的值时看到&和。\\\l_tmpa_seq

\\甚至更简单,利用尾随在 中cases无关紧要的事实(不是在 中align,请注意):

\documentclass{article}
\usepackage{amsmath}

\ExplSyntaxOn
\NewDocumentCommand{\caseExp}{m}
 {
  \begin{cases}
  \clist_map_function:nN { #1 } \__egreg_cases_row:n
  \end{cases}
 }

\cs_new_protected:Nn \__egreg_cases_row:n
 {
  \clist_use:nn { #1 } { & } \\
 }
\ExplSyntaxOff

\begin{document}

\[
f(x) = \caseExp{{AAAA,BBBB},{CCCC,DDDD}}
\]

\end{document}

相关内容