整数乘法命令

整数乘法命令

我想创建一个可以将连续整数相乘的命令(如果它尚不存在)。

我如何创建一个命令,比如说\multiply{<first_number>}{<last_number>},使用 LaTeX3,将所有整数从<first_number>乘以 到<last_number>

例如:我想\multiply{4}{9}执行乘法4*5*6*7*8*9并返回其值60480

不幸的是,我甚至无法为你创建一些“起始”代码(抱歉!)因为我还没有学习 L3 语法。因此,我知道这是一个“请为我完成所有工作”的问题。:-(

答案1

该名称\multiply已定义(将寄存器的值乘以数字并将结果存储在该寄存器中的原语),因此我将其用于\product以下用途。否则,如果您知道相关的 L3 函数,这将非常简单:

\documentclass{article}

\ExplSyntaxOn
\NewExpandableDocumentCommand \product { m m }
  { \svendtveskaeg_multiply:nn {#1} {#2} }
\cs_new:Npn \svendtveskaeg_multiply:nn #1#2
  {
    \int_eval:n
      { 1 \int_step_function:nnN {#1} {#2} \__svendtveskaeg_multiply:n }
  }
\cs_new:Npn \__svendtveskaeg_multiply:n #1 { * #1 }
\ExplSyntaxOff

\begin{document}
\product{4}{9}
\typeout{\product{4}{9}}
\end{document}

将会把 60480 打印到文档中并将其写入日志。

答案2

在此处输入图片描述

\documentclass{article}
\def\xmultiply#1#2{%
  \ifnum#1=\numexpr#2\relax\the\numexpr#1\relax\else
   \the\numexpr(#2)*\xmultiply{#1}{#2-1}\relax\fi}
\begin{document}

\xmultiply{4}{9} 
\end{document}

答案3

我们可以用 OpTeX 做什么:

\def\multiply#1#2{\expr[0]{#1\fornum #1+1..#2\do{*##1}}}

\multiply{4}{9}

\multiply{4}{15}

\bye

注意三个特点:

  • 该宏只需要一行代码。
  • 我们可以重新定义 TeX 原语\multiply而不会丢失任何内部宏的功能,因为我们是在用户名空间中执行此操作。
  • \expr宏通过Lua表达式实现,数字限制为2^63,而TeX数字限制为2^31。

答案4

这是一个基于 LuaLaTeX 的解决方案。(请注意,我选择了\Multiply作为宏名称,因为已经有一个名为的宏\multiply。)

在此处输入图片描述

观察代码是否正确处理\Multiply{4}{4}。如果第二个参数小于第一个参数,则返回字符串“NIL”。

% !TEX TS-program = lualatex
\documentclass{article}
\newcommand\Multiply[2]{\directlua{
  if #2<#1 then tex.sprint ( "NIL" ) 
  else j=#1; for i=#1+1,#2 do j = j*i end; tex.sprint (j)
  end}}
    
\begin{document}
\Multiply{4}{9}, \Multiply{4}{4}.
\end{document}

相关内容