我想定义一个新命令\tableheadline
,该命令 (1) 以某种方式格式化标题文本,并且 (2) 接受一个可选参数,用于在标题居中的同时跨越多列。我尝试了以下实现:
\documentclass{minimal}
\newcommand{\tableheadline}[2][1]{\multicolumn{#1}{c}{\textit{#2}}}
% \newcommand{\tableheadline}[2][1]{\multicolumn{1}{c}{\textit{#2}}}
\begin{document}
\begin{tabular}[\textwidth]{cc}
\tableheadline[2]{C}
\tableheadline{A} & \tableheadline{B} \\
0 & 1 \\
2 & 3 \\
\end{tabular}
\end{document}
然而,这给了我一个错误:
! Misplaced \omit.
\multispan ->\omit
\@multispan
l.8 \tableheadline[2]{C}
当我甚至不使用可选参数时,也会收到错误(请参阅 MWE 中的注释行)。你知道我做错了什么吗?
答案1
带有可选参数的命令将停止扫描\omit
并启动一个单元格;当\multicolumn
发现时已经太晚了。
xparse
但是,您可以使用:
\usepackage{xparse}
\NewExpandableDocumentCommand{\tableheadline}{O{1}m}{\multicolumn{#1}{c}{\textit{#2}}}
仅当可选参数不是列表中的最后一个参数时才有可能,但这是您的情况。
完整示例:
\documentclass{article}
\usepackage{xparse}
\NewExpandableDocumentCommand{\tableheadline}{O{1}m}{%
\multicolumn{#1}{c}{\textit{#2}}%
}
\begin{document}
\begin{tabular}{cc}
\tableheadline[2]{C} \\
\tableheadline{A} & \tableheadline{B} \\
0 & 1 \\
2 & 3 \\
\end{tabular}
\end{document}
笔记。
[\textwidth]
什么都不做:可选参数可以是t
,b
或c
,其他任何内容都会被忽略。您未能
\\
结束第一行。不要用作
minimal
例子。