命令对列表中的值求和

命令对列表中的值求和

我是新手expl3。有什么可以做的吗?

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\sumlist}{m}{
    \clist_add:n { #1 }
}
\ExplSyntaxOff
\begin{document}
    \sumlist{1,2} % should output 3
\end{document}

答案1

它本质上是一行代码。\clist_use:nn我们可以将 放在+任意两个项之间,并\int_eval:n完全展开其参数以进行计算。请注意 被1+-4接受并返回-3

\documentclass{article}

\ExplSyntaxOn

\NewExpandableDocumentCommand{\listadd}{m}
 {
  \int_eval:n { \clist_use:nn {#1} { + } }
 }

\ExplSyntaxOff

\begin{document}

\listadd{1,2}

\listadd{1,-4,3}

\edef\test{\listadd{-3,2*3,-4}}
\texttt{\meaning\test}

\end{document}

在此处输入图片描述

\fp_eval:n还可以对浮点数进行求和。

笔记。查看 2021 年之前版本的编辑历史。

答案2

\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
\NewDocumentCommand{\sumlist}{m}{
    \int_zero:N\l_tmpa_int
    \clist_map_inline:nn{#1} { \int_add:Nn\l_tmpa_int{##1} }
    \int_use:N\l_tmpa_int
}
\ExplSyntaxOff
\begin{document}
    \sumlist{1,2} % should output 3
\end{document}

答案3

为了完整性,使用 LaTeX2e 的完全可扩展方法:

\documentclass{article}
\newcommand\sumlist[1]{\the\numexpr\sumlistaux#1,\relax\relax}
\def\sumlistaux#1,#2\relax{#1\ifx\relax#2\else+\sumlistaux#2\relax\fi}
\begin{document}
\sumlist{1,2} % should output 3

\sumlist{1,1,2,3,5}
\end{document}

在此处输入图片描述

答案4

同样为了完整性,使用 LuaLaTeX 的一行代码:

\documentclass{standalone}
\newcommand\sumlist[1]{\directlua{tex.sprint(load("return "..table.concat({#1},'+'))())}}
\begin{document}
\sumlist{1,4,7,8,3}
\end{document}

在此处输入图片描述

相关内容