避免在 ConTeXt 页面顶部显示公式

避免在 ConTeXt 页面顶部显示公式

我想避免在 ConTeXt 中页面顶部显示公式(事实上,我的大文档在页面顶部显示了几个公式),我已经阅读这个答案就此主题而言。

因此,我使用了\predisplaypenalty,默认情况下在 ConTexT 中设置为0。我使用了以下代码:

\predisplaypenalty=10000

\starttext
\dorecurse{3}{\input knuth\par}
\input knuth text without a new paragraph
\startformula
\exp(x)=\sum_{k=0}^{+\infty}\frac{x^k}{k!}.
\stopformula
Still we have \tex{predisplaypenalty} set to \the\predisplaypenalty
\stoptext

第 2 页的顶部如下所示:

代码输出,在顶部显示公式

在源代码中,predisplaypenalty某些文件中提到了,例如在strc-mat.mkiv中将其设置为\zerocount。在 中syst-pln.mkiv,这是一个将“几个变量设置为 Plain TeX 值”的模块,它被设置为10000,但这可能会在 中被覆盖(如果读取)strc-mat.mkiv

问题 避免在 ConTeXt 中页面顶部显示公式的正确方法是什么?

只是为了澄清一下,您可以假设我使用的是最新的独立版本的 ConTeXt。

更新我修改了代码,这样公式前就不再有段落分隔符了。这不是问题所在。

答案1

首先要注意的是,您不应该\predisplaypenalty手动设置计数器。ConTeXt 中几乎所有东西都有一个高级接口。处理这个问题的正确方法是设置\setupformulas[spacebefore={big,samepage}]。现在,乐趣就从这里开始了……

strc-mat.mkiv我们发现

\c!spacebefore=\v!big,
\c!spaceafter=\formulaparameter\c!spacebefore,

这使得默认情况spaceafter下始终等于spacebefore。所以我们必须想出一个更合理的变体,即

\setupformulas[spacebefore={big,samepage},spaceafter=big]

如果这样做,公式前面仍会有分页符。嗯,这是怎么回事?经过一番调查,我发现spacebefore插入的方式过于复杂,与 不协调\prevdepth。现在,\prevdepth被用来\blank做出有关分页符的某些决定,在这种情况下,这会破坏我们精心设计的设置。有办法吗?

\plusthree是的,有。和往常一样,ConTeXt 中有一些未公开的魔法,在这种情况下,我们只需轻按一个开关(默认为),即可更改在公式前插入空格的方式。

\c_strc_formulas_space_model=\plustwo

我会进一步调查。也许我能找到有问题的部分,并可以把它给汉斯看,这样他就能修复它了。

\setupformulas[spacebefore={big,samepage},spaceafter=big]

\unprotect
\c_strc_formulas_space_model=\plustwo
\protect

\starttext

\dorecurse{4}{\input knuth\par}
\startformula
  \exp(x)=\sum_{k=0}^{+\infty}\frac{x^k}{k!}.
\stopformula

\stoptext

在此处输入图片描述

相关内容