当单元格包含多行时,表格列中会出现不需要的填充

当单元格包含多行时,表格列中会出现不需要的填充

每当我需要在表格环境中创建包含多行的单元格时,我通常会在单元格内的表格环境中创建封闭单元格内容。这对我来说是一个很好的解决方案,因为它很容易实现,而且还能处理跨行的垂直对齐。

不幸的是,这个修复似乎还为该列添加了额外的填充。我在下面提供了一个示例来说明这个问题。这里,底部表格中有一行包含“2 行”单元格。

我认为,顶部表格和底部表格的列宽应该相等(由“TITLE”的长度决定),但事实并非如此。我怀疑原因是表格环境在列宽上添加了填充。

在此处输入图片描述

\documentclass[letter]{article}
\usepackage{array}
\usepackage{booktabs}
\usepackage{tabularx}

\begin{document}


%normal table
\begin{table}[ht]
\begin{tabular}{cc}
  \toprule
TITLE  & TITLE \\ 
  \midrule
  10 & 10  \\
  10 & 10  \\ 
  \bottomrule
\end{tabular}
\end{table}

%when I use the tabular trick
\begin{table}[ht]
\begin{tabular}{cc}
  \toprule
  \begin{tabular}{c}TITLE\\A\end{tabular} & \begin{tabular}{c}TITLE\\B\end{tabular} \\ 
  \midrule
  10 & 10  \\
  10 & 10  \\ 
  \bottomrule
\end{tabular}
\end{table}


\end{document}

答案1

在 (或 l 或 r) 的标准列说明符用法中,左侧和右侧c都有一个空格\tabcolsep(默认为)。这意味着6.0pt

cc

事实上有以下间距

\tabcolsep 单元格内容 \tabcolsep\tabcolsep 单元格内容 \tabcolsep

使用 会@{}c@{}降低前后间距。最好将\tabcolsep其设置为 来操作0pt

如果列说明符有垂直线,则每行都会为表的宽度添加额外的\arrayrulewidth(默认为)空间。0.4pt


在下面的代码中,我写了四个表,两个来自 OP,一个带有坏的的操作\tabcolsep以及方法@{}c@{}。我添加了外部和内部表格的垂直线只是为了演示,不建议将它们用于生产运行!

从输出结果可以看出,除了垂直间距外,第 1、3、4 种方法是相同的,但第 2 种方法有所偏差。

\documentclass[letter]{article}
\usepackage{array}
\usepackage{booktabs}
\usepackage{tabularx}

\begin{document}




\begin{tabular}{|l|}%
One table method \tabularnewline
\begin{tabular}{|c|c|}
  \toprule
TITLE  & TITLE \\ 
  \midrule
  10 & 10  \\
  10 & 10  \\ 
  \bottomrule
\end{tabular} \tabularnewline
%when I use the tabular trick



Two table method \tabularnewline

\begin{tabular}{|c|c|}
  \toprule
  \begin{tabular}{c}TITLE\\A\end{tabular} & \begin{tabular}{c}TITLE\\B\end{tabular} \\ 
  \midrule
  10 & 10  \\
  10 & 10  \\ 
  \bottomrule
\end{tabular} \tabularnewline


% Now with 'bad' manipulation of \tabcolsep length

Bad manip. of tabcolsep \tabularnewline

\begin{tabular}{|c|c|}
  \toprule
  \setlength{\tabcolsep}{0pt}%
  \begin{tabular}{c}
    TITLE\\
    A
  \end{tabular} & 
  \setlength{\tabcolsep}{0pt}%
  \begin{tabular}{c}
    TITLE \\
    B
  \end{tabular} \\ 
  \midrule
  10 & 10  \\
  10 & 10  \\ 
  \bottomrule
\end{tabular} \tabularnewline

\makeatletter
Usage of @{} - method \tabularnewline
\makeatother 

\begin{tabular}{|c|c|}
  \toprule
  \begin{tabular}{@{}c@{}}TITLE\\A\end{tabular} & \begin{tabular}{@{}c@{}}TITLE\\B\end{tabular} \\ 
  \midrule
  10 & 10  \\
  10 & 10  \\ 
  \bottomrule
\end{tabular}
\end{tabular}


\end{document}

在此处输入图片描述

相关内容