![对齐 (tabular*) 时 \hbox 未满的问题和/或 calc 包的问题](https://linux22.com/image/280221/%E5%AF%B9%E9%BD%90%20(tabular*)%20%E6%97%B6%20%5Chbox%20%E6%9C%AA%E6%BB%A1%E7%9A%84%E9%97%AE%E9%A2%98%E5%92%8C%2F%E6%88%96%20calc%20%E5%8C%85%E7%9A%84%E9%97%AE%E9%A2%98.png)
我得到了
underfull \hbox in alignment (badness 10000)
使用tabular*
。如果我将表格宽度调整 0.00002pt(按照下面的 MWE),警告就会消失。差异似乎源于使用calc
TeX\real
的定点算法进行的长度计算。
我知道使用tabularx
X 列是一种解决方案,但是 a) 我希望完全控制表格,并且 b)“更正”通常取决于当前\linewidth
。
对于像我这样想要干净的 TeX 日志文件的人来说,这看起来像是一个陷阱。如果按照 The LaTeX Companion 中的示例 5.3.1(虽然没有反对!),可能会掉入这个陷阱,更重要的是很难推断出如此微小的差异。
我们该忍受这样的事吗?
\documentclass{article}
\usepackage{calc}
\begin{document}
\newlength{\MyLen} \setlength{\MyLen}{(\linewidth*\real{0.5}-\tabcolsep)/3}%
\newlength{\MyLenTwo} \setlength{\MyLenTwo}{\MyLen*\real{1.3}}
\newlength{\MyLenThree} \setlength{\MyLenThree}{\MyLen*\real{0.7}}
\newlength{\MyLenFour} \setlength{\MyLenFour}{\linewidth*\real{0.5}-(\MyLen+\MyLenTwo+\MyLenThree+\tabcolsep)}
% \showthe\MylenFour % gives 0.00002pt; if that is not accounted for, TeX barks with an "Underfull \hbox (badness 10000) in alignment..."
\begin{tabular*}{0.5\linewidth-0.00002pt}{p{\the\MyLen}@{}p{\the\MyLenTwo}@{}p{\the\MyLenThree}@{}}
First&Second&Third \\
\end{tabular*}
\end{document}
答案1
只需使用
\begin{tabular}{p{\the\MyLen}@{}p{\the\MyLenTwo}@{}p{\the\MyLenThree}@{}}
First&Second&Third \\
\end{tabular}
由于列之间的粘合没有灵活性,tabular*
无法以任何方式更改宽度,因此使用的宽度tabular*
将tabular
与指定大小的框相同,因此如果它不完全适合,则会生成警告。基本上tabular*
需要\extracolsep{\fill}
在某个地方使用才能发挥任何作用。