表示求和扩展的命令

表示求和扩展的命令

我对使用 LaTeX 编写方程式还很陌生。我现在正在学习如何创建自己的命令。我将编写一个命令\Listn来帮助我做到这一点:

\Listn{\sumup}{(#1)}{+}
$\sumup{n}$\\
\Listn{\sumupaf}{a_{#1}f(x_{#1})}{\times}
$\sumupaf{k+1}$

会给我

第一的

第二

然后我尝试创造\Listn

\providecommand{\Define}[2]{\providecommand{#1}{}\renewcommand{#1}[1]{#2}}
\providecommand{\List}[3]{{#1{1}}#2{#1{2}}#2\cdots#2{#1{#3}}}
\providecommand{\Listn}[4]{\Define\f{#2}\Define{#1}{\List{\f}{#3}{#4}}}

但是第四个参数必须手动填写,如下所示:

\Listn{\sumup}{(#1)}{+}{#1}
$\sumup{n}$\\
\Listn{\sumupaf}{a_{#1}f(x_{#1})}{\times}{#1}
$\sumupaf{k+1}$

如果我想消除第四个参数,我希望

\providecommand{\argument}{#1}

这是不可能的。

有什么方法可以克服这个问题吗?

答案1

我认为你实际上并不需要第一个参数,即\sumup\sumupaf

\documentclass[a4paper]{article}
\newcommand\Listn[3]{\def\next##1{#1}\next{1}#2\next{2}#2\cdots#2\next{#3}}

\begin{document}
$\Listn{(#1)}{+}{n}$

$\Listn{a_{#1}f(x_{#1})}{\times}{k+1}$
\end{document}

\next是一个“划痕控制序列”,可以重复使用并重新定义,不会出现问题。

第一个参数\Listn是因素的“结构”,第二个参数是操作,第三个参数是最后一个索引。

在此处输入图片描述

如果你确实需要给结构命名以便后续使用,你可以说

\newcommand\Listn[4][\listnscratch]{%
  \gdef#1##1{#2}#1{1}#3#1{2}#3\cdots#3#1{#4}}

然后$\Listn[\sumup]{(#1)}{+}{n}$会给出与之前相同的结果,并且您可以说\sumup{3}得到“(3)”。

答案2

当你定义一个宏时之内另一个宏,嵌套宏必须使用它##n来访问其第 n 个参数,因为它#n引用了父宏的第 n 个参数。因此,您只需将\Listn宏更改为用作{##1}最后一个参数,就可以消除第 4 个参数:

\providecommand{\Listn}[3]{\Define\f{#2}\Define{#1}{\List{\f}{#3}{##1}}}

在此处输入图片描述

\documentclass{article}

\providecommand{\Define}[2]{\providecommand{#1}{}\renewcommand{#1}[1]{#2}}
\providecommand{\List}[3]{{#1{1}}#2{#1{2}}#2\cdots#2{#1{#3}}}
\providecommand{\Listn}[3]{\Define\f{#2}\Define{#1}{\List{\f}{#3}{##1}}}

\begin{document}
\Listn{\sumup}{(#1)}{+}
$\sumup{n}$

\Listn{\sumupaf}{a_{#1}f(x_{#1})}{\times}
$\sumupaf{k+1}$
\end{document}

相关内容