我正在尝试创建一个多列表格,将列标题分成两行,每列都有两个子列(第一列除外)。但无法正常工作。有什么帮助吗?
\documentclass[twoside,11pt]{article}
\usepackage{multicol}
\begin{document}
\begin{table}
\centering
\caption{Optimal R (in \%).\\Options: T for threshold, CS for cost-sensitive and CS{\small \&}T for hybrid. }
\setlength{\tabcolsep}{0.15cm}
\begin{tabular}{|l*{16}{c}|}
\hline
{Baseline \\ Options} & \multicolumn{2}{c}{SVP\\ --} & \multicolumn{2}{c}{SV \\ \sc t} & \multicolumn{2}{c}{SV\\ \sc cs} & \multicolumn{2}{c}{SV\\ \sc t} & \multicolumn{2}{c}{SV \\ \sc cs{\scriptsize \&}t} & \multicolumn{2}{c}{SV \\ \sc t} & \multicolumn{2}{c}{SV \\ \sc cs} & \multicolumn{2}{c}{SV \\ \sc cs{\scriptsize \&}t} \\
& 1 & 2 & 1 & 2 & 1 & 2 & 1 & 2 & 1 & 2 & 1 & 2 & 1 & 2 & 1 & 2 & 1 \\
\hline
& & & & & & & & & & & & & & & & & \\
Ad & 67.3 & 67.3 & 67.9 & 67.9 & 67.9 & 67.9 & 67.9 & 67.9 & 67.9 & 67.9 & 67.9 & 67.9 & 67.9 & 67.9 & 67.9 & 67.9 & 67.9 \\
\hline
\end{tabular}
\label{tab:tab_bin_post}
\end{table}
\end{document}
答案1
l
换行符在或列中不起作用c
。您需要p
列或嵌套tabular
。以下示例只是为表头的第二行创建了第二行。
此外,该表格对于普通的纵向页面来说太大了,因此我通过包rotating
和环境对其进行了旋转sidewaystable
。
并且booktabs
使用包装来获得更好的线路和线路周围适当的间距:
\documentclass[twoside,11pt]{article}
\usepackage{rotating}
\usepackage{booktabs}
\begin{document}
\begin{sidewaystable}
\centering
\caption[Optimal R (in \%)]{%
Optimal R (in \%).\\
Options: T for threshold, CS for
cost-sensitive and CS{\small \&}T for hybrid.}
\setlength{\tabcolsep}{0.15cm}
\begin{tabular}{l*{16}{c}}
\toprule
Baseline
& \multicolumn{2}{c}{SVP}
& \multicolumn{2}{c}{SV}
& \multicolumn{2}{c}{SV}
& \multicolumn{2}{c}{SV}
& \multicolumn{2}{c}{SV}
& \multicolumn{2}{c}{SV}
& \multicolumn{2}{c}{SV}
& \multicolumn{2}{c}{SV} \\
Options
& \multicolumn{2}{c}{--}
& \multicolumn{2}{c}{\scshape t}
& \multicolumn{2}{c}{\scshape cs}
& \multicolumn{2}{c}{\scshape t}
& \multicolumn{2}{c}{\scshape cs{\scriptsize\&}t}
& \multicolumn{2}{c}{\scshape t}
& \multicolumn{2}{c}{\scshape cs}
& \multicolumn{2}{c}{\scshape cs{\scriptsize\&}t}
\\
& 1 & 2 & 1 & 2 & 1 & 2 & 1 & 2 & 1 & 2 & 1 & 2 & 1 & 2 & 1 & 2
\\
\midrule
Ad & 67.3 & 67.3 & 67.9 & 67.9 & 67.9 & 67.9 & 67.9 & 67.9 & 67.9
& 67.9 & 67.9 & 67.9 & 67.9 & 67.9 & 67.9 & 67.9 \\
\bottomrule
\end{tabular}
\label{tab:tab_bin_post}
\end{sidewaystable}
\end{document}
答案2
假设你使用的纸张尺寸为 A4 或 US-Letter,水平边距为 1 英寸,那么表格就刚好(但仅仅是刚好!)可以挤进文本块中,如果你可以适当减小 的值\tabcolsep
。我建议你使用一个tabular*
环境,将其宽度设置为\textwidth
,然后让 LaTeX 处理繁琐的工作,即计算出使表格占据预期宽度所需的列间空白量。
我还建议您(i)使用包的线条绘制宏booktabs
,(ii)通过提供单身的(三)\cmidrule
明智地使用说明为表格标题中的材料提供进一步的视觉结构,以及(四)将当前命令参数中的一些材料\caption
放在以下\sc
标题本身。最后,不要在 LaTeX 文档中使用说明。而是使用\textsc{...}
或{\scshape ...}
。
\documentclass[twoside,11pt]{article}
\usepackage{booktabs,caption}
\usepackage[margin=1in, letterpaper]{geometry} % choose margins here
\newcommand{\mc}[1]{\multicolumn{2}{c}{#1}} % handy utility macro
\begin{document}
\begin{table}
\caption{Optimal R (in \%)} \label{tab:tab_bin_post}
Options: \textsc{t} for threshold,
\textsc{cs} for cost-sensitive, and
\textsc{cs{\scriptsize \&}t} for hybrid.
\medskip
\setlength{\tabcolsep}{0.1mm} % let LaTeX figure out nec. amount of intercol. whitespace
\begin{tabular*}{\textwidth}{l @{\extracolsep{\fill}} *{16}{c}}
\toprule
Baseline & \mc{SVP} & \multicolumn{14}{c}{SV}\\
\cmidrule(l){2-3} \cmidrule{4-17}
Options & \mc{--}
& \mc{\scshape t} & \mc{\scshape cs}
& \mc{\scshape t }& \mc{\scshape cs{\scriptsize \&}t}
& \mc{\scshape t} & \mc{\scshape cs}
& \mc{\scshape cs{\scriptsize \&}t} \\
\cmidrule(l){2-3} \cmidrule{4-5} \cmidrule{6-7} \cmidrule{8-9}
\cmidrule{10-11} \cmidrule{12-13} \cmidrule{14-15} \cmidrule{16-17}
& 1 & 2 & 1 & 2 & 1 & 2 & 1 & 2
& 1 & 2 & 1 & 2 & 1 & 2 & 1 & 2 \\
\midrule
Ad & 67.3 & 67.3 & 67.9 & 67.9
& 67.9 & 67.9 & 67.9 & 67.9
& 67.9 & 67.9 & 67.9 & 67.9
& 67.9 & 67.9 & 67.9 & 67.9 \\
\bottomrule
\end{tabular*}
\end{table}
\end{document}