我需要使页面内容垂直居中,内容被强制放在单独的页面上(用\page
命令分隔)。
previous page content
\page
this content must be verticaly centered on it's page.
\page
next page
放在\vfill
第一行后面\page
没有任何作用。我需要在不使用排版的情况下将内容居中,因为排版会删除页码,但我需要像往常一样排版此页面。
答案1
在正常排版模式下进入页面时,上下文
- 处于垂直模式,并且
- 将吞噬紧随其后的所有跳过,以便适当地对齐文本主体第一行的顶部。
因此,在页面顶部插入垂直跳过不会产生任何影响。
为了解决这个问题,你需要强制 TeX 进入水平模式,你可以这样做
- 插入水平材料,例如支柱,或
- 明确终止垂直模式,这通常是通过
\dontleavehmode
指令(上下文同义词\quitvmode
原始的),或者鲜为人知的\leavevmode
[0].
惯用的解决方案如下:
\starttext
\dontleavehmode \vfill
foo
\vfill
\stoptext
因此,如果您打算在不使用构成元素的情况下垂直居中页面,则可以定义如下环境(感谢 /u/Aditya 的建议):
\definestartstop [centeredpage] [
before=\dontleavehmode \vfill,
after=\vfill,
]
\starttext
\startcenteredpage
foo
\stopcenteredpage
\stoptext
与此相关的是,你要求的实际上可以通过调整
选择\setupmakeup
。关键设置是pagestate
将谁的值传递给隐式的\setuppagenumber
,以及headerstate
和
footerstate
。要使页眉和页脚出现在结构上,并防止页码忽略该页面,需要将这些选项设置为
开始(他们默认停止)。 例如:
\definemakeup [centeredpage]
\setupmakeup [centeredpage] [
pagestate=start,
top=\vfill,
bottom=\vfill,
headerstate=start,
footerstate=start,
page=yes,
]
\setupheadertexts [dummy header]
\setupfootertexts [dummy footer] [{\getnumber [userpage]}]
\starttext
text on page before
\startcenteredpagemakeup
\input ward
\stopcenteredpagemakeup
text on page after
\stoptext
[0] 讨论\leavevmode
vs. \dontleavehmode
/
\quitvmode
请参阅
Taco 在 Pdftex 列表上的这篇文章。