下面的代码生成一个两列三行的水平对齐(见下面第一张图片)。第一列的元素与右对齐,第二列的元素与左对齐。第一行跨越两列,因此其自然宽度大于两列的总自然宽度。因此,第二列中的元素弥补了差异。我的问题是,是否可以让第一列弥补差异(请参阅下面第二张图片)。
\everycr{\noalign{\hrule}}%
\tabskip=0em
\halign{%
\vrule#&
\enskip\hrulefill\strut#\strut&
\strut#\strut\hrulefill\enskip&
\vrule#%
\cr
&\omit\span\omit
\enskip\hfil
\strut{\bf Quantity}\strut
\enskip\hfil&
\cr
& 1&~litre&
\cr
&10&~pcs&
\cr}
\bye
答案1
在 TeXbook 的第 245 页,解释了当列中的某些单元格跨越时如何计算列宽。解释以以下注释结束:
这些公式通常很有效,但有时也会产生不良影响。例如,假设n= 3,瓦11 =瓦22 =瓦33 = 10,瓦12 =瓦23 = −∞,且瓦13 = 100;换句话说,列本身很窄,但有一个很大的宽条目应该跨越所有三列。在这种情况下,TeX 的公式使得瓦1 =瓦2 = 10,但瓦3 = 80 –吨1 –吨2,因此所有多余的宽度都分配给第三列。如果这不是您想要的,补救措施是使用
\hidewidth
,或增加列之间制表符的自然宽度。
所以没有办法自动地转移第一列的多余宽度,因为上述行为是内置的。
答案2
您需要给予\halign
一点鼓励,将每列的宽度至少设置为一半。
(你也应该停止双倍的小时数,这里还没有完成)
\everycr{\noalign{\hrule}}%
\tabskip=0em
\setbox0\hbox{\bf Quantity}
\halign{%
\vrule#&
\enskip\hrulefill\strut#\strut&
\strut#\strut\hrulefill\enskip&
\vrule#%
\cr
\omit&\omit\enskip\kern.5\wd0\relax&\omit\kern.5\wd0\relax\enskip\cr
&\omit\span\omit
\enskip\hfil
\strut{\bf Quantity}\strut
\enskip\hfil&
\cr
& 1&~litre&
\cr
&10&~pcs&
\cr}
\bye