LaTeX 表格错误 - 额外的对齐标签已更改为 \cr

LaTeX 表格错误 - 额外的对齐标签已更改为 \cr

下表代码存在什么问题?

\begin{table}[!ht]
\caption{Comparative Results}
\label{Results}
\centering
\begin{tabular}{|c|ccc|ccc|ccc|ccc|}
\hline
\textbf{M1 vs.$} & \multicolumn{6}{c|}{\textbf{5fold}} & \multicolumn{6}{c|}{\textbf{10fold}} \\\cline{2-13} & &  \multicolumn{3}{c|}{\textbf{Err1}} & \multicolumn{3}{c|}{\textbf{Err2}} &  \multicolumn{3}{c|}{\textbf{Err1}} & \multicolumn{3}{c|}{\textbf{Err2}} \\\cline{2-13} & & \textbf{C1} & \textbf{C2} & \textbf{C3} & \textbf{C1} & \textbf{C2} & \textbf{C3} & \textbf{C1} & \textbf{C2} & \textbf{C3} & \textbf{C1} & \textbf{C2} & \textbf{C3} \\ \hline
M2 & 13 & 7 & 0 & 15 & 5 & 0 & 0 & 20 & 0 & 0 & 20 & 0    \\
M3 & 11 & 3 & 6 & 12 & 3 & 5 & 3 & 13 & 4 & 0 & 16 & 4    \\
M4 & 10 & 10 & 0 & 10 & 10 & 0 & 4 & 16 & 0 & 0 & 20 & 0    \\    \hline
Total & 34 & 20 & 6 & 37 & 18 & 5    & 7 &    49 & 4    & 0 &    56 & 4    \\    \hline
\end{tabular}

答案1

  1. 您有一个$未“转义”的符号 ( \$)。
  2. 定义 13 列\begin{tabular}{|c|ccc|ccc|ccc|ccc|})但有些行有超过 13 列
  3. 我注释掉了(%)有问题的行,以便您可以看到代码现在可以编译。
  4. 我现在太懒了,无法准确找出总结错误:)。
  5. 一般情况下,我建议你先从通用表格开始,这样可以非常清楚地看到有多少列,参见示例。这样你就可以创建结构并轻松发现错误(计算列数)。

\documentclass{article}

\begin{document}

\begin{table}
\caption{Comparative Results}
\centering
\begin{tabular}{|c|ccc|ccc|ccc|ccc|}
\hline
\textbf{M1 vs.\$} & \multicolumn{6}{c|}{\textbf{5fold}} & \multicolumn{6}{c|}{\textbf{10fold}} \\\cline{2-13} 
%& &  \multicolumn{3}{c|}{\textbf{Err1}} & \multicolumn{3}{c|}{\textbf{Err2}} &  \multicolumn{3}{c|}{\textbf{Err1}} & \multicolumn{3}{c|}{\textbf{Err2}} \\\cline{2-13} 
%& & \textbf{C1} & \textbf{C2} & \textbf{C3} & \textbf{C1} & \textbf{C2} & \textbf{C3} & \textbf{C1} & \textbf{C2} & \textbf{C3} & \textbf{C1} & \textbf{C2} & \textbf{C3} \\ \hline
M2 & 13 & 7 & 0 & 15 & 5 & 0 & 0 & 20 & 0 & 0 & 20 & 0  \\  
M3 & 11 & 3 & 6 & 12 & 3 & 5 & 3 & 13 & 4 & 0 & 16 & 4  \\  
M4 & 10 & 10 & 0 & 10 & 10 & 0 & 4 & 16 & 0 & 0 & 20 & 0   \\  \hline
Total & 34 & 20 & 6 & 37 & 18 & 5   & 7 &   49 & 4  & 0 &   56 & 4  \\  \hline
\end{tabular}
\end{table}

\begin{table}
\caption{Comparative Results}
\centering
\begin{tabular}{|ccc|ccc|}
\hline
\multicolumn{2}{|c}{\textbf{C1 and C2}} & C3 & \textbf{C4} & \textbf{C5} & \textbf{C6}\\\hline
C1 & C2 & C3 & C4 & C5 & C6\\
C1 & C2 & C3 & C4 & C5 & C6\\
C1 & C2 & C3 & C4 & C5 & C6\\
\hline
\end{tabular}
\end{table}

