逗号分隔列表-如何获取长度?

逗号分隔列表-如何获取长度?

很简单。我有一个列表,{0,1,54,1,3}作为正在制作的命令的输入参数。我如何获取这个列表的长度?比如

\length(#1)

#1列表在哪里?

答案1

我的第一个 LaTeX3 答案!太棒了!:)

l3clist软件包有很多内置命令来处理逗号分隔的列表。以下是尝试:

\documentclass{article}

\usepackage{expl3}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand \countItems { m } {
    \clist_count:N #1
}

\NewDocumentCommand \countInlineItems { m } {
    \clist_count:n {#1}
}

\ExplSyntaxOff

\begin{document}

\def\mylist{0,1,54,1,3}

This list has \countInlineItems{0,1,54,1,3} elements.

And the same list has \countItems{\mylist} elements.

\end{document}

请注意,我们有两种不同的用法:一种用于存储列表(例如\mylist),一种用于内联列表。感谢 Joseph 指出我的代码中的缺陷。:)

希望能帮助到你。:)

答案2

一个循环和一个计数器:

代码

\documentclass{article}
\makeatletter
\newcommand*{\length}[1]{%
    \@tempcnta\z@
    \@for\@tempa:=#1\do{\advance\@tempcnta\@ne}%
    The length of the list #1 is \the\@tempcnta.%
}
\makeatother
\begin{document}
\length{0,1,54,1,3}

\def\mylist{0,1,54,1,3}
\length\mylist
\end{document}

输出

列表 0,1,54,1,3 的长度为 5。

答案3

xstring,计算空元素

使用包的解决方案xstring。它还计算空元素的数量:

\documentclass{article}
\usepackage{xstring}
\newcommand*{\commalength}[1]{%
  \StrCount{#1,}{,}%
}
\begin{document}
\verb|{0,1,54,1,3}| has length \commalength{0,1,54,1,3}.

\verb|{,,}| has length \commalength{,,}.
\end{document}

结果

kvsetkeys,计数非空元素

\comma@parse包的解析器kvsetkeys删除条目前后的可选空格并删除空条目。

\documentclass{article}

\usepackage{kvsetkeys}
\makeatletter
\newcommand*{\commalength}[1]{%
  \begingroup
    \count@=0 %
    \comma@parse{#1}{%
      \advance\count@ by 1 %
      \@gobble
    }%
    \the\count@
  \endgroup
}
\makeatother

\begin{document}
\verb|{0,1,54,1,3}| has length \commalength{0,1,54,1,3}.

\verb|{,,}| has length \commalength{,,}.
\end{document}

结果

答案4

咱们试试吧etoolbox

这使用循环和计数器方法。

\documentclass{article}

\usepackage{etoolbox}

\makeatletter
\newcounter{itemcounter}%
\newcommand{\length}[1]{%
    \setcounter{itemcounter}{0}%
    \renewcommand*{\do}[1]{\stepcounter{itemcounter}\@gobble{##1}}%
    \docsvlist{#1}%
    \theitemcounter%
}
\makeatother

\begin{document}
\length{1}\qquad \length{1,2}\qquad \length{1,2,3,f,t,w,x,y,z}
\end{document}

该命令\@gobble丢弃其参数。

相关内容