测试序列中某项的值

测试序列中某项的值

我正在尝试测试序列中某个项目的值。下面的方法似乎不起作用。有人能建议解决方法或替代方案吗?

\documentclass{article}

\ExplSyntaxOn

\tl_new:N \l_test_tl
\seq_new:N \l_test_seq

\tl_set:Nn \l_test_tl { a }
\seq_set_from_clist:Nn \l_test_seq { a,b }

\begin{document}

\str_if_eq:VnTF { \l_test_tl } { a } { 1 } { 0 } \hspace{1em} % returns 1, as expected

\seq_item:Nn { \l_test_seq } { 1 } \hspace{1em} % returns a, as expected

\str_if_eq:VnTF { \seq_item:Nn { \l_test_seq } { 1 } } { a } { 1 } { 0 } \hspace{1em} % returns 0

\str_if_eq:nnTF { \seq_item:Nn { \l_test_seq } { 1 } } { a } { 1 } { 0 } % returns 0

\end{document}

答案1

\str_if_eq:nnTF(强调:nn)将按字面意思处理参数(不进行扩展),因此它比较人物 \seq_item:Nn { \l_test_seq } { 1 }a显然是错误的。

\str_if_eq:VnTF扩展了V第一个参数的值,但是V 必须是单个变量,而不是任意命令。例如,您可以使用\str_if_eq:VnTF \l_tmpa_str ...,但不能使用\str_if_eq:VnTF { \str_use:N \l_tmpa_str } ...

你想要的是全面扩张\seq_item:Nn,所以你必须使用变体e:(是\str_if_eq:eeTFe详尽无遗扩展:扩展所有可以扩展的东西。

相关内容