是否存在类似的机制来testpage
检查页面上还剩下多少行文本,但除了发出分页符之外还能执行其他操作?
我想确定页面上是否还剩下 10 行以上的内容,如果还剩下,就用某种装饰填充该空间。如果没有空间,就发出一个简单的分页符。
我看过了分页符的源代码,但是纯文本对我来说有点难以理解。
一个最小的例子看起来像这样:
\setuppapersize[A5]
\starttext
\input knuth
\testpage[10]
% Since testpage didn't fire, insert a small graphic here
% (this image is being added manually because I know there is space left,
% but I would like an automatic way to determine if there is space)
\vfill
\midaligned{\externalfigure[dummy][height=0.3\textheight]}
\vfill
\page[yes]
\input knuth
\input knuth
\testpage[10]
% Since testpage did fire, leave as is
\input knuth
\stoptext
答案1
机制pagechecker
该\testpage
命令使用一种称为的机制pagechecker
来计算页面上的剩余空间。
您可以使用密钥使用该机制将内容放置在页面上inbetween
。使用lines
密钥您可以指定页面上应保留多少行来放置内容。
计算行数的结果取决于接受0
和之间的数字的方法键3
。
\startsetups [fillpage]
\vfill
\midaligned{\externalfigure[dummy][lines=4]}
\vfill
\stopsetups
\definepagechecker [fillpage] [method=2,lines=8,inbetween=\directsetup{fillpage}]
\showgrid
\setuppapersize[A7]
\starttext
\input jojomayer
\checkpage [fillpage] [lines=9]
\page
\input jojomayer
\checkpage [fillpage]
\stoptext
手动计算剩余空间
当您想要更好地控制剩余空间的测量时,可以使用两个寄存器\pagegoal
和\pagetotal
。
\pagegoal
文本块的高度,达到该高度时强制分页。
\pagetotal
页面上当前材料的高度。
要获得剩余空间的高度,请\pagetotal
从中减去\pagegoal
。
\showgrid
\setuppapersize[A7]
\starttext
\input jojomayer
\the\dimexpr\pagegoal-\pagetotal\relax
\stoptext
要获取计算值的行数,您可以使用\getnoflines
或\getroundednoflines
命令。结果数字存储在\noflines
寄存器中。
结果\getnoflines
\showgrid
\setuppapersize[A7]
\starttext
\input jojomayer
\getnoflines{\dimexpr\pagegoal-\pagetotal\relax}
\number\noflines
\stoptext
结果\getroundednoflines
\showgrid
\setuppapersize[A7]
\starttext
\input jojomayer
\getroundednoflines{\dimexpr\pagegoal-\pagetotal\relax}
\number\noflines
\stoptext
答案2
尽管 Wolfgang 通过解释如何计算页面空间回答了问题的关键,但我还是花了几次 Google 搜索才弄清楚如何noflines
在 if 语句中实际使用寄存器。以下代码似乎产生了我想要的结果:
\setuppapersize[A5]
\define[1]\FillPage{
\par
\getnoflines{\the\dimexpr\pagegoal-\pagetotal\relax}
\ifnum\number\noflines>#1\relax
\vfill
\midaligned{\externalfigure[dummy][height=0.3\textheight]}
\vfill
\fi
\page[yes]
}
\starttext
\input knuth
\FillPage{10}
\input knuth
\input knuth
\FillPage{10}
\input knuth
\stoptext