我正在尝试改进工作表中的概览,现在我正尝试框出整个部分,最好是带圆角,但找不到任何解决方案。有没有类似\framedsection
上下文的内容?
答案1
您可以使用textbackground
环境将一个框架放在节的内容周围。使用beforesection
和aftersection
键,您可以在节的开始和结束处启动和停止框架,但您必须使用节命令的启动/停止版本才能使其工作。
与其他机制不同,background
环境textbackground
不会改变部分内容的位置,并且也适用于浮动和拆分表。
\definetextbackground
[SectionFrame]
[background=,
framecolor=red,
corner=round,
location=paragraph,
before={\blank[2*big]}]
\definehead[framedsection][section]
\setuphead
[framedsection]
[before=,
beforesection={\starttextbackground[SectionFrame]},
aftersection=\stoptextbackground]
\starttext
\startsection[title=Knuth]
\input knuth
\stopsection
\startframedsection[title=Tufte]
\input tufte
\stopframedsection
\stoptext
为了改善框架的布局,您可以创建自己的MetaPost
图形,在框架和内容之间添加距离。
\startuseMPgraphic{sectionframe}
begingroup;
for i=1 upto nofmultipars :
draw ( llcorner multipars[i]
-- lrcorner multipars[i]
-- urcorner multipars[i]
-- ulcorner multipars[i]
-- cycle )
enlarged (EmWidth,EmWidth)
cornered (2*EmWidth)
withcolor "red" ;
endfor ;
endgroup;
\stopuseMPgraphic
\definetextbackground
[SectionFrame]
[mp=sectionframe,
location=paragraph,
before={\blank[2*big]}]
答案2
使用background
机制。它可以跨页断点。
\unprotect
\definebackground
[_background_framed_section]
[
corner=round,
frame=on,
background=,
]
\define\startframedsection{\dodoubleempty\start_framed_section}
\define\stopframedsection{\stop_framed_section}
\starttexdefinition unexpanded start_framed_section [#1][#2]
\start_background_framed_section
\doifsomethingelse{#2}{
\message{first branch}
\getvalue{start#1}[#2]
\setvalue{stop_framed_section_level}{#1}
}{
\message{second branch}
\startsection[#1]
\setvalue{stop_framed_section_level}{section}
}
\stoptexdefinition
\starttexdefinition unexpanded stop_framed_section
\getvalue{stop\getvalue{stop_framed_section_level}}
\stop_background_framed_section
\stoptexdefinition
\protect
\starttext
\startframedsection[title=Knuth]
\dorecurse{10}{
\input knuth
}
\stopframedsection
\stoptext