O que há de errado com esta definição de macro `\newcommand{\funk}[2]{#1}{-#2}`?

O que há de errado com esta definição de macro `\newcommand{\funk}[2]{#1}{-#2}`?

Aqui está um MnWE:

\documentclass{minimal}
\usepackage{amsmath}

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

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

Ele não compila, me dando a mensagem de erro:

Você não pode usar `caractere de parâmetro de macro #' no modo horizontal. \newcommand{\funk}[2]{#1}{-#

O que há de errado com o comando?

Responder1

Oespecificação formal para\newcommandé

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

onde *é opcional (implica se a \definicialização resultante será \longou não), <cmd>é uma sequência de controle inexistente, <args>(também opcional) denota o número de argumentos passados ​​​​devorados por <cmd>, <default>é o valor padrão de um argumento opcional se não for especificado ( quando <args>> 0) e <stuff>é a expansão (ou texto de substituição) de <cmd>depois de engolir os argumentos. Cada argumento (até 9) é substituído por #<num>para o <num>décimo argumento ( #1para o primeiro, #2para o segundo e assim por diante).

Na sua configuração

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

\funkrecebe 2argumentos, ambos obrigatórios e o texto de substituição é apenas o primeiro argumento #1(efetivamente engolindo o segundo).

{-#2}não faz parte da criação da sequência de controle e, portanto, é expandido como está, deixando -#2no fluxo de entrada (no preâmbulo), o que não é permitido porque #tem um significado especial - é um caractere de parâmetro de macro.

Você provavelmente está interessado em

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

informação relacionada