我有一个现有的命令,在 \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%
%%%%%%%
%%%%%%%
}