ConTeXt:高级枚举项设置

ConTeXt:高级枚举项设置

这个问题是对ConTeXt:避免跨页面枚举项

给定一个项目组,每个\item项目组包含一个或多个段落或项目组,可能混合使用。我只希望段落或项目组之间有分页符,但有几个例外:

  • 第一个段落后不要分页,因为它有点像标题
  • 仅当段落或项目组长度超过某个任意数字时,才将其拆分成碎片X
  • 拆分段落或项目组时,确保每个部分的长度YY>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

相关内容