このマクロ定義 `\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>、は指定されていない場合( > 0 の場合)<default>のオプション引数のデフォルト値、 は引数を初期化した後の の展開(または置換テキスト)です。 各引数(最大 9 個)は、番目の引数に対してに置き換えられます(最初の引数に対して 、2 番目の引数に対して など)。<args><stuff><cmd>#<num><num>#1#2

あなたの設定で

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

\funk引数は2必須であり、置換テキストは最初の引数のみです#1(実質的に 2 番目の引数を飲み込みます)。

{-#2}制御シーケンス作成の一部を形成しないため、そのまま展開され、-#2入力ストリーム (プリアンブル内) に残ります。これは#特別な意味を持つため許可されません。マクロ パラメーター文字です。

おそらくあなたは興味があるでしょう

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

関連情報