我正在尝试在浮动图形的上方和下方放置一条规则以实现以下设计。但无济于事。
我尝试在\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_caption
对location
参数 istop
或进行了一些更正。当设置为bottom
时,这些更正不会发生。要解决此问题,我们需要修补“\strc_floats_prepare_page_caption”,如下所示:location
topframed
\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