我有一个 token 列表变量,我通过从属性列表中提取一个键来分配它。我现在想测试 token 列表是否是 quark \q_novalue
。据我所知,我需要\tl_if_novalue:VTF
变体,我想通过以下方式生成它
\prg_generate_conditional_variant:Nnn \quark_if_novalue:n { V } { T, F, TF }
但这会导致控制序列不被定义,参见下面的测试文档:
\documentclass{article}
\begin{document}
\ExplSyntaxOn
\prg_generate_conditional_variant:Nnn \quark_if_novalue:n { V } { T, F, TF }
\quark_if_no_value:VTF \l_tmpa_tl{}{}
\ExplSyntaxOff
\end{document}
所以我想问我在这里做错了什么/如何正确测试标记列表变量是否包含夸克\q_novalue
。
答案1
在某些情况下,标记列表变量被设置为\q_no_value
,例如当\prop_get:NnN
使用不存在的键时。
对于这种情况,正确的条件是\quark_if_no_value:NTF
\documentclass{article}
\ExplSyntaxOn
\prop_put:Nnn \l_tmpa_prop { a } { valueA }
\prop_get:NnN \l_tmpa_prop { a } \l_tmpa_tl
\quark_if_no_value:NTF \l_tmpa_tl {\iow_term:n {QUARK}}{\iow_term:n {NOT~QUARK}}
\prop_get:NnN \l_tmpa_prop { b } \l_tmpa_tl
\quark_if_no_value:NTF \l_tmpa_tl {\iow_term:n {QUARK}}{\iow_term:n {NOT~QUARK}}
\stop
终端上的输出是
NOT QUARK
QUARK