重复一段文字,直到填满一页

重复一段文字,直到填满一页

您能帮我写一个循环吗?该循环可以根据页面上的剩余空间重复播放一段文本,次数不限。

我想用 TeX 制作一个笔记本,它被分成几个部分。每个部分都以一些打印的记录(取自现有数据库)开始,然后是一些空间来手写新条目。

手写记录的空间由以下方式生成:

\noindent Type of Widget: \dotfill \break
Observations: \dotfill \break
\null\dotfill

我遇到的问题是垂直对齐问题:我希望每个部分都从新页面的顶部开始,然后是打印的记录,然后是足够的块用于手写笔记以填满该页面上剩余的垂直空间。类似这样:


部分:特殊小部件

小部件类型:ABC123

观察结果:Lorem ipsum dolor sit amet,consectetur adipiscing elit。暂停 id orci nunc,sed sollicitudin lectus。

小部件类型:CDE123

观察结果:埃蒂安湖是无色透明的,它与元素相连,元素位于狮子座。 Ut pulvinar,lorem sit amet feugiat hendrerit,sapien justo accumsan eros,eleifend consectetur nisl urna at nibh。

小部件类型:...........

观察结果:................................................................................................

...........................................................................................................................

小部件类型:...........

观察结果:................................................................................................

...........................................................................................................................


由于记录的长度可能有所不同,因此我需要运行一个循环来执行如下操作(以 eplain 伪代码表示):

\for
    \noindent Type of Widget: \dotfill \break
    Observations: \dotfill \break
    \null\dotfill
\if **test to see if there is enough vspace to repeat block**
\repeat

有人能指点我如何编写测试“页面上是否有足够的空间来打印这块文本?”吗?我猜我会先创建一个与文本块大小相同的 \vbox,然后看看它是否适合当前页面,但我不知道如何实现这一点。

我希望这已经足够清楚了。如果没有,请告诉我。

谢谢。

-雅各布

答案1

这是使用垂直引线的地方。这里是起点。

\documentclass{article}
\usepackage{lipsum}
\newsavebox\widgetbox
\begin{document}
\setbox\widgetbox\vbox
  {\vspace*{6pt}\noindent Type of Widget: \dotfill \break
  Observations: \dotfill \break
  \null\dotfill\par}

\lipsum[1]

\cleaders\copy\widgetbox\vskip0pt plus 1fill
\end{document}

\cleaders将直接放在彼此的顶部,顶部和底部留出空间以填充页面。使用\xleaders来在框之间留出额外的空间。

您也可以使用\leaders,这样可以将这些框放置在每一页的相同位置。但是您需要注意尺寸。理想情况下,页面高度应该是 高度的整数倍\widgetbox

答案2

为了我的目的,Harald 的答案确实需要翻译成纯 TeX。我的第一个尝试是下面的这个,它似乎有效,除了(由于我还不太明白的原因),我需要在 \cleaders 和 \eject 后面添加一个额外的页面:

\setbox0=\vbox{\noindent Type of Widget: \dotfill \break
  Observations: \dotfill \break
  \null\dotfill\break
  }

Lorem ipsum dolor etc.

\cleaders\box0\vfill

\eject

Another Page

\bye

相关内容