Como verificar se a expansão dupla de algo está vazia?

Como verificar se a expansão dupla de algo está vazia?

Estou usando o pacote listofitems, que produz uma lista cujos elementos podem ser acessados ​​por

\LIST[n]

mas no manual li que preciso de uma expansão dupla.

Em particular, como posso verificar se (a expansão dupla de) \LIST[n]está vazia?

Responder1

Você pode expandir as coisas duas vezes usando \expandafter\expandafter\expandafter(a primeira \expandafteretapa sobre a segunda, a terceira expande o argumento {uma vez, a primeira e a terceira são removidas, a segunda expande o argumento após {a segunda vez). Se você precisar expandir o argumento de uma macro, você também precisará colocar três \expandafterantes dela (isso não é necessário \detokenizepois expande tudo até encontrar uma chave de abertura; e também não é necessário para \if, pois expande tudo até encontrar dois tokens não expansíveis).

\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}

informação relacionada