均匀分布列宽

均匀分布列宽

考虑以下代码块:

\begin{tabular}{| c | c | c | c | c | c | c | }
\cline{2-7}
\multicolumn{1}{c}{} & \multicolumn{3}{|c|}{Fantastical aardvarks}  
& \multicolumn{3}{c|}{Spelunking elephants}\\
\hline
 Foo bar & A & B & C & A & B & C\\
\hline
 5 & 87 &  5 &  2 & 82 & 18 & 48\\
 6  & 5 & 43 &  4 & 7 & 47 & 4\\
 7 &  7 &  18 & 63 & 2 & 9 & 99\\
\hline
\end{tabular}

未对齐的表格

有没有办法让“奇妙的土豚”和“洞穴探险大象”下的三列宽度均匀分布?

我特别感兴趣的是自动化这样做,而不需要直接指定列宽。

答案1

您可以使用tabularx环境而不是tabular环境。tabularx环境可通过加载tabularx 包,提供了一种称为“X”的列类型,它应该可以满足您声称的拥有多个等宽列的需求。下面 MWE 中的第一个表格解释了如何做到这一点。

然而,有一项决定是作者必须make,即不能完全自动化:有多宽整个表格应该是多少?通常,只需将此宽度设置为\textwidth(当前文本块的宽度),然后tabularx确定各个类型的列的宽度X。对于这个 MWE(使用 LaTeX 使用的默认文本字体),经过反复试验,我发现可以将表格的整体宽度指定为大约0.75\textwidth。对于您的实际文档,您需要尝试各种表格宽度设置,以根据经验确定最窄的表格宽度。

还请注意MWE 中列类型\centering\arraybackslash前的说明符的使用。我插入了这个说明符,因为看起来您希望列的内容是X居中(默认情况下,列的内容X设置为“完全对齐”。)

尽管如此,我还强烈建议您考虑 (i) 删除表格中的所有垂直线,以及 (ii) 使用booktabs 包来获取表格中各个规则上方和下方的间距。此包提供了命令\toprule、、和;如何使用它们将在下面的 MWE 第二部分中解释。请注意,可以左修剪和/或右修剪\bottomrule-这是使用 无法实现的。比较表格的两种形式,我敢说绝大多数读者会发现第二种形式看起来更令人愉悦\midrule\cmidrule\cmidrule\cline更容易理解。:-)

在此处输入图片描述

\documentclass{article}
\usepackage{tabularx,booktabs}
\newcolumntype{Y}{>{\centering\arraybackslash}X}

\begin{document}

\noindent
\begin{minipage}{0.75\linewidth}

First version: Many vertical lines, 
widths of horizontal lines all equal, 
spacing above\slash below horizontal 
lines cramped

\smallskip
\begin{tabularx}{\textwidth}{ |c| *{6}{Y|} }
\cline{2-7}
   \multicolumn{1}{c|}{} 
 & \multicolumn{3}{c|}{Fantastical aardvarks}  
 & \multicolumn{3}{c|}{Spelunking elephants}\\
\hline
 Foo bar & A & B & C & A & B & C\\
\hline
 5  & 87 &  5 &  2 & 82 & 18 & 48\\
 6  &  5 & 43 &  4 &  7 & 47 &  4\\
 7  &  7 & 18 & 63 &  2 &  9 & 99\\
\hline
\end{tabularx}

\bigskip

Second version: No vertical lines, 
widths of horizontal lines differ, 
spacing above/below horizontal lines 
satisfactory

\smallskip
\begin{tabularx}{\textwidth}{c *{6}{Y}}
\toprule
Foo bar
 & \multicolumn{3}{c}{Fantastical aardvarks}  
 & \multicolumn{3}{c}{Spelunking elephants}\\
\cmidrule(lr){2-4} \cmidrule(l){5-7}
  & A & B & C & A & B & C\\
\midrule
 5  & 87 &  5 &  2 & 82 & 18 & 48\\
 6  &  5 & 43 &  4 &  7 & 47 &  4\\
 7  &  7 & 18 & 63 &  2 &  9 & 99\\
\bottomrule
\end{tabularx}
\end{minipage}
\end{document}

答案2

\documentclass{article}
\usepackage{tabularx,ragged2e}
\usepackage{booktabs}

\begin{document}

{\tabcolsep=0pt\def\arraystretch{1.3}
\begin{tabularx}{250pt}{c *6{>{\Centering}X}}\toprule
  & \multicolumn{3}{c}{Fantastical aardvarks}   & \multicolumn{3}{c}{Spelunking elephants} 
  \tabularnewline \cmidrule(lr){2-4}\cmidrule(l){5-7}
  Foo bar & A & B & C & A & B &  C \tabularnewline \midrule
  5  & 87 &  5 &  2 & 82 & 18 & 48 \tabularnewline
  6  &  5 & 43 &  4 &  7 & 47 & 4 \tabularnewline
  7  &  7 & 18 & 63 &  2 &  9 & 99 \tabularnewline\bottomrule
\end{tabularx}}

\end{document}

在此处输入图片描述

答案3

虽然迟到了,但我也遇到了同样的问题,因为表格太大了,tabularx无论我做什么,表格都会超出页面边界。所以我不能使用tabularx,而是找到了一个便宜的肮脏技巧:\hspace*{}

只需将其放置\hspace*{}在要放大的列中即可。由于您想要居中列,因此必须将其放置在顶行文本的前后:

\begin{tabular}{| c | c | c | c | c | c | c | }
\cline{2-7}
\multicolumn{1}{c}{} & \multicolumn{3}{|c|}{Fantastical aardvarks}  
& \multicolumn{3}{c|}{Spelunking elephants}\\
\hline
Foo bar &\hspace*{1.5mm} A \hspace*{1.5mm} & \hspace*{1.5mm} B \hspace*{1.5mm} & C & A & B & C\\
\hline
 5 & 87 &  5 &  2 & 82 & 18 & 48\\
 6  & 5 & 43 &  4 & 7 & 47 & 4\\
 7 &  7 &  18 & 63 & 2 & 9 & 99\\
\hline
\end{tabular}

编译示例

您需要稍微玩一下才能获得正确的精度,但有时您就必须玩点卑鄙的把戏。

答案4

tblr有了新的 LaTeX3 包环境,一切都变得轻而易举tabularray

\documentclass{article}
\usepackage{tabularray}
\begin{document}

\begin{tblr}{
  hline{1} = {2-7}{solid},
  hline{2,3,6} = {solid},
  vline{1} = {2-5}{solid},
  vline{2-Z} = {solid}, % Z stands for the last
  cells = {c},
  cell{1}{2,5} = {c=3}{c}, % multicolumn
  hspan = even, % evenly distributing column widths
}
          & Fantastical aardvarks &    &    & Spelunking elephants &    &    \\
  Foo bar & A                     & B  & C  & A                    & B  & C  \\
  5       & 87                    & 5  & 2  & 82                   & 18 & 48 \\
  6       & 5                     & 43 & 4  & 7                    & 47 & 4  \\
  7       & 7                     & 18 & 63 & 2                    & 9  & 99 \\
\end{tblr}

\end{document}

在此处输入图片描述

相关内容