这个问题是对ConTeXt:避免跨页面枚举项。
给定一个项目组,每个\item
项目组包含一个或多个段落或项目组,可能混合使用。我只希望段落或项目组之间有分页符,但有几个例外:
- 第一个段落后不要分页,因为它有点像标题
- 仅当段落或项目组长度超过某个任意数字时,才将其拆分成碎片
X
。 - 拆分段落或项目组时,确保每个部分的长度
Y
为Y>X/Z
某个任意数字Z
。这样做的目的是尽量减少孤行和寡行尤其第二段是主体段落。
下面的例子说明了我正在处理的段落类型。
- 第一段总是单行。
- 其他段落或嵌套项目很短,1-5 (+?) 行。
- 每个项目有少量段落,或每个嵌套项目组有少量项目。
我认为最后两点更像是指导方针。这些是我一直在努力解决的问题:
- 第一段后分页。
- 第二段断行不当。如果是四行,那么就是 2-2 断行。我不知道是否可以断行 1-3/3-1,3 行段落断行 1-2/2-1,或者寡妇和俱乐部惩罚是否可以防止这种情况发生。我甚至不确定我是否愿意将 5-6 行的段落完全分开。但是,是的,有一些任意点(8?)我希望段落分开,因为糟糕的分页符很糟糕(页脚溢出更糟糕)。当我说第二段时,我指的是所有剩余的段落……而且我比其他人更关心第二段的外观。我很幸运没有跨项目组进行分页,但应该适用相同的准则。
\widowpenalty
对设置或\clubpenalty
整个文档不太满意。
\setupwhitespace[medium]
\starttext
\startitemize
\sym{>}\bold{Heading One}\hfill1
\samplefile{ward}
\sym{>}\bold{Heading Two}\hfill2
\samplefile{ward}
\samplefile{ward}
\sym{>}\bold{Heading Three}\hfill3
\samplefile{knuth}
\sym{>}\bold{Heading Four}\hfill4
\startitemize[joinedup,nowhite,after]
\item Some important point.
\item \samplefile{jojomayer}
\item Hmm shouldn't there be whitespace below?
\stopitemize
\samplefile{ward}
\sym{>}\bold{Heading Five}\hfill5
\samplefile{ward}
\startitemize[joinedup,nowhite,after]
\item Some important point.
\item \samplefile{jojomayer}
\item Hmm shouldn't there be whitespace below?
\stopitemize
\stopitemize
\stoptext
(分页符可出现在任意位置)
答案1
对于第一点,您可以使用\start...\stophead
设置来afterhead={\blank[disable]}
防止此时出现分页符。其他点更复杂,我只能提供部分解决方案,这需要宏支持。我编写了一个宏,\keeptogether{<n>}{<content>}
其中<n>
是您想要防止分页的行数。宏只是记录<content>
到一个框中,并在每行之后进行拆分<n>
。不幸的是,这可能会丢弃\parskip
(\vsplit
请参阅这里),所以不行\setupwhitespace[medium]
,除非您不介意段落间距不一致。
\definesymbol[chevron][>]
\setupitemize
[headstyle=bold,
afterhead={\blank[disable]}]
\setupitemize
[1]
[symbol=chevron]
\define[1]\keeptogether{%
\dowithnextbox{%
\setbox\scratchbox=\vsplit\nextbox to #1\lineheight
\setbox\scratchbox=\vbox{\unvbox\scratchbox}
\ifdim\dp\scratchbox<\strutdepth
\dp\scratchbox=\strutdepth
\fi
\box\scratchbox
\unvbox\nextbox
}\vbox
}
\starttext
\startitemize
\starthead{Heading One\hfill\normal{1}}
\samplefile{ward}
\stophead
\starthead{Heading Two\hfill\normal{2}}
\samplefile{ward}
\samplefile{ward}
\stophead
\starthead{Heading Three\hfill\normal{3}}
\samplefile{knuth}
\stophead
\starthead{Heading Four\hfill\normal{4}}
\startitemize[joinedup,nowhite,after]
\item Some important point.
\item \samplefile{jojomayer}
\item Hmm shouldn't there be whitespace below?
\stopitemize
\keeptogether{3}{\samplefile{knuth}}
\stophead
\starthead{Heading Five\hfill\normal{5}}
\samplefile{ward}
\startitemize[joinedup,nowhite,after]
\item Some important point.
\item \samplefile{jojomayer}
\item Hmm shouldn't there be whitespace below?
\stopitemize
\stophead
\stopitemize
\stoptext