为什么这个宏将表的元素放在错误的行上?

为什么这个宏将表的元素放在错误的行上?

考虑以下 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

为什么4put 位于新行的开头而不是上一行的结尾?我该如何修复它?

我已经看到,将其放在\\表格内部而不是宏中可以使事情正常进行:

\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位于第 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}

在此处输入图片描述

相关内容