为什么表格中列宽总和小于 1?

为什么表格中列宽总和小于 1?

请告诉我,为什么表格中列宽的总和小于 1?这是我的代码:

\begin{tabular}
{p{0.15\textwidth}p{0.12\textwidth}p{0.17\textwidth}p{0.17\textwidth}p{0.27\textwidth}}
...
\end{tabular}

0.15 + 0.12 + 0.17 + 0.17 + 0.27 = 0.88 只有在这种情况下,我才有一个文本宽度表。如果总和相等,我就会有一个更宽的表。

答案1

tabular如下规范

\begin{tabular}{
  p{0.15\textwidth}
  p{0.12\textwidth}
  p{0.17\textwidth}
  p{0.17\textwidth}
  p{0.27\textwidth}
}

表示0.88\textwidth为列保留。但是,每列两侧都有与\tabcolsep(默认值6pt) 一样宽的空格包围。

如果您确实需要具有这些宽度的列,则可以在本地设置\tabcolsep;假设第一列左侧没有空间,最后一列右侧也没有空间,您仍然需要处理八个空间。因此,我们希望0.12\textwidth在八个块之间平均分配,正确的宽度是0.015\textwidth;这是一个例子

\documentclass{article}
\usepackage{booktabs}

\usepackage{showframe,lipsum} % just for the example

\begin{document}

\lipsum[2]

\begin{table}[htp]

\setlength{\tabcolsep}{0.015\textwidth}

\begin{tabular}{
  @{}% remove space at the left
  p{0.15\textwidth}
  p{0.12\textwidth}
  p{0.17\textwidth}
  p{0.17\textwidth}
  p{0.27\textwidth}
  @{}% remove space at the right
}
\toprule
aa aa aa aa aa & bb bb bb bb bb & cc cc cc cc cc cc cc cc &
  dd dd dd dd dd dd dd dd & ee ee ee ee ee ee ee ee ee ee ee ee \\
\bottomrule
\end{tabular}

\caption{A table}

\end{table}

\lipsum[3]

\end{document}

在此处输入图片描述

答案2

使用TeXLaTeX方法来估计不包含额外列空间的列的长度并再次将其考虑在内。

由此可见,这0.88\textwidth已经太大了!

\documentclass{article}
\newlength{\dummylength}

\newbox\mybox

\setbox\mybox=\hbox{%
  \begin{tabular}{p{0.15\textwidth}p{0.12\textwidth}*{2}{p{0.17\textwidth}}p{0.27\textwidth}}
    Foo & Foo & Foo & Foo & Foo%
  \end{tabular}%
}%

\def\numofcolumns{5}

\begin{document}

Textwidth is: \the\textwidth

Width of the tabular box: \the\wd\mybox

\setlength{\dummylength}{0.88\textwidth}

\numofcolumns\ columns introduce an additional length of \the\dimexpr\tabcolsep * \numofcolumns*2


0.88 textwidth is \the\dummylength 

Now let's add up the column textwidths again: \the\dimexpr0.17\textwidth*2+0.27\textwidth*2

\setlength{\dummylength}{\dimexpr\dummylength+\tabcolsep*\numofcolumns*2}

Estimated total width:  \the\dummylength

There's a difference of \the\dimexpr\wd\mybox - \dummylength

\noindent\unhbox\mybox%
\end{document}

在此处输入图片描述

答案3

你的环境的宽度tabular0.88\textwidth 10\tabcolsep\tabcolsep。的默认值为6pt。当且仅当文本块的宽度恰好为500pt(约 6.92 英寸或 17.57 厘米)时,此表格环境的宽度才等于\textwidth。(为什么500pt?提示:求解(1-0.88)*\textwidth=60pt\textwidth

为了简化设置一个整体宽度等于\textwidth且有五列的表格,其比例宽度为 15 : 12 : 17 : 17 : 27,我建议您使用tabularx。请注意相对的列宽——作为宽度的分数如果所有列都等宽-- 可以分别表示为0.852\hsize0.682\hsize0.966\hize(两次)和1.534\hsize。(请注意 0.852+0.682+0.966+0.966+1.534=5,即列数。)因此,定义tabularx环境如下:

\documentclass{article}
\usepackage{tabularx}
\newcolumntype{Z}[1]{>{\hsize=#1\hsize}X}
\begin{document}
\noindent
\begin{tabularx}{\textwidth}{ Z{0.852} Z{0.682} *{2}{Z{0.966}} Z{1.534} }
\hline
a & b & c & d & e \\
\hline
\end{tabularx}
\smallskip
\hrule % just to illustrate the width of the textblock
\end{document}

相关内容