我正在尝试测试序列中某个项目的值。下面的方法似乎不起作用。有人能建议解决方法或替代方案吗?
\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:eeTF
e
详尽无遗扩展:扩展所有可以扩展的东西。