您能帮我写一个循环吗?该循环可以根据页面上的剩余空间重复播放一段文本,次数不限。
我想用 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