ConTeXt:如何防止文本块因分页符而分裂?

ConTeXt:如何防止文本块因分页符而分裂?

在下面这个最小工作示例的末尾有一个有趣的内容\startdelimitedtext[endtext],它应该打印在最后一页的底部,而不必在分页符上分割。我如何呈现[endtext]不可分割?

\setuppapersize [A4][A4]
\setuplayout    [width=middle,  backspace=1.5in, cutspace=1.5in,
                 height=middle, topspace=0.75in, bottomspace=0.75in]

\setuppagenumbering[location={footer,center}]

\setuptolerance[horizontal, tolerant, stretch]

\setupexternalfigures [location=default]

\definedelimitedtext[endtext]
\setupdelimitedtext[endtext][before={\vfill}]

\starttext
  \input douglas.tex

  \input douglas.tex

One line

A second line

And another line

\startendtext
\startalignment[middle]
Written in Hasselt, Belgium!\crlf
\externalfigure[cow][height=31pt]\crlf
This work is licensed under a Creative Cows\crlf Attribution-NonCowmercial-MilkAlike 3.0 Unported License.\crlf
Other licensing available on request. Typesetting by \ConTeXt\ \contextmark.
\stopalignment
\stopendtext

\stoptext

答案1

框不能跨页面拆分,因此在这里使用框是有意义的。\framed命令和 \startframedtext 环境是盒子的例子。

由于您使用了,\vfill我假设文本应放在页面底部。这不会按预期工作,因为 TeX 会删除垂直空间。这是 TeX 中分页方式的副作用。通常不希望以垂直空间开始页面,然后是段落,因此 TeX 会将其删除。这就是 的用途\null。它是一个空框,因此页面以框而不是垂直空间开始。惩罚可防止此框和垂直空间之间出现分页符。否则,垂直空间将再次出现在页面顶部并被 TeX 删除。

此外,\placefloats确保在排版之前打印所有浮点数endtext

最后,我把你的替换\crlf线路环境它确实尊重新行。

\setupexternalfigures
  [location=default]

\defineframedtext
  [endtext]
  [before=\placefloats\null\penalty\plustenthousand\vfill,
   width=fit]

\startbuffer
  \startendtext
    \startlines [align=middle]
      Written in Hasselt, Belgium!
      \midaligned{\externalfigure[cow][height=31pt]}
      This work is licensed under a Creative Cows
      Attribution-NonCowmercial-MilkAlike 3.0 Unported License.
      Other licensing available on request. Typesetting by \ConTeXt\ \contextmark.
    \stoplines
  \stopendtext
\stopbuffer

\starttext
  \dorecurse{9}{\input ward\par}
  \getbuffer

  \page
  \dorecurse{5}{\input ward\par}
  \getbuffer

  \page
  \dorecurse{9}{\input ward\par}
  \getbuffer
\stoptext

输出

相关内容