9

Problem

The \setupbackgrounds macro has the ability to change the background colour of the margins, from the top of the page to the bottom:

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

However, once set, there does not seem to be a way to stop the backgrounds. This is preventing me from setting the background colour for only the chapter pages.

I'm fairly certain I could use a layer for this, but since \setupbackgrounds already has context for the right margin's header, footer, and text areas, I thought it would be easiest to commandeer this macro:

  \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,
      ]
    }
  ]

The state=stop doesn't stop the margin from being blue after the chapter page. Rather, the blue continues in the margin for the remainder of the document. I tried to stop the blue within the section:

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

Question

Is it possible to use a \setupbackground in this way (if so, how)?

If not, how would you use a layer to fill in the right-hand margin from the top of the page to the bottom?

Related

9

One option is to use Metapost backgrounds and use the trick described in Conditional page backgrounds in 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

which gives

enter image description here

EDIT Based on the comment below, the above method will not work for unnumbered section heads. In that case, one option is to check if there has been a change in the title of chapter. Such an approach will work as long as you do not have two chapters with identical titles.

\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]

To exclude the table of contents page, make the following minor change:

if prevChapterText <> "":
  fill (x0,0) -- (x1,0) -- (x1, PaperHeight) -- (x0, PaperHeight) -- cycle
    withcolor \MPcolor{blue};
fi;
  • 1
    Yes, this relies on the value of section number, so it will not work with number=no. Let me think of an alternative for unnumbered section heads. BTW, instead of using beforesection=\page, you should use page=yes. – Aditya Aug 19 '13 at 20:08
  • 1
    To separate chapter and section use continue=no. You can use chapter title as well. I'll need to look up the internal command for that. – Aditya Aug 19 '13 at 20:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.