次の 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}