在 ConTeXt 中为浮动对象添加框架和背景颜色

在 ConTeXt 中为浮动对象添加框架和背景颜色

我试图按照如下方式装饰我的论文中的浮点数:

  • 每个浮标应有一个自定义颜色的顶部/底部框架,
  • 每个浮动的标题和内容应该具有相同的背景颜色。

基本上,我希望它看起来像这样:

用框架和背景颜色装饰的浮筒

到目前为止,我只能通过将浮点数嵌入框架文本来实现这一点,如下所示:

\startframedtext[frame=off,topframe=on,bottomframe=on,framecolor=darkgray,background=color,backgroundcolor=lightgray]
  \placefigure[here][figure:figure label]
    {figure caption}
    {figure content}
\stopframedtext

只要浮动元素位于页面中间某处,这种方法就有效。但是,一旦浮动元素成为页面上的第一个元素,标题和内容就会移出框架文本,看起来有点像这样:

浮动装饰但内容移出了框架

我猜想这与 ConTeXt 放置浮点数的特殊方式有关。

现在,我想知道是否有办法解决这个问题。一种方法可能是根本不使用浮点数,而是设置带有标签的自定义枚举环境。有什么想法我还可以尝试吗?\setupfloats并且\setupcaptions确实有before=after=inbetween=选项,但我无法让它们为我创建所需的装饰。

答案1

以下内容在 MkII 中有效(使用 pdftex 引擎),但在 MkIV 中无效,因为\placefloatcaption尚未在 MkIV 中实现。

\setupexternalfigures[location={local,global,default}] 

\setupcolors[state=start]
\setupfloats[frame=off,background=color, backgroundcolor=gray, backgroundoffset=3mm] 

\starttext 

\section{A figure with a background} 

\placefigure 
  {none} 
  {\placelegend 
  {\externalfigure[cow]} 
  {\placefloatcaption[figure]{A dutch cow}}} 

\stoptext

对于 MkIV,您可以定义自己的浮点处理程序来绘制背景。例如:

\setupexternalfigures[location={local,global,default}] 

\installfloatboxbuilder {bottombackground}    \dofloatboxbackgroundbuilder

\unprotected\def\dofloatboxbackgroundbuilder
  {\expanded{\doifinset{\v!overlay}{\floatcaptionparameter\c!location}}\bothangfloat
     {\tempfloatwidth\wd\float_content_box
      \framed
        [
          \c!align=\v!normal,
          \c!frame=\floatcaptionparameter\c!frame,
          \c!framecolor=\floatcaptionparameter\c!framecolor,
          \c!background=\floatcaptionparameter\c!background,
          \c!backgroundcolor=\floatcaptionparameter\c!backgroundcolor,
          \c!backgroundoffset=\floatcaptionparameter\c!backgroundoffset,
        ]%
      {\ifparfloat
        \hbox{\hbox               {\box\float_content_box}}%
        \dofloatboxbetweenstack
        \hbox{\locate_side_float  {\box\float_caption_box}}%
      \else
        \setfloathsize
        \hbox{\float_align_content{\box\float_content_box}}%
        \dofloatboxbetweenstack
        \hbox{\locate_text_float  {\box\float_caption_box}}%
      \fi}}}


\setupcaption[location={bottombackground},background=color, backgroundcolor=gray, frame=off]
\starttext 

\section{A figure with a background} 

\startplacefigure[title={A dutch cow}]
  \externalfigure[cow]
\stopplacefigure

\stoptext

答案2

您将图形放在框架中,但您应该将框架放在图形中。当您的图形放置在“此处”时,它最终会在框架内,但顶部或底部放置会将其移出框架。这会将标题放在框架之外:

  \placefigure[top][figure:figure label]
  {figure caption}
  {
      \startframedtext[frame=off,topframe=on,bottomframe=on,framecolor=darkgray,background=color,backgroundcolor=lightgray]
      figure content
      \stopframedtext
  }

相关内容