Wiederverwenden der Nummer des aktuellen Arguments mit xparse

Wiederverwenden der Nummer des aktuellen Arguments mit xparse

Ich habe in der Dokumentation von xparse gelesen, dass \l__xparse_current_arg_intvon „der Nummer des aktuell eingerichteten Arguments“ die Rede ist. Ich habe jedoch Probleme zu verstehen, wie ich darauf zugreifen und es verwenden kann. Wie würden Sie sich beispielsweise im folgenden Beispiel auf diese Variable verlassen, um geordnete Listen zu erstellen (d. h. genau das, was das Ersetzen itemizedurch ergeben würde)?enumerate

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

Ich hatte gehofft, dass eine einfache Lösung \item[\l__xparse_current_arg_int]funktionieren würde, aber das tut sie nicht.

Antwort1

Den durch geteilten Bits ist keine Ganzzahl zugeordnet \SplitList: Es wird eine Rekursion gestartet, die mit der Liste endet.

Sie können selbst einen Zähler definieren:

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

Ein LaTeX-Zähler könnte ebenfalls verwendet werden.

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

Natürlich wäre es einfacher, enumerateanstelle von zu verwenden itemize.

verwandte Informationen