ConTeXt 的分页方式有一个常见问题让我感到困扰:有些内容我宁愿不在第一行。例如,如果在较长的文档中找到以下代码片段
which leads to the result
\startformula
a = b
\stopformula
它可能会产生这样的输出:文本是页面的最后一行,而公式是从下一页开始。另一个例子是我在单独的文件中管理练习的方式,如下所示
\exercisetitle{My title}
\startmode[questions]
Here are the questions
\stopmode
\startmode[answer]
Here are the answers
\stopmode
我经常将标题放在一页的底部,将练习的开始放在下一页,而分页符最好放在标题之前,这样可以使标题和练习连在一起。但是,我不能简单地使用\vbox
,因为练习可能很长,练习内部的分页符可能会毫无问题地出现。
我可以手动管理它,但这很愚蠢,因为这种工具的目的是(至少在大多数情况下)免于这些微小的调整。我可以在我的环境文件中放入哪些配置选项来规范此行为?我知道,\page[no]
但它不是那么自动化,有时就是不起作用(例如,我下面的 MWE 有效,但我在实际文档中遇到了完全类似的情况,命令\page[no]
不起作用。
\setuppapersize[A5][A5]
\defineitemgroup[questions][levels=2]
\setupitemgroup[questions][1][n,packed]
\setupitemgroup[questions][2][a,packed,repeat][stopper=)]
\starttext
% A bit of text to reach the end of the page
\input knuth
\blank
\input knuth
% The useful part
{\sl My dear fellow TeX users}, I would like to introduce you the following itemize :
\page[no]
\startquestions[columns]
\item one !
\item two !
\item three !
\item four !
\item five !
\item six !
\stopquestions
\stoptext
答案1
不幸的是,\defineitemgroup
没有spacebefore
选项,但您可以输入\blank[samepage]
密钥before
。在spacebefore
可用的情况下,使用它更有意义,例如使用公式:\setupformula[spacebefore={samepage}]
。
注意:默认情况下,键中含有itemgroup
。如果不使用任何可选参数,将插入大小为 的空白。要保留此数量(在表示 时会丢失),必须将其包括在内,即。这有点丑陋,但我不知道有更好的方法来获取当前间距值。\blank
before
\blank
\currentvspacing
\blank[samepage]
\blank[\currentvspacing,samepage]
\setuppapersize[A5][A5]
\defineitemgroup[questions][levels=2,before={\blank[samepage]}]
\setupitemgroup[questions][1][n,packed]
\setupitemgroup[questions][2][a,packed,repeat][stopper=)]
\starttext
% A bit of text to reach the end of the page
\input knuth
\blank
\input knuth
% The useful part
{\sl My dear fellow TeX users}, I would like to introduce you the following itemize :
\startquestions[columns]
\item one !
\item two !
\item three !
\item four !
\item five !
\item six !
\stopquestions
\stoptext
答案2
对于 itemize 和 itemgroups,可以使用intro
关键字来防止在 itemgroup 开始之前分页。例如:
\setuppapersize[A5][A5]
\defineitemgroup[questions][levels=2]
\setupitemgroup[questions][1][n,packed,intro]
\setupitemgroup[questions][2][a,packed,repeat][stopper=)]
\starttext
% A bit of text to reach the end of the page
\input knuth
\blank
\input knuth
% The useful part
{\sl My dear fellow TeX users}, I would like to introduce you the following itemize :
\startquestions
\item one !
\item two !
\item three !
\item four !
\item five !
\item six !
\stopquestions
\stoptext
如果只有两个项目,它还可以防止项目之间出现分页符。
另一个选项是使用autointro
键,如果前一段少于两行,则可以防止在项目组开始之前出现分页符。因此,如果您在节头后插入项目组,也可以使用autointro
不幸的是,这些选项不适用于定义中过早出现的columns
选项。\startmixedcolumn