表中使用 \multicolumn 时出现 \newcommand 错误

表中使用 \multicolumn 时出现 \newcommand 错误

我想定义一个新命令\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}

在此处输入图片描述

笔记。

  1. [\textwidth]什么都不做:可选参数可以是tbc,其他任何内容都会被忽略。

  2. 您未能\\结束第一行。

  3. 不要用作minimal例子。

相关内容