如何在 ConTeXt 中在每页顶部留出空白区域仅用于章节和部分标题?

如何在 ConTeXt 中在每页顶部留出空白区域仅用于章节和部分标题?

我有一份如下的文件:

 __________________ __________________
|                  |                  |
| 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节宏中的某个地方引起的。我不知道如何删除它,因此使用了临时解决方案。

通过上述设置,我得到以下输出:

在此处输入图片描述

相关内容