\takeargs{n} = 采取 n 个参数并打印它们,以空格分隔?

\takeargs{n} = 采取 n 个参数并打印它们,以空格分隔?

我正在寻找一个命令\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}

相关内容