序列被误用,但内联函数有效

序列被误用,但内联函数有效

我有一些代码可以工作,但是当我尝试将其重构为函数时,它就停止工作了。这是一个 MWE:

\documentclass{article}

\usepackage{xparse}

\ExplSyntaxOn

\seq_new:N \l_shepi_sub_seq:nnn
\cs_new_protected:Nn \shepi_seq:nnn {
  \seq_set_split:Nnn \l_shepi_sub_seq {,} {#3}
  \seq_set_map:NNn \l_shepi_sub_seq \l_shepi_sub_seq {\exp_not:n {#2}}
  \seq_use:Nn \l_shepi_sub_seq {#1}
}

\NewDocumentCommand \works { m } {
  \seq_set_split:Nnn \l_shepi_sub_seq {,} {#1}
  \seq_set_map:NNn \l_shepi_sub_seq \l_shepi_sub_seq {\exp_not:n {l}}
  \[\begin{array}{\seq_use:Nn \l_shepi_sub_seq {}}
  \end{array}\]
}

\NewDocumentCommand \fails { m } {
  \[\begin{array}{\shepi_seq:nnn {} {l} {#1}}
  \end{array}\]
}

\ExplSyntaxOff

\begin{document}

\works{A, B, C}

\ExplSyntaxOn
\shepi_seq:nnn{}{l}{A, B, C}
\ExplSyntaxOff

%\fails{A, B, C}

\end{document}

取消注释 \fails 调用会中断编译并出现以下错误:

! Undefined control sequence.
<argument> \LaTeX3 error: 
                           A sequence was misused.
l.55     \fails{A, B, C}

由于我的 \shepi_seq:nnn 函数被我的代码库的其他部分使用,我宁愿保持原样,但如果需要更改,那就这样吧。

有人能解释一下我做错了什么吗?

附带问题:像我一样调用 \seq_set_map:NNn 是一种好的做法吗?(前两个参数表示相同的序列)。

答案1

论点应该\begin{array}完全可扩展到正确的数组前导,但\shepi_seq:nnn不可扩展。

此外\begin{array}不是如果包已加载,则无论如何都会扩展,array因此您需要采用不同的方法。

您显然正在计算物品的数量,所以就这么做吧。;-)

\documentclass{article}
\usepackage{xparse}
\usepackage{array} % just in case

\ExplSyntaxOn

\seq_new:N \l_shepi_sub_seq

\NewDocumentCommand{\fabianarray}{m}
 {
  \[
  \seq_set_split:Nnn \l_shepi_sub_seq { , } { #1 }
  \begin{array}{ *{ \clist_count:n { #1 } } { l } }
  \seq_use:Nn \l_shepi_sub_seq { & }
  \end{array}
  \]
 }

\ExplSyntaxOff

\begin{document}

\fabianarray{A, B, C}

\end{document}

相关内容