\end{document}

在此处输入图片描述

在此处输入图片描述

答案2

表格代码片段中的错误已在leandriis 的评论Manuel Kuehner 博士的回答(+1)。这里只是一个建议,如何使用新的 LaTeX 3 表格包编写表格:

\documentclass{article}
\usepackage{tabularray}

\begin{document}

\begin{tblr}{
 colspec = {|c| *{4}{*{3}{c}|} },
row{1-3} = {font=\bfseries},
            }
    \hline
\multirow{3}{*}{M1 vs. \$} 
    & \multicolumn{6}{c}{5fold} & \multicolumn{6}{c}{10fold}            \\
    \cline{2-13}
    & \multicolumn{3}{c}{Err1}  & \multicolumn{3}{c}{Err2}
    & \multicolumn{3}{c}{Err1}  & \multicolumn{3}{c}{Err2}              \\
    \cline{2-13} 
    & C1 & C2 & C3 &    C1 & C2 & C3 &  C1 & C2 & C3 &  C1 & C2 & C3    \\ 
    \hline
M2  & 13 &  7 &  0 &    15 &  5 &  0 &   0 & 20 &  0 &   0 & 20 &  0    \\
M3  & 11 &  3 &  6 &    12 &  3 &  5 &   3 & 13 &  4 &   0 & 16 &  4    \\
M4  & 10 & 10 &  0 &    10 & 10 &  0 &   4 & 16 &  0 &   0 & 20 &  0    \\  
        \hline
Total 
    & 34 & 20 &  6 &    37 & 18 &  5 &   7 & 49 &  4 &   0 & 56 &  4    \\  
    \hline
\end{tblr}

\end{document}

我尝试使用它\NewTableCommand来定义\multicolumn命令的简洁性。不幸的是,软件包作者提出的建议tabularray尚未按预期发挥作用。希望新软件包发布后这个问题能够得到解决。到目前为止,让我们坚持使用这个答案的第一个版本。

编辑(1): 最近tabularray(从 2022A 开始)上述代码不再起作用。命令multicolumn不再受支持,现在应按\SetCell如下所示的方式使用它:

\documentclass{article}
\usepackage{tabularray}

\begin{document}

\begin{tblr}{
 colspec = {|c| *{4}{*{3}{c}|} },
row{1-3} = {font=\bfseries},
            }
    \hline
\SetCell[r=3]{c}    M1 vs. \$ 
    & \SetCell[c=6]{c}  5fold   
        &   &   &   &   &   &   \SetCell[c=6]{c}  10fold              
                                &   &   &   &   &                       \\
    \hline
    & \SetCell[c=6]{c}  Err1    
        &   &   &   &   &   &   \SetCell[c=6]{c}  Err2 
                                &   &   &   &   &                       \\
    \hline
    & C1 & C2 & C3 &    C1 & C2 & C3 &  C1 & C2 & C3 &  C1 & C2 & C3    \\
    \hline
M2  & 13 &  7 &  0 &    15 &  5 &  0 &   0 & 20 &  0 &   0 & 20 &  0    \\
M3  & 11 &  3 &  6 &    12 &  3 &  5 &   3 & 13 &  4 &   0 & 16 &  4    \\
M4  & 10 & 10 &  0 &    10 & 10 &  0 &   4 & 16 &  0 &   0 & 20 &  0    \\
    \hline
Total
    & 34 & 20 &  6 &    37 & 18 &  5 &   7 & 49 &  4 &   0 & 56 &  4    \\
    \hline
\end{tblr}

结果和以前一样。

