![Что не так с этим макроопределением `\newcommand{\funk}[2]{#1}{-#2}`?](https://rvso.com/image/370770/%D0%A7%D1%82%D0%BE%20%D0%BD%D0%B5%20%D1%82%D0%B0%D0%BA%20%D1%81%20%D1%8D%D1%82%D0%B8%D0%BC%20%D0%BC%D0%B0%D0%BA%D1%80%D0%BE%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC%20%60%5Cnewcommand%7B%5Cfunk%7D%5B2%5D%7B%231%7D%7B-%232%7D%60%3F.png)
Вот MnWE:
\documentclass{minimal}
\usepackage{amsmath}
\newcommand{\funk}[2]{#1}{-#2}
\begin{document}
$\funk{x}{2}$
\end{document}
Он не компилируется, выдавая сообщение об ошибке:
В горизонтальном режиме нельзя использовать `символ параметра макроса #'. \newcommand{\funk}[2]{#1}{-#
Что не так с командой?
решение1
Theформальная спецификация для\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}