xparse で現在の引数の番号を再利用する

xparse で現在の引数の番号を再利用する

\l__xparse_current_arg_intxparse のドキュメントで、「現在設定されている引数の数」について言及されているのを読みました。しかし、その変数にアクセスして使用する方法が理解できません。たとえば、次の例では、その変数を使用して順序付きリスト (つまり、置換itemizeによって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}

\item[\l__xparse_current_arg_int]単純なものが機能することを期待していましたが、そうではありませんでした。

答え1

によって分割されたビットに関連付けられた整数はありません\SplitList。リストで終了する再帰が開始されます。

カウンターを自分で定義することもできます:

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

LaTeX カウンターも使用できます。

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

もちろん、enumerateの代わりにを使用する方が簡単でしょうitemize

関連情報