有人能向我解释一下这里发生了什么吗?
\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