如何检查某个东西的双重展开是否为空?

如何检查某个东西的双重展开是否为空?

我正在使用 listofitems 包,它生成一个列表,其中的元素可以通过

\LIST[n]

但我在手册中看到我需要双重扩展。

具体来说,我如何检查(的双重扩展)\LIST[n]是否为空?

答案1

您可以使用将内容扩展两次\expandafter\expandafter\expandafter(第一次\expandafter覆盖第二次,第三次在一次后扩展参数{,第一次和第三次被删除,第二次在{第二次后扩展参数)。如果您需要扩展宏的参数,您还需要\expandafter在它前面放置三个(这对于 来说不是必需的,\detokenize因为它会扩展所有内容,直到找到一个左括号;对于 来说也不是必需的\if,因为它会扩展所有内容,直到找到两个不可扩展的标记)。

\documentclass{article}

\usepackage{listofitems}
\readlist\foo{12,abc,3,4,,}

\makeatletter
\providecommand\@secondofthree[3]{#2}
\newcommand\iflistitememptyTF[2]
  {%
    \if\relax\detokenize\expandafter\expandafter\expandafter{#1[#2]}\relax
      \expandafter\@secondofthree
    \fi
    \@secondoftwo
  }
\makeatother

\begin{document}
\iflistitememptyTF\foo{5}{empty}{not empty}
\end{document}

相关内容