為什麼這個宏會將表格的元素放在錯誤的行上?

為什麼這個宏會將表格的元素放在錯誤的行上?

考慮以下 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,但我不希望其介面依賴於放置//,並且&明確地,我希望它們隱藏在巨集內。

答案1

\macro(原文如此!)被定義為具有可選參數。如果缺少此功能,則呼叫與下一個表格行的數字\macro{3}{4}相同。\macro[]{3}4

「錯誤」用法中的列移位清晰可見。3位於第四列,而不是要求的第三列。

\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}

在此輸入影像描述

相關內容