我需要\include
来自几个不同文件的数据,在单独的页面上显示每个文件的内容(例如,第 1 页上的 file1.tex,第 2 页上的 file2.tex),但如果文件内容无法容纳在一页中,则截断任何多余的数据。
我有一个简单的 ConTeXt 文档,如下所示:
\starttext
\subject{File 1}
\startitemize[n]
\input file1
\stopitemize
\pagebreak
\subject{File 2}
\startitemize[n]
\input file2
\stopitemize
\pagebreak
\subject{File 3}
\startitemize[n]
\input file3
\stopitemize
...
\stoptext
每个文件包含项目,\item
每行前面都有。为简单起见,下面是示例内容file1.tex
(其他文件也一样):
\dorecurse{100}{\item hello}
通常,ConTeXt 会包含文件,然后将后续项目包装到下一页。在上面的示例中,它到达项目 #23,然后将 #23-100 放在后面的页面上。如果项目 #23 是一个较长的段落,分页显示,则它应该在 #22 处截断(从不拆分项目)。
包含的文件的内容是自动生成的数据,但我只希望在页面上显示尽可能多的数据,任何多余的数据都是太多数据,需要丢弃且不需要报告。
我怎样才能让 ConTeXt 停在第 23 项(第一页的最后一项)处,并停止包含文档的其余部分,然后转到下一页?
答案1
在这个解决方案中,我只是将 之间的所有内容装入 中\start...\stopclippage
。\vbox
然后我计算此时页面上的剩余空间,即\pagegoal-\pagetotal
。将装箱的内容拆分到该高度,并丢弃拆分出的框。最后刷新该框。如果您想允许一些垂直拉伸和收缩,请使用\unvbox
而不是\box
。
我认为这不会与网格很好地交互。
\unexpanded\def\startclippage{\par\setbox\scratchbox=\vbox\bgroup}
\unexpanded\def\stopclippage
{\egroup
\scratchdimen=\dimexpr\pagegoal-\pagetotal\relax
\setbox\scratchbox=\vsplit\scratchbox to \scratchdimen
\box\scratchbox}
\starttext
\subject{File 1}
\startclippage
\startitemize[n]
\input file1
\stopitemize
\stopclippage
\pagebreak
\subject{File 2}
\startclippage
\startitemize[n]
\input file2
\stopitemize
\stopclippage
\pagebreak
\subject{File 3}
\startclippage
\startitemize[n]
\input file3
\stopitemize
\stopclippage
...
\stoptext