Tabularx 表格中许多列的格式不正确

Tabularx 表格中许多列的格式不正确

在我们的软件中,我们有一个模块,它通过 Latex 生成 PDF。其中一些包含表格,我希望它们横跨整个页面。由于列数各不相同,我使用tabularx与所有X列一起使用,它可以完成工作。

然而,在极少数情况下,如果表格包含许多列(似乎 19 是阈值),则它们最终会出现格式错误。

这可以:

\begin{tabularx}{\textwidth}{|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|}
0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 & 18 \\
\end{tabularx}

输出(如预期):

在此处输入图片描述

如果我再添加一列,它就会中断:

\begin{tabularx}{\textwidth}{|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|}
0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 & 18 & 19\\
\end{tabularx}

输出:

在此处输入图片描述

我可以解决这个问题,方法是在第 18 列左右之后使用p{1cm}而不是X。由于表格已经很大,因此不会过多扭曲布局。但我仍然想了解造成这种情况的原因以及是否存在其他解决方案。

答案1

只需一点数学运算,假设标准文本宽度为article(345pt)、标准\tabcolsep宽度为 (6pt) 和标准规则宽度为 (0.4pt)。

对于 19 列,你必须计算 (345-38*6-20*0.4)/19 = 5.73684(四舍五入),因此X列的宽度只有 5.73684pt,每个数字大约为 5pt。事实上,在这种情况下,我得到了

Overfull \hbox (4.26317pt too wide)

并且 10-5.73684=4.26316 (小数点后第五位数字偏差一位是正常的)。

因此,如果你想确保 20 列包含两位数的条目,你需要调整参数;你需要

20 * 10 + 20 * 2 * \tabcolsep+ 21 * 0.4

减少\tabcolsep到 3pt,即 328.4pt,适合:

\documentclass{article}
\usepackage{tabularx}

\begin{document}

\setlength{\tabcolsep}{3pt}
\noindent
\begin{tabularx}{\textwidth}{|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|X|}
0 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 & 11 & 12 & 13 & 14 & 15 & 16 & 17 & 18 & 19\\
\end{tabularx}

\end{document}

编译时没有任何警告。

在此处输入图片描述

相关内容