ConTeXt:如何改变整个部分级别的背景颜色?

ConTeXt:如何改变整个部分级别的背景颜色?

按照指示这里,我有一个新的部分mysection。在这个新部分上,我想应用使用 MetaPost 创建的背景;为了解决这个问题,我们假设这个背景只是

\startuseMPgraphic{mysection}
  StartPage ;
  fill Page withcolor green ;
  StopPage ;
\stopuseMPgraphic

因此,为了将背景应用到我记得的部分那个答案然后开始尝试。我\globaldisablemode[mysectionpage]在设置中注释掉它,然后在使用pagebackground后在所有页面上都获得了所需的绿色背景。startmysection

让我通过一个例子来告诉你。

\defineresetset[myreset][][0]

\definehead[mysection][section=section-8, sectionresetset=myreset]
\setuplist[mysection][numbersegments=mysection]




\startuseMPgraphic{mysection}
StartPage ;
  fill Page withcolor green ;
StopPage ;
\stopuseMPgraphic

\definelayer[mysection][width=\paperwidth, height=\paperheight]
\defineoverlay[pagebackground][\directsetup{pagebackground}]
\setupbackgrounds[page][background=pagebackground]

\startsetups pagebackground
\doifelsemode {mysectionpage} {
  \setlayer[mysection][preset=lefttop]{\useMPgraphic{mysection}}
  %\globaldisablemode[mysectionpage]           <--------------------------
  }{}
\placelayer[mysection]
\stopsetups

\startsetups mysection:before
\globalenablemode[mysectionpage]
\stopsetups

\setuphead[mysection][before={\page[yes]\setup{mysection:before}}]
\setuphead[section][before={\page[yes]}]




\starttext
\startsection[title=Section]
  \dorecurse{3}{\input knuth}
\stopsection

\startmysection[title=My Section]
  \dorecurse{15}{\input ward}
\stopmysection

\startsection[title=Section]
  \dorecurse{3}{\input knuth}
\stopsection
\stoptext

在此处输入图片描述

如您所见,背景应用于文档之后的每一页\startmysection。这是实验的亮点。但是,我想要实现的是仅将背景应用于所有页面mysection,而不是其他部分。因此,常规的最后一页section应该具有白色背景。

我尝试\globaldisablemode[mysectionpage]加入else\doifmodeelse

\doifelsemode {mysectionpage} {
  \setlayer[mysection][preset=lefttop]{\useMPgraphic{mysection}}
  }{\globaldisablemode[mysectionpage]}

但它不起作用。然后我尝试创建一个设置after

\startsetups mysection:after
  \globaldisablemode[mysectionpage]
\stopsetups

它也不起作用。

然后我想我可以将部分移动到下面一个级别来创建mysection

  \definehead[mysection][section=section-3,sectionreset=mysectionreset]
  \definehead[section][section=section-4,sectionreset=sectionreset]
  \definehead[subsection][section=section-5,sectionreset=subsectionreset]
  ...

并应用同样的东西。也没有用。

答案1

像这样?

\startuseMPgraphic{chapterbackground}
  if \somenamedheadnumber{mysec}{current} > 0 :
    fill Page withcolor green;
  fi;
\stopuseMPgraphic

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

\definehead[mysec][section]

\starttext
  \dorecurse{5}{
    \startchapter \input ward \stopchapter \page
    \startmysec \input knuth \stopmysec \page
    \startmysec \input knuth \stopmysec \page
    \startchapter \input ward \stopchapter 
  }
\stoptext

答案2

目前尚不清楚当 里面有子部分时应该发生什么mysection。我假设着色应该继续,因为从技术上讲你仍然在 mysection 里面。

我的想法与 Dave Jarvis 相同,但我不使用 currentheadnumber,而是简单地检查标志的状态。我没有假设这会mysection开始或结束页面(尽管在下面的示例中确实如此),因此我只是在构建页面主体后禁用该标志。

\startuseMPgraphic{chapterbackground}
  StartPage;
  if \InsideMySection == 1 :
    fill Page withcolor green;
  fi;
  % label("\InsideMySection", center Page);
  StopPage;
\stopuseMPgraphic

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

\edef\InsideMySection{0}

\definehead[mysection][section]
           [
             page=yes,
             beforesection={\edef\InsideMySection{1}},
             aftersection={\appendtoks\gdef\InsideMySection{0}\to\everyafterpagebody},
          ]


\define\information{\InsideMySection}

\starttext
  \dorecurse{5}{
    \startchapter \information \input ward \stopchapter 
    \startmysection 
      \information \input knuth 
      \startsubsection \information \input ward \stopsubsection 
    \stopmysection 
    \startsection \information \input ward \stopsection 
    \startmysection \information \input knuth \stopmysection 
    \startsection \information \input ward \stopsection 
    \startchapter \information \input ward \stopchapter 
  }
\stoptext

相关内容