Я прочитал в документации xparse, что \l__xparse_current_arg_int
упоминается "номер текущего устанавливаемого аргумента". Однако у меня возникли проблемы с пониманием того, как получить к нему доступ и использовать его. Например, как бы вы полагались на эту переменную для создания упорядоченных списков (т. е. что именно даст замена 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
.