我正在阅读 tabularx 文档并偶然发现一些我不清楚的东西。
在 4.3 中。第 1 点表明(之前的分数之和
\hsize
)应始终是使用的列数。如果这不合适,会有什么坏处吗(除非您提前计算了数字,列宽将不会完全符合计算(我问这个问题只是因为有时您做了数学运算,但随后您认为一列应该大一点,所以只想增加那个数字而不是重新计算所有内容))在 4.3 中。要点 2:交叉是什么意思?是否应该没有多列
[lXl]
(越过一列的左右边界X
)、[XX]
(跨越多X
列)甚至[lX]
(包含一X
列)?- 为什么这是个问题,当尺寸不适合时,包只会重新计算尺寸(据我了解)为什么要
\hsize
用来“加权”列宽而不是像\testwidht
或这样的其他长度\linewidth
(据我所知,它们有点相似(并且在大多数情况下相同)?
答案1
如果您不将大小相加,tabularx 真的不会做任何有意义的事情。它会做一些事情,在某些情况下您可能会接受结果,但在这种情况下的任何输出都是意外的未经测试的代码路径
这意味着如果你在第 2 列有一个 X 列,那么你就不应该有一个
\multicolumn{..}{c}{...}
跨越第 2 列但没有 X 的列。有时你可以打破这个规则,有时你不能。在我写代码 30 年后,细节有点模糊 :-)因为您需要设置
\hsize
,因为这是用于换行宽度的 tex 基元。最好设置\linewidth
为匹配(如该项所示),这样嵌套的 latex 列表将使用正确的长度。
(2) 有问题的原因是它实际上会让您违反 (1)。如果宽度或声明为 X 的列实际上是由具有固定自然长度的条目强制的,\multicolumn{1}{c}{long text here}
则tabularx
实际上会忽略该列中的 X,并且工作方式就像表中少了一个 X 列一样,然后重新计算。如果跨越的是 X,那么这很好,但如果是,>{\hsize=.5\hsize}X
那么当忽略此列并减少活动 X 列的数量时,剩余的修改宽度将不符合 (1) 设置的约束。