我正在寻找一个命令\takeargs{n}
(在 TeX 或 LaTeX 中),以便
f \takeargs{n} {x_1} ... {x_n} = f\ x_1\ ...\ x_n
,也就是说(如果我理解了那部分的话)
\takeargs{0} =
\takeargs{n} \sometoken = \ \sometoken \takeargs{n-1}
背景:在我的文档中,我定义了一些函数(在 Haskell-Syntax 中,它使用空格进行函数应用)。我不断努力做到不重复自己,我希望在我编写过程中自动为它们定义新命令,这样我就可以编写
\declarefunction{LaunchRockets}{2}{Coords}{Warhead}{IO ()}
% ^ Prints the function name and type and creates \CallLaunchRockets
% ...
Let $p$ be the target coordinates. Then for a huge boom we could e.g.
do a $\CallLaunchRockets p \Nuclear$ ...
% ^ Expands to $\mycodefont{LaunchRockets}\ p\ \Nuclear$
答案1
这个(纯 TeX)代码怎么样?(注意:我花了 5 分钟才完成,没有经过彻底的测试,可能有一些错误,但它似乎有效。另外,我完全使用了你的尾部递归结构的想法。)
\documentclass{article}
\newcount\takeargscount
\def\takeargs#1{%
\takeargscount=#1
\ifnum\takeargscount>0
\expandafter\dotakeargs
\fi
}
\def\dotakeargs#1{%
\advance\takeargscount by -1
\takeargsseparator #1\takeargs{\the\takeargscount}%
}
\def\takeargsseparator{ }
\begin{document}
\takeargs{3}{a}{b}{c}
\end{document}