假设我们有三个水平对齐的文本块。为什么示例 1不同于示例 2后者应该做哪些改变才能使其看起来像前者?
笔记:我添加规则只是为了直观地指示文本块的位置。
示例 1
\def\text{%
Inde igitur, inquit,
ordiendum est. Tibi
hoc incredibile, quod
beatissimum.
}
\long\def\vtopragged#1#2{\vrule\kern-.4pt\vtop{\prevdepth=2pt\hsize=#1 \raggedright #2}\vrule\kern-.4pt}
\begingroup
\parindent=0pt
\tabskip=0pt
\topskip=0pt
\hrule
\kern-.4pt
\halign to\hsize{%
\vtopragged{.2\hsize}{#}\tabskip=0pt plus 1fill &
\vtopragged{.2\hsize}{#}\tabskip=0pt plus 1fill &
\vtopragged{.2\hsize}{#}\tabskip=0pt \cr
\text&
\text&
\text\cr
}
\hrule
\kern-.4pt
\endgroup
\bye
示例 2
\def\text{%
Inde igitur, inquit,
ordiendum est. Tibi
hoc incredibile, quod
beatissimum.
}
\long\def\parbox#1{%
\vtop{
\hsize0.2\hsize
\parindent0pt
\raggedright
#1\par
}%
}
\topskip=0pt
\hrule
\noindent
\vrule height 10pt
\parbox{\text}\hfil
\vrule
\parbox{\text}\hfil
\vrule
\parbox{\text}
\vrule
\hrule
\bye
答案1
除了缺少规则之外,不同之处在于\halign
不关心\parfillskip
,因为它会以垂直模式生成一个框。您\hfil
在第二个示例中使用 ,它无法消除\parfillskip
。如果您使用 ,事情就会顺利进行\hfill
。
\def\text{%
Inde igitur, inquit,
ordiendum est. Tibi
hoc incredibile, quod
beatissimum.
}
\long\def\vtopragged#1#2{\vrule\kern-.4pt\vtop{\prevdepth=2pt\hsize=#1 \raggedright #2}\vrule\kern-.4pt}
\begingroup
\parindent=0pt
\tabskip=0pt
\topskip=0pt
\hrule
\kern-.4pt
\halign to\hsize{%
\vtopragged{.2\hsize}{#}\tabskip=0pt plus 1fill &
\vtopragged{.2\hsize}{#}\tabskip=0pt plus 1fill &
\vtopragged{.2\hsize}{#}\tabskip=0pt \cr
\text&
\text&
\text\cr
}
\hrule
\kern-.4pt
\endgroup
\bigskip
\long\def\parbox#1{%
\vtop{
\hsize0.2\hsize
\parindent0pt
\raggedright
#1\par
}%
}
\topskip=0pt
\hrule
\noindent
\vrule
\parbox{\text}\vrule\hfill\vrule
\parbox{\text}\vrule\hfill\vrule
\parbox{\text}\vrule
\hrule
\bye
请注意,在中使用fill
单位\tabskip
没有影响,因为fil
就足够了(\halign to \hsize
类似于);比较在第一个示例和第二个示例中使用\hbox to \hsize
时的输出,其中的效果显而易见。fil
\hfil
\parfillskip