我有一张表格,我想在其中报告一些结果,并且我正在使用acmart
类。不断引入一个额外的列。这是我的代码:
\documentclass[sigconf]{acmart}
\usepackage[utf8]{inputenc}
\usepackage{placeins}
\usepackage{booktabs,subcaption,amsfonts,dcolumn}
\title{table example}
\date{June 2020}
\begin{document}
\maketitle
\section{Introduction}
\begin{table*}[t]
\large
\begin{tabular*}{\textwidth}{|l|l|l|}
\toprule
Model & Accuracy1 & Accuracy2 \\ \midrule
Model1&0.421& 18.47 \\
Model2 &0.46& 23.62\\
Model3&0.49 &25.7 \\
\bottomrule
\end{tabular*}
\caption{Caption}
\label{tab: tab1}
\end{table*}
\end{document}
答案1
tabular*
左侧聚集在一起,因为它的总宽度要求为,\textwidth
但列无法伸展以填充宽度。基本的答案是放入\extracolsep{\fill}
表格声明,但这会产生不同的丑陋结果。
垂直线在两个方面带来麻烦:(1)booktabs 定义不适用于它们,在水平规则处留下间隙;(2)问题\extracolsep
是空格仅在每条垂直线的一侧延伸。
在开始提出混乱的解决方案之前,让我先劝告其他人使用tabularx
十进制对齐来发布答案;或者使用更好的表格布局包来优雅地完成它!
首次尝试:自然宽度,无垂直线-- 这合理吗?\quad
插入一些间距是为了使较宽的列标题在列上居中
\centering
\begin{tabular}{lll}\toprule
Model & Accuracy1& Accuracy2 \\ \midrule
Model1&\quad 0.421&\quad 18.47 \\
Model2 &\quad 0.46&\quad 23.62\\
Model3 &\quad 0.49 &\quad 25.7 \\ \bottomrule
\end{tabular}
第二次尝试:拉伸宽度,不带垂直线—— 这重复了手动间隔,以\quad
使头部位于其列的中心,但也可以采用其他方法,如下面所做的那样。
\begin{tabular*}{\textwidth}{@{\qquad\extracolsep{\fill}}lll@{\qquad}}\toprule
Model & Accuracy1& Accuracy2 \\ \midrule
Model1&\quad 0.421&\quad 18.47 \\
Model2 &\quad 0.46&\quad 23.62\\
Model3&\quad 0.49 &\quad 25.7 \\ \bottomrule
\end{tabular*}
第三次尝试,以自然宽度书写表格-- 必须放弃 booktabs 在水平线周围产生的额外间距,但结果太丑了,无法容忍(\extrarowheight
没有解决问题)。让我们定义一些“支柱”来强制在水平线周围产生额外的间距\hline
\newcommand\highstrut{\leavevmode\raise\jot\copy\strutbox}
\newcommand\deepstrut{\leavevmode\lower\jot\copy\strutbox}
然后将它们用在任何\hline
\centering
\begin{tabular}{|l|l|l|}
\hline \highstrut
Model & Accuracy1 & Accuracy2\deepstrut \\ \hline
\highstrut
Model1 &\quad 0.421&\quad 18.47 \\
Model2 &\quad 0.46&\quad 23.62\\
Model3 &\quad 0.49 &\quad 25.7 \deepstrut\\ \hline
\end{tabular}
第四次尝试:用垂直线拉伸——间距会造成问题。由于唯一灵活的间距是在列之间,并且规则放在列中,因此除非将垂直线放在单独的列,为此您需要放弃 LaTeX|
并使用特殊的“规则”列,例如r@{\vline}
。注意双&
符号!将它们视为代表。此外,只要列之间有较大的空间,标题就可以通过让它们悬垂在列上(加号)|
来居中在(较窄的)列上。\hidewidth
~
\begin{tabular*}{\textwidth}{@{}
r@{\vline\extracolsep{\fill}} l
r@{\vline}l r@{\vline}l r@{\vline\extracolsep{0pt}}}
\hline
\highstrut & Model && \hidewidth~ Accuracy1\hidewidth~ &&
\hidewidth~ Accuracy2\hidewidth~ &\deepstrut \\ \hline
\highstrut & Model1 && 0.421 && 18.47 &\\
& Model2 && 0.46 && 23.62&\\
& Model3 && 0.49 && 25.7 &\deepstrut\\
\hline
\end{tabular*}