我在 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
。