问题

问题

问题

\setupbackgrounds宏可以改变页边距的背景颜色,从页面顶部到底部:

  \setupbackgrounds[footer,header,text][rightmargin][
    background=color,
    backgroundcolor=blue,
  ]

但是,一旦设置,似乎没有办法停止背景。这使我无法仅为章节页面设置背景颜色。

我相当确定我可以为此使用一个图层,但由于\setupbackgrounds已经有了右边距的页眉、页脚和文本区域的上下文,我认为最简单的方法是使用这个宏:

  \setuphead[chapter][
    header=empty,
    footer=empty,
    before={%
      \setupbackgrounds[footer,header,text][rightmargin][
        background=color,
        backgroundcolor=blue,
        state=repeat,
      ]
    },
    after={%
      \setupbackgrounds[footer,header,text][rightmargin][
        background=color,
        backgroundcolor=blue,
        state=stop,
      ]
    }
  ]

state=stop并不能阻止章节页面后的边距变蓝。相反,蓝色会一直延续到文档的其余部分。我尝试在以下部分内停止蓝色:

  \setuphead[section][
    before={%
      \setupbackgrounds[][][state=stop]
    }
  ]

问题

是否可以以\setupbackground这种方式使用(如果可以,如何使用)?

如果不是,您将如何使用图层来填充从页面顶部到底部的右边距?

有关的

答案1

一个选项是使用 Metapost 背景并使用ConTeXt 中的条件页面背景

\startMPinclusions
  numeric ChapterPageDone[];
\stopMPinclusions

\startuseMPgraphic{chapterbackground}
  StartPage;
  n := \somenamedheadnumber{chapter}{current};

  x0 := PaperWidth - BackSpace;
  x1 := x0 + RightMarginWidth;

  if n > 0 : % ignore pages before the first chapter
    if unknown ChapterPageDone[n] : % This is the first page a new chapter
          fill (x0,0) -- (x1,0) -- (x1, PaperHeight) -- (x0, PaperHeight) -- cycle
               withcolor \MPcolor{blue};
        ChapterPageDone[n] := 1 ;
    fi;
  fi;
  StopPage;
\stopuseMPgraphic

\defineoverlay[chapterbackground][\useMPgraphic{chapterbackground}]
\setupbackgrounds[page][background=chapterbackground]

\setuppapersize[A6]

\starttext

Non chapter page

\chapter{First}
Chapter page
\page

Non chapter page

\chapter{Second}
Chapter page

\stoptext

这使

在此处输入图片描述

编辑根据下面的评论,上述方法不适用于未编号的章节标题。在这种情况下,一个选项是检查章节标题是否发生变化。只要没有两个标题相同的章节,这种方法就会起作用。

\startMPinclusions
  string prevChapterTitle, currentChapterTitle;
  prevChapterTitle := "";
  currentChapterTitle := "";
\stopMPinclusions

\startuseMPgraphic{chapterbackground}
  StartPage;
  currentChapterTitle := "\namedstructurevariable{chapter}{title}";

  x0 := PaperWidth - BackSpace;
  x1 := x0 + RightMarginWidth;

  if currentChapterTitle <> prevChapterTitle :
        fill (x0,0) -- (x1,0) -- (x1, PaperHeight) -- (x0, PaperHeight) -- cycle
             withcolor \MPcolor{blue};
     prevChapterTitle := currentChapterTitle ;
  fi;
  StopPage;
\stopuseMPgraphic

\defineoverlay[chapterbackground][\useMPgraphic{chapterbackground}]
\setupbackgrounds[page][background=chapterbackground]

要排除目录页,请进行以下微小更改:

if prevChapterText <> "":
  fill (x0,0) -- (x1,0) -- (x1, PaperHeight) -- (x0, PaperHeight) -- cycle
    withcolor \MPcolor{blue};
fi;

相关内容