
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 \expandafter
etapa 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 \expandafter
antes dela (isso não é necessário \detokenize
pois 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}