问题
该\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;