目前缩写multicolum没有特殊意义,但如果有人喜欢使用它,可以将其定义为,例如,\NewTableCommand\SCC[1]{\SetCell[c=#1]{c}}然后用作`\SCC{6}

编辑(2): 使用 2022B 版本可用的库{functional},您可以用它计算表格最后一行的值:

\documentclass{article}
\usepackage{tabularray}
\UseTblrLibrary{functional}

\begin{document}
\begingroup
\IgnoreSpacesOn
\prgNewFunction \funcSum {} {
\intStepOneInline {2} {\arabic{colcount}} { % calculation from column 2 further
\intZero \lTmpaInt
\intStepOneInline {4} {\arabic{rowcount}-1} {% calculation from row further
\intAdd \lTmpaInt {\cellGetText {####1} {##1}}
}
\cellSetText {\expWhole{\arabic{rowcount}}} {##1} {\intUse\lTmpaInt}
}
}
\IgnoreSpacesOff
%
\begin{tblr}{
 colspec = {|c| *{4}{*{3}{c}|} }, 
row{1-3} = {font=\bfseries},
process=\funcSum,
            }
    \hline
\SetCell[r=3]{c}    M1 vs. \$ 
    & \SetCell[c=6]{c}  5fold   
        &   &   &   &   &   &   \SetCell[c=6]{c}  10fold              
                                &   &   &   &   &                       \\
    \hline
    & \SetCell[c=6]{c}  Err1    
        &   &   &   &   &   &   \SetCell[c=6]{c}  Err2 
                                &   &   &   &   &                       \\
    \hline
    & C1 & C2 & C3 &    C1 & C2 & C3 &  C1 & C2 & C3 &  C1 & C2 & C3    \\
    \hline
M2  & 13 &  7 &  0 &    15 &  5 &  0 &   0 & 20 &  0 &   0 & 20 &  0    \\
M3  & 11 &  3 &  6 &    12 &  3 &  5 &   3 & 13 &  4 &   0 & 16 &  4    \\
M4  & 10 & 10 &  0 &    10 & 10 &  0 &   4 & 16 &  0 &   0 & 20 &  0    \\
    \hline
Total
    &    &    &    &       &    &    &     &    &    &     &    &       \\
    \hline
\end{tblr}
\endgroup
\end{document}

答案3

这是使用 OpTeX 制作该表的方法

\def\msc{\mspan3[c|]}
\table{|c|3c|3c|3c|3c|}{\crl
              & \mspan6[c|]{\bf 5fold}           & \mspan6[c|]{\bf 10fold}      \crlp{2-13} 
\bf M1 vs. \$ & \msc{\bf Err1}  & \msc{\bf Err2} & \msc{\bf Err1} & \msc{\bf Err2}\crlp{2-13}
              & C1 & C2 & C3    & C1 & C2 & C3   & C1 & C2 & C3   & C1 & C2 & C3 \crl
M2            & 13 & 7  & 0     & 15 & 5  & 0    & 0  & 20 & 0    & 0 & 20 & 0  \cr
M3            & 11 & 3  & 6     & 12 & 3  & 5    & 3  & 13 & 4    & 0 & 16 & 4  \cr  
M4            & 10 & 10 & 0     & 10 & 10 & 0    & 4  & 16 & 0    & 0 & 20 & 0  \crl
Total         & 34 & 20 & 6     & 37 & 18 & 5    & 7  & 49 & 4    & 0 & 56 & 4  \crl
}
\bye

答案4

这是使用 来制作该表的一种{NiceTabular}方法nicematrix

\documentclass{article}
\usepackage{nicematrix}

\begin{document}

\begin{NiceTabular}{|c|ccc|ccc|ccc|ccc|}[cell-space-limits=2pt]
\Hline
\RowStyle[nb-rows=3]{\bfseries}
\Block{3-1}{M1 vs. \$} & \Block{1-6}{5fold}&&&&&& \Block{1-6}{10fold} \\
\Hline
& \Block{1-3}{Err1} &&& \Block{1-3}{Err1} &&& \Block{1-3}{Err1} &&& \Block{1-3}{Err2} \\
\Hline
    & C1 & C2 & C3 & C1 & C2 & C3 & C1 & C2 & C3 & C1 & C2 & C3    \\ 
\Hline
M2  & 13 &  7 &  0 &    15 &  5 &  0 &   0 & 20 &  0 &   0 & 20 &  0    \\
M3  & 11 &  3 &  6 &    12 &  3 &  5 &   3 & 13 &  4 &   0 & 16 &  4    \\
M4  & 10 & 10 &  0 &    10 & 10 &  0 &   4 & 16 &  0 &   0 & 20 &  0    \\  
\Hline
Total 
    & 34 & 20 &  6 &    37 & 18 &  5 &   7 & 49 &  4 &   0 & 56 &  4    \\  
\Hline
\end{NiceTabular}

\end{document}

您需要多次编译(因为nicematrix在后台使用 PGF/Tikz 节点)。

上述代码的输出

相关内容