このマクロはなぜテーブルの要素を間違った行に配置するのでしょうか?

このマクロはなぜテーブルの要素を間違った行に配置するのでしょうか?

次の MWE を検討してください。

\documentclass[a4paper,10pt]{article}

\newcommand{\macro}[2][]{%
    & something & #2 & #1 \\
}

\begin{document}
\begin{tabular}{lccc}
\macro{3}{4}
\end{tabular}

\end{document}

生成される出力は次のようになります。

    something    3
4

4前の行の末尾ではなく、新しい行の先頭に配置される理由は何ですか? どうすれば修正できますか?

\\マクロの代わりに表形式内に配置すると、機能することがすでにわかりました。

\documentclass[a4paper,10pt]{article}

\newcommand{\macro}[2][]{%
    & something & #2 & #1
}

\begin{document}
\begin{tabular}{lccc}
\macro{3}{4}\\
\end{tabular}

\end{document}

しかし、これは私が望んでいることではありません。私は、内部で使用する新しい環境を定義していますtabularが、そのインターフェースが put に依存することは望んでおらず//&明示的にマクロ内に隠したいと考えています。

答え1

マクロ\macro(sic!) はオプションの引数を持つように定義されています。これがない場合、呼び出しは\macro{3}{4}と同じになり\macro[]{3}、次の表の行の図4が読み取られます。

「間違った」使用法での列のシフトがはっきりとわかります。3要求された 3 列目ではなく、4 列目にあります。

\documentclass[a4paper,10pt]{article}

\newcommand{\macro}[2][]{%
    & something & #2 & #1 \\
}

\begin{document}
Does not work

\begin{tabular}{lccc}
\macro{3}{4}
\end{tabular}

Works

\begin{tabular}{lccc}
\macro[3]{4}
\end{tabular}

\end{document}

ここに画像の説明を入力してください

答え2

オプション引数なしでマクロが必要な場合:

\documentclass[a4paper,10pt]{article}

\newcommand{\macro}[2]{% notice the lack of the second brackets here
    & something & #2 & #1 \\
}

\begin{document}
\begin{tabular}{lccc}
\macro{3}{4}
\end{tabular}

\end{document}

ここに画像の説明を入力してください

関連情報