\quark_if_novalue:n 的变体不生成

\quark_if_novalue:n 的变体不生成

我有一个 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

相关内容