ConTeXt:计算页面剩余空间(如 testpage)

ConTeXt:计算页面剩余空间(如 testpage)

是否存在类似的机制来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

使用 \getnoflines 计算的行数

结果\getroundednoflines

\showgrid

\setuppapersize[A7]

\starttext

\input jojomayer

\getroundednoflines{\dimexpr\pagegoal-\pagetotal\relax}
\number\noflines

\stoptext

使用 \getroundednoflines 计算的行数

答案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

相关内容