![如何在 ConTeXt 中水平扩展文本背景?](https://linux22.com/image/359608/%E5%A6%82%E4%BD%95%E5%9C%A8%20ConTeXt%20%E4%B8%AD%E6%B0%B4%E5%B9%B3%E6%89%A9%E5%B1%95%E6%96%87%E6%9C%AC%E8%83%8C%E6%99%AF%EF%BC%9F.png)
我正在使用 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 * 2
,loffset
框架的设置为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