补偿多跨箱比跨柱更宽

补偿多跨箱比跨柱更宽

下面的代码生成一个两列三行的水平对齐(见下面第一张图片)。第一列的元素与右对齐,第二列的元素与左对齐。第一行跨越两列,因此其自然宽度大于两列的总自然宽度。因此,第二列中的元素弥补了差异。我的问题是,是否可以让第一列弥补差异(请参阅下面第二张图片)。

\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

\halign 之前 \halign 之后

答案1

在 TeXbook 的第 245 页,解释了当列中的某些单元格跨越时如何计算列宽。解释以以下注释结束:

这些公式通常很有效,但有时也会产生不良影响。例如,假设n= 3,11 =22 =33 = 10,12 =23 = −∞,且13 = 100;换句话说,列本身很窄,但有一个很大的宽条目应该跨越所有三列。在这种情况下,TeX 的公式使得1 =2 = 10,但3 = 80 –12,因此所有多余的宽度都分配给第三列。如果这不是您想要的,补救措施是使用\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

相关内容