这个宏定义 `\newcommand{\funk}[2]{#1}{-#2}` 有什么问题?

这个宏定义 `\newcommand{\funk}[2]{#1}{-#2}` 有什么问题?

这是一个 MnWE:

\documentclass{minimal}
\usepackage{amsmath}

\newcommand{\funk}[2]{#1}{-#2}

\begin{document}
    $\funk{x}{2}$
\end{document}

它无法编译,并给出错误消息:

您不能在水平模式下使用“宏参数字符 #”。 \newcommand{\funk}[2]{#1}{-#

命令出了什么问题?

答案1

正式规范\newcommand

\newcommand*{<cmd>}[<args>][<default>]{<stuff>}

其中*是可选的(表示结果\def初始化是否为\long),<cmd>是不存在的控制序列,<args>(也是可选的) 表示 传递的参数数量<cmd><default>如果未指定(当<args>> 0 时)则为可选参数的默认值,<stuff>是 传递参数后的 的扩展(或替换文本)<cmd>。 每个参数(最多 9 个)被 替换为#<num>第 一个<num>参数(#1第一个参数,#2第二个参数,依此类推)。

在您的设置中

\newcommand{\funk}[2]{#1}{-#2}

\funk接受2参数,两个参数都是必需的,并且替换文本只是第一个参数#1(实际上吞噬了第二个参数)。

{-#2}不构成控制序列创建的一部分,因此按原样扩展,留-#2在输入流中(在前导码中),这是不允许的,因为#具有特殊含义 - 它是一个宏参数字符。

你可能感兴趣

\newcommand{\funk}[2]{#1-#2}

相关内容