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