我一直在尝试编写一个宏,在其中可以指定一个系列的项数,然后它会打印:
n0+n1+n2+n3...+nn
能够打印任意数量的术语对我的工作来说很重要。我试过,但循环超出了我目前对 TeX 的理解。
先谢谢您的帮助。
答案1
这与 Martin 提出的解决方案略有不同。为了提供一些灵活性,我首先定义一个“setup”宏,您可以这样调用它:
\series[5]{nseries}{n}
我之所以要将其概括化,是因为您可能不仅想要“n 系列”,还可能想要定义其他类型的系列。
此设置命令将自动创建一个名为的命令,\<symbol>series
该命令将排版所需数量的术语。创建命令的过程使用\csname..\endcsname
。您可能希望在 TeXbook 或 Tex by Topic 中进一步查找。
\Z
通过改变下面 MWE 中的定义,还可以进一步开发更困难的系列宏。
\documentclass{article}
\usepackage{amsmath}
\parindent=0pt \parskip=6pt
\begin{document}
\newcount\ct
\newcommand\series[3][3]{%
\ct=0
\expandafter\xdef\csname #2\endcsname{}
\def\temp{\csname#2\endcsname}
\loop
\def\Z{#3_{\the\ct}+}
\expandafter\xdef\csname #2\endcsname{\temp\Z}
\advance\ct by1
\ifnum \the\ct<#1
\repeat
%% add the ldots by redefining the command again
\expandafter\xdef\csname#2\endcsname{\temp\cdots+#3_n}
}
% Define some series
\series[8]{kseries}{{\text{k}}t^2}
\series[5]{nseries}{n}
\series[5]{tseries}{t}
\series{zetaseries}{\zeta}
% call the series
The \texttt{nseries} \[\nseries\]
The \texttt{tseries} \[\tseries\]
The \texttt{kseries} \[\kseries\]
The \texttt{\(\zeta\)-series} \[\zetaseries\]
\end{document}
样本输出,
答案2
\documentclass{article}
\usepackage{pstricks}
\def\series#1{%
\ifcase#1{n0+}\or{n0+n1+}\else
\psforeach{\nA}{0,1,..,#1}{n\nA+}\fi
\ldots+nn}
\begin{document}
\series{0}
$\series{1}$
$\series{11}$
\end{document}
答案3
您可以使用递归扩展宏来完成此操作,例如:
\documentclass{article}
\usepackage{amsmath}
\newcommand*{\series}[2]{% #1 = variable, #2 = max. number of seriess
\ensuremath{%
\iftrue\seriesx{0}{#2}{#1}\fi
\dots+{#1}_{n}%
}%
}
\newcommand*{\seriesx}[4]{% #1 = current index, #2 = max index, #3 = variable, #4 = \fi
#4% = \fi
\ifnum#1>#2 \else
{#3}_{#1}+%
\expandafter\seriesx\expandafter{\the\numexpr#1+1\relax}{#2}{#3}%
\fi
}
\begin{document}
\series{n}{10}
\series{n}{22}
\series{n}{0}
\series{n}{-1}
\series{n}{1}
\series{m}{5}
\end{document}
递归宏将\termx
尾随内容\fi
作为最后一个参数读取,并将其插入到开头,以避免条件语句的深度嵌套。没有它也可以工作,但有它会更好。还有其他方法可以做到这一点。
(已更新以包含+...+X_n
部分;重命名宏)
答案4
这是一个使用循环的解决方案\foreach
。我仍然不确定 OP 到底想要什么,但为了遵循其他答案,我添加了尾随部分。如果不需要,+...+n_n
只需删除该行即可。\dots+{#1}_{n}%
\documentclass{article}
\usepackage{pgffor}
\newcommand*{\series}[2]{%
{#1}_0%
\ifnum#2>0
\foreach \n in {1,...,#2}{%
+{#1}_{\n}%
}%
\fi
+\dots+{#1}_{n}%
}
\begin{document}
$\series{n}{6}$
$\series{m}{8}$
$\series{n}{0}$
$\series{m}{1}$
\end{document}