制表符对齐中样本行的最后一列没有任何用处。如果我们在 中使用样本行\settabs
,我们必须将相应列(可能不是第一个)的最宽单元格放在那里。但对于最后一列,这不起作用。最后一列的宽度由第一行的最后一个单元格的宽度决定。
为什么示例 1 中最后一列的宽度不存在YY
?如何将其Y
置于单元格中央?
示例 1:
\tt
\vrule\vbox{\hrule\settabs\+ \ XX \vrule&\cr
\+ \hfill\ X \hfill\strut\vrule& \ Y \hfill&\cr
\hrule
\+ \ XX \strut\vrule& \ YY \hfill&\cr
\hrule}\vrule
\bye
示例 2:
\tt
\vrule\vbox{\hrule\settabs\+ \ XX \vrule&\cr
\+ \hfill\ X \hfill\strut\vrule& \ Y \hfill&\cr
\hrule
\+ \ XX \strut\vrule& \ YY \cr
\hrule}\vrule
\bye
(当然最好用 来完成\halign
,但我只是好奇是否可以在 中完成\settabs
)
答案1
行中的每个字段都是固定大小,\hbox
但最后一个字段除外,因为没有标签来限制它,所以它是可变的。因此只需添加另一个标签:
\settabs\+\ XX \vrule&\ YY &\cr
编辑:
在对您的示例进行了一些试验后,我明白了发生了什么。\settabs
但我以前从未使用过。
\hfill
不会占用前面的空间。这不是\hfill
造成差异的原因。如果你仔细观察,就会发现这不是两个示例之间的唯一差异。第一个例子添加了,而造成差异的\hfill&
是。&
\settabs
(定义列但不打印)的第一行只有一个&
,因此 XXX 列具有固定宽度,但没有&
后面的 YYY 列是可变的。下一行,一行有 X 和 Y,做有第二个&
;将第二列的宽度固定为指定的大小,即一个 Y 和两个空格(后跟不包含任何内容的第三列)。
现在转到包含 XX 和 YY 的行。示例 1 也使用第二个&
,因此框会缩小以匹配由包含 X 和 Y 的行定义的框,因此行会在您看到它结束的位置结束。示例 2 没有第二个&
,因此 YY 字段的大小不固定,因此它的宽度与其自然大小(两个 Y 和两个空格)一样宽。两行(它们是\hbox
-es)堆叠在 中\vbox
,它们使 的\vbox
宽度与较宽的行(即底部的行)一样宽。