尝试使用多列并出现错误

尝试使用多列并出现错误

我尝试在这里设计一个整洁的表格,我正在做的事情是:

\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) S12 个数据列的列类型来对齐其各自的小数点上的数字,同时允许印刷正确的-(“减号”)符号,以及 (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}

相关内容