如何检查逗号列表是否为空?

如何检查逗号列表是否为空?

我如何检查是否\myList为空?以下(我的尝试)打印“NOT empty”,而实际上列表为空。

\documentclass{standalone}
\usepackage{expl3}
\begin{document}
  \ExplSyntaxOn
  \clist_new:N\myList
  \clist_set:Nn\myList{}
  \cs_if_eq:NNTF\myList{}{EMPTY}{NOT empty}
  \ExplSyntaxOff
\end{document}

编辑:我找到了一种方法来做到这一点(如下),但希望您分享另一种方法(看看还有什么其他方法可以做到这一点很有趣):

  \clist_new:N\myList
  \clist_new:N\emptyList
  \clist_set:Nn\myList{} % assign "emptiness" to the list (although it had already been empty to begin with)
  \cs_if_eq:NNTF\myList\emptyList{EMPTY}{NOT empty}

答案1

\documentclass{standalone}
\usepackage{expl3}
\begin{document}
\ExplSyntaxOn
\clist_new:N\myList
\clist_set:Nn\myList{}
\clist_if_empty:NTF \myList{ EMPTY }{ NOT EMPTY }
\ExplSyntaxOff
\end{document}

跑步texdoc l3clist

答案2

您想要的测试是\clist_if_empty:N(TF):每种数据类型都有适当的空性或类似测试。这些测试的定义使得它们“知道”数据类型的内部性质(例如,prop在宏观层面上,空并不完全是空的)。

你的\cs_if_empty:NN(TF)测试是错误的因为您给出的第二个参数不是N类型(单个标记),而是n-type(在本例中为空标记列表)。在这种情况下,您可以进行低级测试,例如

\cs_if_eq:NN(TF) \myList \c_empty_clist { <true> } { <false> }

或者将列表扩展为“原始”标记列表

\tl_if_blank:V(TF) \c_empty_clist { <true> } { <false> }

相关内容