考虑以下 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
put 位于新行的开头而不是上一行的结尾?我该如何修复它?
我已经看到,将其放在\\
表格内部而不是宏中可以使事情正常进行:
\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}