假设我有一个对齐方式,其中两列文本居中。如何\dotfill
在这两列之间添加?如果我这样做
\vbox{\halign{%
\hfil#\leaders\hbox to 5pt{\hfil.\hfil}\hskip 20pt plus 1 fil%
&\leaders\hbox to 5pt{\hfil.\hfil}\hfil#\hfil\cr%
abc&defgh\cr%
a&b\cr%
abc&d\cr%
}}
我将在两列边界的点之间获得一个随机的额外空间,因为两个相邻的\leaders
命令分别与它们封闭的水平盒子的左端对齐。
有没有办法
- 让 halign 使用指定单位的倍数作为列宽,
- 有
\leaders
(或者可能\cleaders
)与封闭水平盒子的右端对齐,或者 - 将引线与外部水平盒子对齐,而不是直接与封闭的水平盒子对齐?
我知道我可以通过使用固定宽度的列而不是对齐来解决该问题。
答案1
一种方法是设置两次数据,第一次设置后测量第一列的宽度,然后重新设置强制第一列为 5pt 宽度的倍数,并将自然宽度向上舍入。我,
在您的示例中添加了一个,因为它最大化了单元格边界处的间隙,如第一个对齐所示。
\vbox{\halign{%
\hfil#\leaders\hbox to 5pt{\hfil.\hfil}\hskip 20pt plus 1 fil%
&\leaders\hbox to 5pt{\hfil.\hfil}\hfil#\hfil\cr%
abc&defgh\cr%
a&b\cr%
ab,c&d\cr%
}}
\bigskip
\tracingonline1
\setbox0\vbox{%
\global\setbox1\vbox{}%
\halign{%
\hfil#\hskip 20pt plus 1 fil%
&\hfil#\hfil\cr%
abc&defgh\cr%
a&b\cr%
ab,c&d\cr%
}
\setbox0\lastbox
\setbox0\hbox{\unhbox0\unskip\setbox0\lastbox\unskip}%
\count0=\wd0
\divide\count0 327680
\multiply\count0 5
\ifdim\count0 pt<\wd0
\advance\count0 5
\fi
\xdef\colwidth{\the\count0 pt}%
}
\vbox{
\halign{%
\hbox to\colwidth{\hfil#\leaders\hbox to 5pt{\hfil.\hfil}\hskip 20pt plus 1 fil}%
&\leaders\hbox to 5pt{\hfil.\hfil}\hfil#\hfil\cr%
abc&defgh\cr%
a&b\cr%
ab,c&d\cr%
}
}
\bye