我尝试在这里设计一个整洁的表格,我正在做的事情是:
\begin{table}[ht]
\centering
\resizebox{\textwidth}{!}{%
\begin{tabular}{r r r r r r r r r r r r r}
\hline
\multicolumn{3}{r}{Set A}
&&
\multicolumn{3}{r}{Set B}
&&
\multicolumn{3}{r}{Set C}
&&
\multicolumn{3}{r}{Set D} \\\cmidrule(r){2-4}\cmidrule(r){5-7}\cmidrule(r){8-10}\cmidrule(r){11-13}\\
& Coef & tstat & Adj.R-sq & Coef & tstat & Adj.R-sq & Coef & tstat & Adj.R-sq & Coef & tstat & Adj.R-sq \\
\hline
logGP & -2.735 & -4.203 & 0.048 & -1.047 & -2.675 & 0.018 & 0.094 & 0.453 & -0.002 & 0.193 & 1.710 & 0.006 \\
logPD & 0.096 & 0.281 & -0.003 & 0.028 & 0.139 & -0.003 & -0.012 & -0.115 & -0.003 & -0.005 & -0.087 & -0.003 \\
PNY & 0.233 & 0.298 & -0.003 & -0.040 & -0.086 & -0.003 & -0.165 & -0.677 & -0.002 & 0.080 & 0.588 & -0.002 \\
CAY & -0.823 & -0.343 & -0.003 & 0.752 & 0.526 & -0.002 & 1.315 & 1.766 & 0.006 & 0.729 & 1.787 & 0.007 \\
VRP & 0.002 & 1.386 & 0.003 & -0.001 & -1.451 & 0.004 & 0.001 & 1.784 & 0.007 & -0.000 & -0.688 & -0.002 \\
Def.Prem & 0.112 & 1.513 & 0.004 & 0.036 & 0.813 & -0.001 & -0.034 & -1.495 & 0.004 & -0.061 & -5.015 & 0.069 \\
Inflation & -4.642 & -0.411 & -0.003 & 5.123 & 0.767 & -0.001 & -11.654 & -3.389 & 0.031 & -2.761 & -1.444 & 0.003 \\
Termspread & -0.013 & -0.524 & -0.002 & -0.005 & -0.307 & -0.003 & 0.025 & 3.330 & 0.030 & 0.044 & 12.617 & 0.326 \\
\hline
\end{tabular}
}
\caption{MyTableCaption}
\label{table:MyTableLabel}
\end{table}
我收到此错误并且无法继续:!额外的对齐制表符已更改为 \cr。
答案1
- 请在提问时始终提供 MWE(最小工作示例),这是一个小型、完整、可编译的文档,可重现您的问题。只有表格代码片段不会提供有关文档页面布局的信息,而这在您的表格设计中很重要。
- 关于错误信息本身,它已由@leandriis 评论解决,并在@wiped 回答。
- 一些题外的建议:
- 对于负数,您应该使用正确的减号,因此在有数字的列中,我建议使用
S
列类型,它可以提供一致的数字打印 - 不要用 来终止水平线
\\
, - 由于表格宽度大于文本宽度,因此将列间空间的计算(
\tabcolsep
)留给宏是合理的\extracolsep
,这样可以将表格宽度减小到\textwidth
:
- 对于负数,您应该使用正确的减号,因此在有数字的列中,我建议使用
\documentclass{article}
\usepackage[margin=25mm]{geometry}
\usepackage{booktabs}
\usepackage{siunitx}
\begin{document}
\begin{table}[ht]
\small
\setlength\tabcolsep{0pt}
\begin{tabular*}{\linewidth}{@{\extracolsep{\fill}}r *{12}{S[table-format=-1.3]} @{}}
\toprule
\multicolumn{3}{r}{Set A}
& \multicolumn{3}{r}{Set B}
& \multicolumn{3}{r}{Set C}
& \multicolumn{3}{r}{Set D} \\
\cmidrule{2-4}\cmidrule(l){5-7}\cmidrule(l){8-10}\cmidrule(l){11-13}
& {Coef} & {tstat} & {Adj.R-sq}
& {Coef} & {tstat} & {Adj.R-sq}
& {Coef} & {tstat} & {Adj.R-sq}
& {Coef} & {tstat} & {Adj.R-sq} \\
\midrule
logGP & -2.735 & -4.203 & 0.048 & -1.047 & -2.675 & 0.018 & 0.094 & 0.453 & -0.002 & 0.193 & 1.710 & 0.006 \\
logPD & 0.096 & 0.281 & -0.003 & 0.028 & 0.139 & -0.003 & -0.012 & -0.115 & -0.003 & -0.005 & -0.087 & -0.003 \\
PNY & 0.233 & 0.298 & -0.003 & -0.040 & -0.086 & -0.003 & -0.165 & -0.677 & -0.002 & 0.080 & 0.588 & -0.002 \\
CAY & -0.823 & -0.343 & -0.003 & 0.752 & 0.526 & -0.002 & 1.315 & 1.766 & 0.006 & 0.729 & 1.787 & 0.007 \\
VRP & 0.002 & 1.386 & 0.003 & -0.001 & -1.451 & 0.004 & 0.001 & 1.784 & 0.007 & -0.000 & -0.688 & -0.002 \\
Def.Prem & 0.112 & 1.513 & 0.004 & 0.036 & 0.813 & -0.001 & -0.034 & -1.495 & 0.004 & -0.061 & -5.015 & 0.069 \\
Inflation & -4.642 & -0.411 & -0.003 & 5.123 & 0.767 & -0.001 & -11.654 & -3.389 & 0.031 & -2.761 & -1.444 & 0.003 \\
Termspread & -0.013 & -0.524 & -0.002 & -0.005 & -0.307 & -0.003 & 0.025 & 3.330 & 0.030 & 0.044 & 12.617 & 0.326 \\
\bottomrule
\end{tabular*}
\caption{My Table Caption}
\label{table:MyTableLabel}
\end{table}
\end{document}
答案2
这就是典型的例子,说明为什么 LaTeX 永远无法超越 TeX 并隐藏 TeX,尽管它尝试了几十年。
有多少百分比的 LaTeX 用户理解错误消息“额外的对齐标签已更改为 \cr”?只有少数用户,因为 LaTeX 级别通常不记录此 TeX 级别。
消息是什么意思?TeX 中的表格由\halign
基元创建,特别是宏tabular
使用此基元。首先在 中声明列数(及其设计),\halign
然后为每行表格创建行item & item & ... & item \cr
。如果声明了 n 列,则必须有 n-1 个对齐制表符&
和一个\cr
。您可以写入少于 n 个项目(然后\cr
转到下一行,一些列留空),但你不能写入超过 n 个项目,即超过 n-1 个对齐标签&
。如果您尝试这样做,则会得到上述错误。
LaTeX 将原始命令隐藏到具有上下文相关含义的\cr
控制序列中,但当处理其参数时,则意味着恰好。LaTeX 的宏跨越 k 个项目,这意味着它会创建恰好 k-1 个虚拟对齐标签。\\
\halign
\\
\cr
\multicolumn{k}{decl}{text}
现在,您可以计算表格中每行有多少个对齐标签。错误消息“Extra alignemnt tab”告诉您,对齐标签的数量多于此列声明中列出的数量\halign
。
编辑:我补充一些关于此错误消息的第二部分“已更改为 \cr”的内容。TeX 通常会说明它如何恢复错误。假设您在表中声明了四列,但您写了
itemA & itemB & itemC & itemD & itemF \cr
% ^ ... this is the reason of the error
然后错误信息如下:
! Extra alignment tab has been changed to \cr.
...
... itemA & item B & item C & item D &
itemF \cr
错误消息行被分成两行的位置非常重要。第一条消息行中的最后一个标记导致了错误。TeX 建议通过将其替换为 来更正此问题&
,\cr
即我们得到:
itemA & itemB & itemC & itemD \cr itemF \cr
得出结果表:
itemA itemB itemC itemD
itemF
next items ...
答案3
这就是你的想法吗
\begin{table}[h]
\noindent
\hskip-3.0cm\footnotesize
\begin{tabular}{rrrrrrrrrrrrr}
\hline
\multicolumn{3}{r}{Set A}%
&%
\multicolumn{3}{r}{Set B}%
&%
\multicolumn{3}{r}{Set C}%
&%
\multicolumn{3}{r}{Set D}& \\
% \cmidrule(r){2-4}\cmidrule(r){5-7}\cmidrule(r){8-
% 10}\cmidrule(r){11-13}\\
& Coef & tstat & Adj.R-sq & Coef & tstat & Adj.R-sq & Coef & tstat &
Adj.R-sq & Coef & tstat & Adj.R-sq \\
\hline
logGP & -2.735 & -4.203 & 0.048 & -1.047 & -2.675 & 0.018 & 0.094 & 0.453
& -0.002 & 0.193 & 1.710 & 0.006 \\
logPD & 0.096 & 0.281 & -0.003 & 0.028 & 0.139 & -0.003 & -0.012 & -0.115
& -0.003 & -0.005 & -0.087 & -0.003 \\
PNY & 0.233 & 0.298 & -0.003 & -0.040 & -0.086 & -0.003 & -0.165 & -0.677
& -0.002 & 0.080 & 0.588 & -0.002 \\
CAY & -0.823 & -0.343 & -0.003 & 0.752 & 0.526 & -0.002 & 1.315 & 1.766 &
0.006 & 0.729 & 1.787 & 0.007 \\
VRP & 0.002 & 1.386 & 0.003 & -0.001 & -1.451 & 0.004 & 0.001 & 1.784 &
0.007 & -0.000 & -0.688 & -0.002 \\
Def.Prem & 0.112 & 1.513 & 0.004 & 0.036 & 0.813 & -0.001 & -0.034 &
-1.495 & 0.004 & -0.061 & -5.015 & 0.069 \\
Inflation & -4.642 & -0.411 & -0.003 & 5.123 & 0.767 & -0.001 & -11.654 &
-3.389 & 0.031 & -2.761 & -1.444 & 0.003 \\
Termspread & -0.013 & -0.524 & -0.002 & -0.005 & -0.307 & -0.003 & 0.025 &
3.330 & 0.030 & 0.044 & 12.617 & 0.326 \\
\hline
\end{tabular}
\caption{MyTableCaption}
\label{table:MyTableLabel}
\end{table}
答案4
问题的直接原因是你写了
\multicolumn{3}{r}{Set A} &&
\multicolumn{3}{r}{Set B} &&
\multicolumn{3}{r}{Set C} &&
\multicolumn{3}{r}{Set D}
它要求tabular
环境至少有 15 列,而您将其定义为有 13 列(类型r
)。
为了解决这个问题,我建议你将前面的代码块更改为
& \multicolumn{3}{c}{Set A}
& \multicolumn{3}{c}{Set B}
& \multicolumn{3}{c}{Set C}
& \multicolumn{3}{c}{Set D}
请注意,我建议你先输入一个空白单元格,然后输入 4居中,而不是右对齐的标签(“集合 A”、“集合 B”等等)。
这是一个整体上与以下解决方案非常相似的解决方案@Zarko 的。例如,(a) 它不使用 hack \resizebox
,并且它使用 (b) S
12 个数据列的列类型来对齐其各自的小数点上的数字,同时允许印刷正确的-
(“减号”)符号,以及 (c)tabular*
简化将表格压缩到文本块宽度的过程的环境。相对于 @Zarko 的解决方案的一个区别是已经提到的 4 个\multicolumn
指令的变化。另一个区别涉及标题单元格的简化,我在其中写$\bar{R}^2$
而不是Adj.R-sq
;这个简单的更改释放了大量的(水平)空白。
下面的截图显示了两个表格,它们的字体大小(相对)完全相同:上面的表格使用默认字体,即 ,\normalsize
而下面的表格使用\small
。我将由您来决定哪种字体大小“更好”。
\documentclass{article} % or some other suitable document class
\usepackage[letterpaper,margin=1in]{geometry} % set suitable page size parameters
\usepackage{booktabs,siunitx}
\begin{document}
\begin{table}[ht]
\setlength\tabcolsep{0pt} % let LaTeX figure out the optimal amount of intercolumn whitespace
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}
l *{6}{S[table-format=-1.3]}
S[table-format=-2.3] % one column needs a bit more space than the other 11
*{5}{S[table-format=-1.3]} }
\toprule
&\multicolumn{3}{c}{Set A} & \multicolumn{3}{c}{Set B}
&\multicolumn{3}{c}{Set C} & \multicolumn{3}{c}{Set D} \\
\cmidrule{2-4} \cmidrule{5-7} \cmidrule{8-10} \cmidrule{11-13}
& {Coef} & {tstat} & {$\bar{R}^2$} & {Coef} & {tstat} & {$\bar{R}^2$}
& {Coef} & {tstat} & {$\bar{R}^2$} & {Coef} & {tstat} & {$\bar{R}^2$} \\
\midrule
logGP & -2.735 & -4.203 & 0.048 & -1.047 & -2.675 & 0.018 & 0.094 & 0.453 & -0.002 & 0.193 & 1.710 & 0.006 \\
logPD & 0.096 & 0.281 & -0.003 & 0.028 & 0.139 & -0.003 & -0.012 & -0.115 & -0.003 & -0.005 & -0.087 & -0.003 \\
PNY & 0.233 & 0.298 & -0.003 & -0.040 & -0.086 & -0.003 & -0.165 & -0.677 & -0.002 & 0.080 & 0.588 & -0.002 \\
CAY & -0.823 & -0.343 & -0.003 & 0.752 & 0.526 & -0.002 & 1.315 & 1.766 & 0.006 & 0.729 & 1.787 & 0.007 \\
VRP & 0.002 & 1.386 & 0.003 & -0.001 & -1.451 & 0.004 & 0.001 & 1.784 & 0.007 & -0.000 & -0.688 & -0.002 \\
DefPrem& 0.112 & 1.513 & 0.004 & 0.036 & 0.813 & -0.001 & -0.034 & -1.495 & 0.004 & -0.061 & -5.015 & 0.069 \\
Inflation&-4.642&-0.411 & -0.003 & 5.123 & 0.767 & -0.001 &-11.654 & -3.389 & 0.031 & -2.761 & -1.444 & 0.003 \\
Termspread&-0.013&-0.524 &-0.002 & -0.005 & -0.307 & -0.003 & 0.025 & 3.330 & 0.030 & 0.044 & 12.617 & 0.326 \\
\bottomrule
\end{tabular*}
\caption{Use default font size, i.e., \texttt{\string\normalsize}}
\label{table:default_size}
\bigskip\bigskip
\small % 10% linear reduction in font size
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}
l *{6}{S[table-format=-1.3]}
S[table-format=-2.3] % one column needs a bit more space than the other 11
*{5}{S[table-format=-1.3]} }
\toprule
&\multicolumn{3}{c}{Set A} &\multicolumn{3}{c}{Set B}
&\multicolumn{3}{c}{Set C} &\multicolumn{3}{c}{Set D} \\
\cmidrule{2-4} \cmidrule{5-7} \cmidrule{8-10} \cmidrule{11-13}
& {Coef} & {tstat} & {$\bar{R}^2$} & {Coef} & {tstat} & {$\bar{R}^2$}
& {Coef} & {tstat} & {$\bar{R}^2$} & {Coef} & {tstat} & {$\bar{R}^2$} \\
\midrule
logGP & -2.735 & -4.203 & 0.048 & -1.047 & -2.675 & 0.018 & 0.094 & 0.453 & -0.002 & 0.193 & 1.710 & 0.006 \\
logPD & 0.096 & 0.281 & -0.003 & 0.028 & 0.139 & -0.003 & -0.012 & -0.115 & -0.003 & -0.005 & -0.087 & -0.003 \\
PNY & 0.233 & 0.298 & -0.003 & -0.040 & -0.086 & -0.003 & -0.165 & -0.677 & -0.002 & 0.080 & 0.588 & -0.002 \\
CAY & -0.823 & -0.343 & -0.003 & 0.752 & 0.526 & -0.002 & 1.315 & 1.766 & 0.006 & 0.729 & 1.787 & 0.007 \\
VRP & 0.002 & 1.386 & 0.003 & -0.001 & -1.451 & 0.004 & 0.001 & 1.784 & 0.007 & -0.000 & -0.688 & -0.002 \\
DefPrem& 0.112 & 1.513 & 0.004 & 0.036 & 0.813 & -0.001 & -0.034 & -1.495 & 0.004 & -0.061 & -5.015 & 0.069 \\
Inflation&-4.642&-0.411 & -0.003 & 5.123 & 0.767 & -0.001 &-11.654 & -3.389 & 0.031 & -2.761 & -1.444 & 0.003 \\
Termspread&-0.013&-0.524 &-0.002 & -0.005 & -0.307 & -0.003 & 0.025 & 3.330 & 0.030 & 0.044 & 12.617 & 0.326 \\
\bottomrule
\end{tabular*}
\caption{Use \texttt{\string\small} font size}
\label{table:small_size}
\end{table}
\end{document}