指定 newcommand 为现有命令提供默认参数

指定 newcommand 为现有命令提供默认参数

我有一个现有的命令,在 \newenvironment 中定义:

\newcommand{\param}[3]{\textbf{##1} & \emph{##2} & ##3 \\ }

该命令本身运行良好。

我希望能够为典型用例创建此命令的别名。此命令的第二个参数是类型,因此我想要类似以下内容的内容:

\providecommand{\number}{}
\renewcommand{\number}[2]{\param{##1}{number}{##2}}

但是,这会出现错误:Argument of \number has an extra }.

即使\number从未使用过该命令也会出现此错误。

造成这种情况的原因是什么?

答案1

正如 Joseph 所说,重新定义\number是个坏主意,它在这里特别具有自引用性,因为\newcommand(和\providecommand等等)都用于\number处理指定命令有多少个参数的可选参数。这会规范化任何扩展为数字的空格和 TeX 构造,并公开构造原始 TeX语法[2]所需的文字数字。#1#2\def

\long \def \@yargdef #1#2#3{%
  \ifx#2\tw@
    \def\reserved@b##11{[####1]}%
  \else
    \let\reserved@b\@gobble
  \fi
  \expandafter
    \@yargd@f \expandafter{\number #3}#1%
                           %%%%%%%
                           %%%%%%%
}

相关内容