ConTeXt:如何使用 MetaFun 更改部分和章节页面的背景颜色?

ConTeXt:如何使用 MetaFun 更改部分和章节页面的背景颜色?

我正在尝试使用 MetaFun 重现部分和章节中的类似内容:

截图来自 Isaac Abraham 所著的《使用 F# 进行编程》

将内容放在页面上很简单,所以我想获得彩色背景。但是我不知道如何将它放在所有的页...

我的第一次尝试是设置alternative一个MPpage

\setuppapersize[A6][A6]
\startsetups[partHeadRendering]
  \startMPpage
    StartPage ;

    numeric w ; w := bbwidth(Page) ;
    numeric h ; h := bbheight(Page) ;

    fill (unitsquare xyscaled (w,h)) withcolor \MPcolor{darkred} ;
    StopPage ;
  \stopMPpage
\stopsetups

\defineheadalternative[partrenderer][alternative=vertical, renderingsetup=partHeadRendering]


\setuphead[part][alternative=partrenderer, placehead=yes]

\showframe
\starttext
  \startpart
  \stoppart
\stoptext

但...

然后我尝试使用MPgraphic如图overlay所示封面页 wiki

\setuppapersize[A6][A6]

\startuseMPgraphic{PartCover}
  \startMPpage
    StartPage ;
    fill Page withcolor \MPcolor{darkred} ;
    StopPage ;
  \stopMPpage
\stopuseMPgraphic

\defineoverlay[PartCover][\useMPgraphic{PartCover}]

\startsetups[partHeadRendering]
  \setupbackgrounds[page][background=PartCover]
\stopsetups

\defineheadalternative[partrenderer][alternative=vertical, renderingsetup=partHeadRendering]


\setuphead[part][alternative=partrenderer, placehead=yes]

\showframe
\starttext
  \startpart
  \stoppart
\stoptext

但结果也不太好……

我也看过这个但我得到了与第一个相同的结果。

答案1

我今天了解到,您可以使用一种partpage模式和一个仅填充部分页面内容的图层。如下所示。

定义 MetaFun 背景:

\startuseMPgraphic{part}
StartPage ;
  fill Page withcolor 0.25[white,darkcyan] ;
  picture p, q ;
  p := textext("\ss\bf\setstrut\strut\getmarking[partnumber]") scaled 14 ;
  q := textext("\ss\bf\setstrut\strut Lesson") scaled 2 ;

  p := (p shifted - center p) ;
  q := (q shifted - center q) ;

  draw image (
    draw p withcolor white ;
    draw q ;
  ) shifted urcorner Field[Text][Text]  shifted - urcorner p ;
StopPage ;
\stopuseMPgraphic

定义一个图层、一个覆盖层(使用\directsetup下一步中介绍的),并设置背景以使用它们。

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

添加刚才提到的设置。它会检查您是否在 中partpage,如果在,它会使用 更新图层的内容\setlayer,然后禁用该partpage模式(如果不是,您还将在接下来的页面上获得该图层)。然后放置图层。

\startsetups pagebackground
\doifelsemode {partpage} {
  \setlayer[part][preset=lefttop]{\useMPgraphic{part}}
  \globaldisablemode[partpage]
  }{}
\placelayer[part]
\stopsetups

我们添加了另一个设置,启用部分页面模式并推送部分页面的内容。

\startsetups part:before
\globalenablemode[partpage]
\blank[force,20*line]
\stopsetups

最后我们设置部分。这里对我们来说最重要的是before启用partpage模式的键,以便页面背景启动。我还添加了一个style

\setuphead[part][
  number=no,
  placehead=yes,
  header=high,
  before=\setup{part:before},
  style={\definedfont[SansBold at 18pt]\WORD},
]

然后我们就可以开始准备内容了。我将字体换成了 dejavu,不过你当然也可以使用其他你喜欢的字体。

\setupbodyfont[dejavu]

\starttext
\startpart[title={The visual studio experience}]
  \dorecurse{20}{\samplefile{ward}}
\stoppart
\stoptext

将所有这些加在一起得到以下前两页。

显示结果的前两页

编辑

两条评论。代码

\startuseMPgraphic{PartCover}
  \startMPpage
    StartPage ;
    fill Page withcolor \MPcolor{darkred} ;
    StopPage ;
  \stopMPpage
\stopuseMPgraphic

您建议的无效。如果删除\startMPpage和,\stopMPpage效果会更好。

此外,还有测试套件其中包含很多很好的例子。在这个特定例子中,toggles-001.tex位于 backgrounds 文件夹中。

相关内容