Plain TeX:排列一些文本框

Plain TeX:排列一些文本框

请原谅我问了一个可能微不足道的问题。我正在研究书籍,但当我坐在电脑前时似乎总是感到困惑。

  • 我在用着纯 TeX
  • 我有三个多段落的文本块。
  • 我想将它们排列在一起,以便它们水平分布在页面上。

换句话说,我想这样做:

This is a               This is another                 Hey look! A third
sentence.               nice sentence.                  sentence or two

                        Whoa, another paragraph!

我觉得我需要三个vboxes,\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

相关内容