为什么在这张带有 acmart 类的表中会出现过度拉伸的水平线

为什么在这张带有 acmart 类的表中会出现过度拉伸的水平线

我有一张表格,我想在其中报告一些结果,并且我正在使用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*}

排版四个表格

相关内容