ConTeXt:在浮动图形上方和下方放置规则

ConTeXt:在浮动图形上方和下方放置规则

我正在尝试在浮动图形的上方和下方放置一条规则以实现以下设计。但无济于事。

我尝试在\blackrule之前和之后放置\placefigure。但这显然行不通,因为浮动元素会在文档中浮动,而不会遵循规则。

小样

编辑:

我尝试了以下代码,但效果不佳。我需要标题上方的规则。

\startplacefigure \blackrule[width=\textwidth,height=.8pt,color=red] \externalfigure[kitten.jpg][width=\textwidth] \blackrule[width=\textwidth,height=.8pt,color=red] \stopplacefigure

在此处输入图片描述

答案1

据我所知,没有内置选项,但使用核心命令实现起来相对简单:

\def\floatbackrule{\blackrule[width=\textwidth,height=.8pt,color=red]}

\unprotect
\installfloatboxbuilder {topframed}    \strc_floats_build_box_top_framed
\installfloatboxbuilder {bottomframed} \strc_floats_build_box_bottom_framed

\def\strc_floats_build_box_top_framed
    {\floatbackrule
     \strc_floats_build_box_top
     \floatbackrule}

\def\strc_floats_build_box_bottom_framed
    {\floatbackrule
     \strc_floats_build_box_bottom
     \floatbackrule}

\protect

以下是一个例子:

\setupcaption
  [
    location=topframed,
  ]

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

\starttext 

\section{A figure with rules} 

\input knuth

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

\dorecurse{4}{\input knuth \endgraf}

\stoptext

这使:

在此处输入图片描述

附录:此简单方法无法处理较长的标题,并且不适用于该align选项。原因是内部宏\strc_floats_prepare_page_captionlocation参数 istop或进行了一些更正。当设置为bottom时,这些更正不会发生。要解决此问题,我们需要修补“\strc_floats_prepare_page_caption”,如下所示:locationtopframed

\def\strc_floats_prepare_page_caption
  {\edef\p_strc_floats_caption_width   {\floatcaptionparameter\c!width}%
   \edef\p_strc_floats_caption_minwidth{\floatcaptionparameter\c!minwidth}%
   \edef\p_strc_floats_caption_align   {\floatcaptionparameter\c!align}%
   \dostarttagged\t!floatcaption\empty
   \doifcommonelse\floatcaptionlocation{\v!top,\v!bottom,topframed,bottomframed}
      {\strc_floats_prepare_page_caption_top_bottom}
      {\ifx\p_strc_floats_caption_width\v!fit
         \strc_floats_prepare_side_auto_caption
       \else\ifx\p_strc_floats_caption_width\v!max
         \strc_floats_prepare_side_auto_caption
       \else
         \strc_floats_prepare_side_width_caption
      \fi\fi}%
   \dostoptagged}

这是一个完整的例子:

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

\def\floatbackrule{\blackrule[width=\textwidth,height=.8pt,color=red]}

\unprotect
\installfloatboxbuilder {topframed}    \strc_floats_build_box_top_framed
\installfloatboxbuilder {bottomframed} \strc_floats_build_box_bottom_framed

\def\strc_floats_build_box_top_framed
    {\floatbackrule
     \strc_floats_build_box_top
     \floatbackrule}

\def\strc_floats_build_box_bottom_framed
    {\floatbackrule
     \strc_floats_build_box_bottom
     \floatbackrule}

\def\strc_floats_prepare_page_caption
  {\edef\p_strc_floats_caption_width   {\floatcaptionparameter\c!width}%
   \edef\p_strc_floats_caption_minwidth{\floatcaptionparameter\c!minwidth}%
   \edef\p_strc_floats_caption_align   {\floatcaptionparameter\c!align}%
   \dostarttagged\t!floatcaption\empty
   \doifcommonelse\floatcaptionlocation{\v!top,\v!bottom,topframed,bottomframed}
      {\strc_floats_prepare_page_caption_top_bottom}
      {\ifx\p_strc_floats_caption_width\v!fit
         \strc_floats_prepare_side_auto_caption
       \else\ifx\p_strc_floats_caption_width\v!max
         \strc_floats_prepare_side_auto_caption
       \else
         \strc_floats_prepare_side_width_caption
      \fi\fi}%
   \dostoptagged}

\protect


\setupcaption
  [
    location=topframed,
    align=flushleft,
    width=\textwidth,
  ]
\starttext 

\section{A figure with rules} 

\input knuth

\startplacefigure[title={\input zapf \relax}]
  \externalfigure[cow]
\stopplacefigure

\dorecurse{4}{\input knuth \endgraf}

\stoptext

这使

在此处输入图片描述

答案2

下一个 ConTeXt 版本将有新的命令\setupfloatframed,可用于为整个浮点块设置背景。该命令采用与相同的参数,\setupframed其语法如下图所示。

在此处输入图片描述

除了为整个浮动元素设置背景外,您还可以为浮动元素的标题或内容设置单独的背景。要为这两个元素设置值,您必须使用\setupcaption\setupfloat命令,它们也接受 的参数\setupframed

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

\setupcaption
  [figure]
  [location=top]

\setupfloatframed
  [figure]
  [width=max,
   toffset=1.5ex,
   boffset=1.5ex,
   framecolor=red,
   topframe=on,
   bottomframe=on]

\starttext

\samplefile{weisman}

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

\samplefile{weisman}

\setupfloat       [intermezzo] [background=color,backgroundcolor=red]
\setupcaption     [intermezzo] [background=color,backgroundcolor=blue]
\setupfloatframed [intermezzo] [background=color,backgroundcolor=green]

\startplaceintermezzo[title={Another cow}]
  \externalfigure[cow][width=6cm]
\stopplaceintermezzo

\samplefile{weisman}

\stoptext

在此处输入图片描述

相关内容