请原谅我问了一个可能微不足道的问题。我正在研究书籍,但当我坐在电脑前时似乎总是感到困惑。
- 我在用着纯 TeX。
- 我有三个多段落的文本块。
- 我想将它们排列在一起,以便它们水平分布在页面上。
换句话说,我想这样做:
This is a This is another Hey look! A third
sentence. nice sentence. sentence or two
Whoa, another paragraph!
我觉得我需要三个vbox
es,\hfill
它们之间有空格。我不明白我遗漏了哪些额外的步骤。
我认为解决方案可以推广到更多框,并且不依赖于表格格式化机制。我认为这可能是一个我过度思考的非常简单的问题。
答案1
您想设置\hsize
垂直框的,并且您想对齐垂直框中第一行的基线,您需要\vtop
。 您可能需要在窄框方面给 TeX 一些“操作空间”,所以我会使用\sloppy
或类似的(来自 LaTeX)。 您可能还想要没有\parindent
,但似乎确实想要一个\parskip
。 这会导致类似
\long\def\parbox#1{%
\leavevmode
\vtop{%
\hsize0.2\hsize % Pick your size here
\parindent0pt %
\parskip\baselineskip
\sloppy
#1\par
}%
}
\def\sloppy{%
\tolerance 9999 %
\emergencystretch 3em %
\hfuzz 0.5pt %
\vfuzz \hfuzz
}
\noindent
\parbox{This is a sentence}\hfil
\parbox{This is another nice sentence.\par Whoa, another paragraph!}\hfil
\parbox{ Hey look! A third sentence or two}
\bye
当然,如果您愿意,可以设置“均匀分布”机制,以适应任意数量的框,但这看起来工作量太大(特别是对于标记通常隐藏很少的纯 TeX 上下文)。我在这里硬编码了宽度,但在实际情况下,我猜您可能会将其作为第二个参数。
答案2
您可能想要使用\halign
:
\long\def\vtopragged#1#2{\vtop{\hsize=#1 \raggedright #2}}
\begingroup
\parindent=0pt
\tabskip=0pt
\halign to\hsize{%
\vtopragged{.2\hsize}{#}\tabskip=0pt plus 1fill &
\vtopragged{.2\hsize}{\parskip=\baselineskip #}\tabskip=0pt plus 1fill &
\vtopragged{.2\hsize}{#}\tabskip=0pt \cr
This is a sentence.&
This is another nice sentence.
Whoa, another paragraph!&
Hey, look! A third sentence or two.
This one without a blank line between paragraphs.\cr
}
\endgroup
\bye
答案3
您可能还想使用 \valign:
\valign{%
\vtop{%
\hsize50mm
\raggedright\parindent0pt\tolerance9999
#
}
\cr
This is a sentence.\cr
This is another\hfil\break nice sentence.\hfil\break
Whoa, another paragraph!\cr
Hey, look! A third\hfil\break sentence or two.\cr
}
\bye