Reutilizando o número do argumento atual com xparse

Reutilizando o número do argumento atual com xparse

Li na documentação do xparse que \l__xparse_current_arg_intse referia ao "número do argumento atual que está sendo configurado". No entanto, estou tendo problemas para entender como acessá-lo e usá-lo. Por exemplo, como você confiaria nessa variável para produzir listas ordenadas (ou seja, exatamente o que seria substituído itemizepor enumerate) no exemplo a seguir?

\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand\mylist{>{\SplitList{;}}m}
    {
    \begin{itemize}
        \ProcessList{#1}{ \insertitem }
    \end{itemize}
    }
\newcommand\insertitem[1]{\item #1}

\begin{document}

Here's a list: \mylist{a;b;c;d;e;f;g}

\end{document}

Eu esperava que um simples \item[\l__xparse_current_arg_int]funcionasse, mas não funciona.

Responder1

Não há nenhum número inteiro associado aos bits divididos por \SplitList: é iniciada uma recursão que termina com a lista.

Você mesmo pode definir um contador:

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\int_new:N \l_anthony_list_int
\NewDocumentCommand\mylist{>{\SplitList{;}}m}
 {
  \begin{itemize}
  \int_zero:N \l_anthony_list_int
  \ProcessList{#1}{ \insertitem }
  \end{itemize}
 }
\NewDocumentCommand\insertitem{m}
 {
  \int_incr:N \l_anthony_list_int
  \item[\int_to_arabic:n {\l_anthony_list_int}] #1
 }
\ExplSyntaxOff

\begin{document}

Here's a list: \mylist{a;b;c;d;e;f;g}

\end{document}

Um contador LaTeX também pode ser usado.

\documentclass{article}
\usepackage{xparse}

\newcounter{anthonylist}
\NewDocumentCommand\mylist{>{\SplitList{;}}m}
 {
  \begin{itemize}
  \setcounter{anthonylist}{0}
  \ProcessList{#1}{ \insertitem }
  \end{itemize}
 }
\NewDocumentCommand\insertitem{m}
 {
  \stepcounter{anthonylist}
  \item[\theanthonylist}] #1
 }

\begin{document}

Here's a list: \mylist{a;b;c;d;e;f;g}

\end{document}

Claro que seria mais fácil de usar enumerateem vez de itemize.

informação relacionada