表格固定宽度

表格固定宽度

我使用p列类型来强制表格列的宽度。但是,表格的总宽度变得大于文本宽度。以下是 MWE:

\documentclass{article}
\usepackage{lipsum}

\begin{document}
\lipsum[1-5]

\begin{tabular}{|p{.3\textwidth}|p{.45\textwidth}|p{.125\textwidth}|p{.125\textwidth}|}
\hline
a & b & c & d\\ \hline
\end{tabular}

\end{document}

问题的根源在于p设置内容宽度而没有考虑列之间的空间?

答案1

有三个因素你没有考虑到。

  1. 段落缩进

  2. 柱间空间

  3. 规则宽度(如果您使用array

或许

\usepackage{calc}

进而

\noindent
\begin{tabular}{
  |p{.3\textwidth-2\tabcolsep}|
   p{.45\textwidth-2\tabcolsep}|
   p{.125\textwidth-2\tabcolsep}|
   p{.125\textwidth-2\tabcolsep}|
}

可以。或者您可能希望进一步缩小较宽的列。请记住,\tabcolsep每列的两侧都有宽阔的空间。

在此处输入图片描述

请注意,如果你正在使用该array包,则上述代码应变为

\noindent
\begin{tabular}{
  |p{.3\textwidth-2\tabcolsep-2\arrayrulewidth}|
   p{.45\textwidth-2\tabcolsep-\arrayrulewidth}|
   p{.125\textwidth-2\tabcolsep-\arrayrulewidth}|
   p{.125\textwidth-2\tabcolsep-\arrayrulewidth}|
}

有五条规则需要注意;根据 LaTeX 手册,最左边的规则在逻辑上属于第一列;其他规则属于它们前面的列。

答案2

您无需自己计算列宽,只要加载包tabularx并使用该包的X列类型,就可以让 LaTeX 来处理该工作。

如果列宽与文本块宽度的比率为0.450.30.1250.125,则以下设置将实现您的目的。要记住的唯一“规则”是\hsizes 的总和必须等于列数——4在您给出的示例中。要设置相对列宽,只需将上面给出的比率乘以4

在此处输入图片描述

\documentclass{article}
\usepackage{tabularx}
\begin{document}
\noindent
\begin{tabularx}{\textwidth}{|%
   >{\hsize=1.8\hsize}X|
   >{\hsize=1.2\hsize}X|
   >{\hsize=0.5\hsize}X|
   >{\hsize=0.5\hsize}X|}
\hline
a & b & c & d \\
\hline
\end{tabularx}
\end{document}

如果你对细节感到好奇:如果表格应该占据文本块的宽度(即,如果它的宽度为\textwidth),有n列(此处:n=4),并且列由垂直规则分隔,则表格的可用的宽度为\textwidth-2n\tabcolsep-(n+1)\arrayrulewidthtabularx然后环境根据0.450.30.125和 的比例分配可用宽度0.125。(为了获得实际的列宽,添加2\tabcolsep到列的可用的宽度。)

相关内容