我想检查变量序列的总和。我创建了一个返回此总和的函数。但是当我使用它时,我得到了一个错误。
\documentclass{article}
\usepackage{expl3}
\pagestyle{empty}
\ExplSyntaxOn
\int_set:Nn \l_tmpa_int{1}
\int_set:Nn \l_tmpa_int{2}
\seq_const_from_clist:Nn \g__variables_seq{\l_tmpa_int,\l_tmpb_int}
\cs_new_protected:Nn \g__sum:{
\int_zero_new:N \l__sum_seq_int
\seq_map_inline:Nn \g__variables_seq {
\int_set:Nn \l__sum_seq_int{\int_eval:n{\l__sum_seq_int+##1}}
}
\int_use:N \l__sum_seq_int
}
\int_case:nnF{\g__sum:}{{1}{\message{one}}}{\message{many}}
\ExplSyntaxOff
\begin{document}
\end{document}
答案1
我猜你有一些用整数填充的序列,无论是显式的还是隐式的(即存储在整数变量中),并且你想返回总和。
\documentclass{article}
%\usepackage{expl3} % not needed with recent LaTeX kernel
\ExplSyntaxOn
\cs_new:Nn \ak_foo_sequence_sum:N
{% the argument is a sequence variable
\int_eval:n { \seq_use:Nn #1 { + } }
}
\begin{document}
% test
\int_set:Nn \l_tmpa_int { 2 }
\int_set:Nn \l_tmpb_int { -4 }
\seq_set_from_clist:Nn \l_tmpa_seq { \l_tmpa_int, 23, \l_tmpb_int , 21 }
%%% just print the sum
\ak_foo_sequence_sum:N \l_tmpa_seq
\par
%%% now use the function to set an integer variable
\int_set:Nn \l_tmpa_int { \ak_foo_sequence_sum:N \l_tmpa_seq }
%%% print the result
\int_to_arabic:n { \l_tmpa_int }
\end{document}
在两种情况下你都会得到 42。
该函数\seq_use:Nn
一次性(在完全扩展上下文中)传递第一个参数指定的序列中的项,这些项均由第二个参数中指定的标记分隔。在整数表达式中,+-
这是合法的。
\ak_foo_sequence_sum:N <sequence>
因此,您可以在任何需要整数表达式的地方使用,包括 的第一个参数\int_case:nnF
。