我想编写一个命令来生成一个表格,但也可以添加一个包含可选参数内容的多列。我尝试使用来ifthenelse
检查可选参数是否为空,但多列周围的括号会给我带来错误mispaced \omit
,并导致列错位。
该命令如下所示:
\newcommand{\namecol}[1][]{
\begin{table}[h!]
\begin{tabular}{|rlrl|}
\ifthenelse{\equal{#1}{}}{}{%
\multicolumn{4}{|l|}{#1} \\
}
a & b & c & d \\
e & f & g & h \\
\end{tabular}
\end{table}
}
\namecol
下面分别是调用和的结果\namecol[x]
:
答案1
答案2
问题在于,它\multicolumn
必须是单元格中的第一个对象(宏扩展之后),但却\ifthenelse
插入了其他东西,当\multicolumn
最终找到它时,已经太晚了。
一种更简单的方法是使用xparse
,我们可以使用可扩展测试来测试是否给出了可选参数\IfValueT
。
\documentclass{article}
\usepackage{xparse} % not needed if using LaTeX released on or after 2020-10-01
\NewDocumentCommand{\namecol}{o}{%
\begin{table}[htp!]% <--- not just h!
\begin{tabular}{|rlrl|}
\IfValueT{#1}{\multicolumn{4}{|l|}{#1} \\}
a & b & c & d \\
e & f & g & h \\
\end{tabular}
\end{table}
}
\begin{document}
\namecol
\namecol[x]
\end{document}