如何在 ConTeXt 中水平扩展文本背景?

如何在 ConTeXt 中水平扩展文本背景?

我正在使用 ConTeXt,我想为我的章节标题添加一个背景,稍微延伸到左右边距(0.5 厘米左右)。我希望文本本身处于正常位置。我最初尝试使用框架来实现这一点(但没有成功),然后根据上下文邮件列表存档中的主题建议,尝试使用文本背景。

我可以使用 backgroundoffset 向各个方向延伸背景,但我只希望它在水平方向上延伸。

最大极限:

\setuppapersize[A4]
\setupindenting[never]
\setuplayout[grid=yes]

\definetextbackground[headback][background=color, backgroundcolor=black, frame=off, location=paragraph] % if I add backgroundoffset=0.5cm I can get it to extend in ALL directions
\setuphead[subject][deeptextcommand=\headback, color=white]

\starttext
\startsubject[title={With an overhanging bar of colour}]

Some stuff

\stopsubject
\stoptext

交叉发布免责声明:我也在周三早上将此发送到 ConTeXt 邮件列表,但我仍在等待管理员批准电子邮件和我的列表订阅。

答案1

这是一个使用 的解决方案framed。我只是设置了command=...的键\setuphead。我不认为这deeptextcommand是正确的键,因为化妆等已经应用deeptextcommand

\showframe % for visualizing the page layout
\definemeasure[HeadFrameWidth][\dimexpr\textwidth+0.5cm\relax]
\defineframed
  [HeadFramed]
  [
    width=\measured{HeadFrameWidth},
    align=normal,
    background=color,
    backgroundcolor=black,
    foregroundcolor=white,
    % Play around with this setting if you wish
    toffset=0.5em,
    boffset=0.5em,
  ]
\define[2]\HeadCommand
    {\HeadFramed{#1#2}}

\setuphead[subject][command=\HeadCommand]

\starttext
\startsubject[title={With an overhanging bar of colour}]
Some stuff
\stopsubject
\stoptext

这使

在此处输入图片描述

如果您希望框架在两个方向上延伸,则有多种方法可以实现。一种方法是将框架宽度设置为\textWidth + 0.5cm * 2loffset框架的设置为0.5cm,并在插入框架之前添加\hskip -0.5cm。因此,实际上看起来框架正在向左延伸。(在下面的示例中,我更改了颜色,以便您可以看到使用绘制的页边距\showframe

\showframe % for visualizing the page layout

\definemeasure[HeadFrameWidth][\dimexpr\textwidth+0.5cm*2\relax]

\definecolor[gray][s=0.2,t=0.1,a=1]

\defineframed
  [HeadFramed]
  [
    width=\measured{HeadFrameWidth},
    align=normal,
    background=color,
    backgroundcolor=gray,
    foregroundcolor=black,
    loffset=0.5cm,
    % Play around with this setting if you wish
    toffset=0.5em,
    boffset=0.5em,
  ]
\define[2]\HeadCommand
    {\hskip -0.5cm\HeadFramed{#1#2}}

\setuphead[subject][command=\HeadCommand]

\starttext
\startsubject[title={With an overhanging bar of colour}]
Some stuff
\stopsubject
\stoptext

在此处输入图片描述

然而,这开始变得非常黑客化。在这个阶段,使用 metapost 绘制背景可能更简单。

\showframe % for visualizing the page layout

\definecolor[gray][s=0.2,t=0.1,a=1]

\startuseMPgraphic{extended}
  fill OverlayBox leftenlarged 0.5cm rightenlarged 0.5cm withcolor OverlayColor;
  setbounds currentpicture to OverlayBox;
\stopuseMPgraphic

\defineoverlay[extended][\useMPgraphic{extended}]

\defineframed
  [HeadFramed]
  [
    frame=off,
    width=broad,
    align=normal,
    background=extended,
    backgroundcolor=gray,
    foregroundcolor=black,
  ]
\define[2]\HeadCommand
    {\HeadFramed{#1#2}}

\setuphead[subject][command=\HeadCommand]

\starttext
\startsubject[title={With an overhanging bar of colour}]
Some stuff
\stopsubject
\stoptext

答案2

您可以使用background但不能使用textbackground。无论如何,我会使用 Aditya 的解决方案。

\showframe

\setuppapersize[A4]
\setupindenting[never]
\setuplayout[grid=yes]

\definebackground
  [headback]
  [background=color,
   backgroundcolor=black,
   frame=off,
   roffset=.5cm]

\setuphead
  [subject]
  [deeptextcommand=\headback,
   color=white]

\starttext
\startsubject[title={With an overhanging bar of colour}]

Some stuff

\stopsubject
\stoptext

在此处输入图片描述

相关内容