对 \clist 中从其自身添加的项目进行比较时出现问题

对 \clist 中从其自身添加的项目进行比较时出现问题

有人能向我解释一下这里发生了什么吗?

\documentclass{article}
\begin{document}
\ExplSyntaxOn

\clist_new:N \l_mjc_a_clist
\clist_new:N \l_mjc_b_clist

\clist_set:Nn \l_mjc_a_clist { a }
\clist_put_right:Nn \l_mjc_a_clist { \clist_item:Nn \l_mjc_a_clist { 1 } }
\str_if_eq:eeTF { \clist_item:Nn \l_mjc_a_clist { 2 } } { a } { 1 } { 0 } \hspace{1em} % returns 0

\clist_set:Nn \l_mjc_b_clist { b } 
\clist_put_right:Nn \l_mjc_b_clist { b }
\str_if_eq:eeTF { \clist_item:Nn \l_mjc_b_clist { 2 } } { b } { 1 } { 0 } % returns 1

\end{document}

答案1

您不想将令牌添加到列表中

\clist_item:Nn \l_mjc_a_clist { 1 }

但物品。您可以使用 来实现这一点\clist_put_right:Nx,因此\clist_item:Nn会扩展。查看说明中的技术说明,您会发现扩展只会提供实际物品,而不会进一步扩展。

\documentclass{article}

\begin{document}

\ExplSyntaxOn

\clist_new:N \l_mjc_a_clist
\clist_new:N \l_mjc_b_clist

\clist_set:Nn \l_mjc_a_clist { a }
\clist_put_right:Nx \l_mjc_a_clist { \clist_item:Nn \l_mjc_a_clist { 1 } }
\str_if_eq:eeTF { \clist_item:Nn \l_mjc_a_clist { 2 } } { a } { 1 } { 0 }

\par\bigskip

\clist_set:Nn \l_mjc_b_clist { b }
\clist_put_right:Nn \l_mjc_b_clist { b }
\str_if_eq:eeTF { \clist_item:Nn \l_mjc_b_clist { 2 } } { b } { 1 } { 0 }

\ExplSyntaxOff

\end{document}

答案2

尝试\clist_show:N \l_mjc_a_clist

The comma list \l_mjc_a_clist contains the items (without outer braces):
>  {a}
>  {\clist_item:Nn \l_mjc_a_clist {1}}.
<recently read> }

所以你的第二项不是你想象的那样。你需要\clist_put_right:Ne,而且因为那不存在(我认为)可能\exp_args:NNe\clist_put_right:Nn

相关内容