我有一份如下的文件:
__________________ __________________
| | |
| Chapter Title | Section ....... |
| | ....... ....... |
| Section ....... | ....... ....... |
| ....... ....... | ....... ....... |
| ....... ....... | ....... ....... |
| ....... ....... | ....... ....... |
| ....... ....... | ....... Section |
| ....... | ....... ....... |
| ....... | ....... ....... |
|__________________|__________________|
我想在文档的所有页面上添加一些空白,以便文本段落的顶部在所有页面上对齐,并且章节标题和节标题在顶部有自己的空间,如下所示:
__________________ __________________
| | |
| Chapter Title | | <-- Chapter titles
| | |
| Section | Section | <-- Section titles
| | |
| ....... ....... | ....... ....... | <-- Text begins here
| ....... ....... | ....... ....... |
| ....... ....... | ....... ....... |
| ....... ....... | ....... ....... |
| ....... ....... | ....... ....... |
|__________________|__________________|
即使页面上没有章节或部分标题,文本仍然从页面上的固定空间开始,因此所有页面都是一致的。
__________________ __________________
| | |
| | | <-- Chapter titles
| | |
| | Section | <-- Section titles
| | |
| ....... ....... | ....... ....... | <-- Text begins here
| ....... ....... | ....... ....... |
| ....... ....... | ....... ....... |
| ....... ....... | ....... |
| ....... ....... | ....... |
|__________________|__________________|
如何在文本顶部添加一些空白,以便只有章节和节标题出现在这个顶部区域,并且文本出现在固定高度?
答案1
一个可能的解决方案是将章节标题设置在图层中。
首先,让我们从页面布局开始。设置一个大值headerdistance
,以便在所有页面上获得较大的空白空间。
\setuplayout
[
headerdistance=8cm,
footerdistance=0cm,
]
接下来,定义一个图层并将其设置为页面背景。此图层将用于章节标题。
\definelayer[chapter]
\setupbackgrounds[page][background=chapter]
最后,定义一个 sectionheadalternative,用于在层中设置章节标题。我只是将实际格式化章节标题的任务委托给默认呈现的 sectionhead。
\defineheadalternative
[layer]
[
alternative=vertical,
renderingsetup=chapterlayer,
]
\unprotect
\startsetups[chapterlayer]
\setlayerframed
[chapter]
[
x=\layoutparameter{backspace},
y=\the\dimexpr\layoutparameter{topspace}+\layoutparameter{header}+1cm\relax,
]
[
width=\textwidth,
height=7cm,
align=normal,
foregroundstyle={\switchtobodyfont[32pt,ss]},
frame=off,
]
{\setups{\??headrenderings:\v!normal}}
\stopsetups
\protect
最后,将章节替代项设置为这个新的 sectionheadrenderer。
\setuphead[chapter]
[
style={\switchtobodyfont[32pt,ss]},
alternative=layer,
before=,
after={\vskip -0.9\lineheight},
]
这\vskip -...
是个临时解决方案,用于删除紧跟在节头之后的空白行。我假设这是由\par
节宏中的某个地方引起的。我不知道如何删除它,因此使用了临时解决方案。
通过上述设置,我得到以下输出: