我正在尝试创建多列,但是按照以下帖子中的建议操作后,出现了错误,提示我遇到了“未定义的控制序列”:
我的代码如下:
\documentclass{beamer}
\usepackage{booktabs,makecell,multirow,tabularx}
\usepackage{ragged2e}
\renewcommand\theadfont{\normalfont\bfseries}
\newcolumntype{L}{>{\RaggedRight\arraybackslash}X}
\newcolumntype{C}{>{\Centering\arraybackslash}X}
\newcommand\mc[1]{\multicolumn{2}{c}{#1}}
\setlength\parindent{0pt}
%\usepackage[justification=centering]{caption}
\usepackage{siunitx}
\usepackage{tikz}
\usepackage{adjustbox}
\begin{document}
\begin{frame}[shrink=25]{P-Values Of Conditional Predictive Test ($\tau = 1$)}
\vspace*{2em}
\setlength{\tabcolsep}{0pt}
\begin{tabular*}{\textwidth}{l @{\extracolsep{\fill}} *{12}{c}}
\toprule {Test}& \multicol{12}{c}{Benchmark}\\
(1,1) & (2,1) & (3,1) & (4,1) & (5,1) & (6,1) & (7,1) & (8,1) & (9,1) & (10,1)& (11,1) & (12,1) \\
\midrule
(1,1) & $\bullet$ & 0.00 & 0.00 & 0.02 & 0.02 & 0.04 & 0.03 & 0.05 & 0.02 & 0.01 & 0.01 & 0.09 \\
(2,1) & $\bullet$ & $\bullet$ & 0.89 & 0.17 & 0.16 & 0.35 & 0.12 & 0.35 & 0.11 & 0.03 & 0.01 & 0.08 \\
(3,1) & $\bullet$ & $\bullet$ & $\bullet$ & 0.82 & 0.21 & 0.29 & 0.08 & 0.31 & 0.07 & 0.01 & 0.01 & 0.03 \\
(4,1) & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & 0.30 & 0.66 & 0.17 & 0.32 & 0.08 & 0.01 & 0.01 & 0.01 \\
(5,1) & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & 0.96 & 0.21 & 0.72 & 0.11 & 0.01 & 0.00 & 0.00 \\
(6,1) & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & 0.11 & 0.61 & 0.10 & 0.05 & 0.01 & 0.01 \\
(7,1) & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & 0.92 & 0.35 & 0.24 & 0.13 & 0.00 \\
(8,1) & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & \textbf{0.15} & 0.11 & 0.00 & 0.00 \\
(9,1) & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & 0.43 & 0.49 & 0.00 \\
(10,1) & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & 0.20 & 0.00 \\
(11,1) & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & 0.00 \\
(12,1) & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ \\
\bottomrule
\end{tabular*}
\end{frame}
\end{document}
基本上我想使用多列来放置一个列标题,上面写着“基准”,但我不确定为什么我会遇到这样的错误。如果有人能提供一些建议,告诉我我做错了什么,我将不胜感激。
谢谢
答案1
据我所知,您在定义多列单元格时犯了错误。相反,错误
\multicol{12}{c}{...}
你应该使用正确的
\multicolumn{12}{c}{...}
。
第二行也有一个错误。缺少一个“&”符号,因此列标题向左移动了一列。更正此错误后,我得到了下表:
表格的相关部分是:
\documentclass{beamer}
\usepackage{booktabs,tabularx}
\usepackage{adjustbox}
\begin{document}
\begin{frame}[shrink=25]{P-Values Of Conditional Predictive Test ($\tau = 1$)}
\vspace*{2em}
\setlength{\tabcolsep}{0pt}
\begin{tabular*}{\textwidth}{l
@{\extracolsep{\fill}}*{12}{c}}%
\toprule
& \multicolumn{12}{c}{Benchmark}\\% <-- multicol
\cmidrule(lr){2-13}
Test & (1,1) & (2,1) & (3,1) & (4,1) & (5,1) & (6,1) & (7,1) & (8,1) & (9,1) & (10,1) & (11,1) & (12,1) \\
\midrule
(1,1) & $\bullet$ & 0.00 & 0.00 & 0.02 & 0.02 & 0.04 & 0.03 & 0.05 & 0.02 & 0.01 & 0.01 & 0.09 \\
... < as in original table > ...
(12,1) & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ & $\bullet$ \\
\bottomrule
\end{tabular*}
\end{frame}
\end{document}
答案2
通常情况下,我建议您使用该multicol
包。不幸的是,它仅支持最多跨 10 列的元素,而您需要一个跨 12 列的元素。因此,我们必须采取一些措施才能使其正常工作。
模仿multicol
包
由于无法在表格内部创建跨列元素,因此只能在表格之前创建它,然后调整垂直间距。
因此,删除包含以下内容的表格行:\toprule{Test} & \multicol{12}{c}{Benchmark} \\
在表格之前,您必须模仿此行的效果。由于\toprule{Test}
会导致misplaced \noalign
错误,请使用\rule{\linewidth}{\heavyrulewidth}
来产生类似的效果,然后将 Test 添加到下一行。
事情变得有点棘手:您必须手动设置“测试”和“基准”之间的空间\hspace
。我弄了一会儿,发现它Test \hspace{60mm} Benchmark
相当接近居中(如果您愿意,可以让它更接近)。
现在,你的表格的开头应该是这样的
\begin{frame}[shrink=25]{P-Values Of Conditional Predictive Test ($\tau = 1$)}
\vspace*{2em}
\setlength{\tabcolsep}{0pt}
\rule{\linewidth}{\heavyrulewidth} % because \toprule gives a misplaced \noalign
Test \hspace{60mm} Benchmark % fiddle with the length in side \hspace until you're satisfied
\begin{tabular*}{\textwidth}{l@{\extracolsep{\fill}} *{12}{c}}
% \toprule{Test} & \multicols{12}{c}{Benchmark} \\ % too many cols for multicols
(1,1) & (2,1) & (3,1) & (4,1) & (5,1) & (6,1) & (7,1) & (8,1) & (9,1) & (10,1)& (11,1) & (12,1) \\
此解决方法非常接近于您使用 获得的结果multicol
。也就是说,包含单词“测试”和“基准”的行(在我看来)似乎需要在其与输出中的表格之间留出更多垂直间距。
调整垂直间距
如果要调整它,请导入命令verbatimbox
的包addvbuffer
。将环境的第一行更改tabular
为
\addvbuffer[2pt 0pt]{\begin{tabular*}{\textwidth}{1@{\extracolsep{\fill}} *{12}{c}}
并在表格环境的最后一行添加一个额外的法语括号end{tabular}}
。这[12pt 0pt]
是表格前后的空白量。我认为2pt
这非常接近,尽管您可能想要不同的东西。
最后说明
不幸的是,使用\addvbuffer
略微缩进会使整个表格看起来有点奇怪。如果您不介意表格前的垂直间距,那么就不要使用,\addvbuffer
这样就不会出现奇怪的缩进。
如果您想修改垂直间距,但又不想让表格奇怪地缩进,您可能可以找到一种方法来缩进前面的段落(包含“测试”和“基准”)以匹配表格。