我想避免在 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