在 ConTeXt 中构建整个部分

在 ConTeXt 中构建整个部分

我正在尝试改进工作表中的概览,现在我正尝试框出整个部分,最好是带圆角,但找不到任何解决方案。有没有类似\framedsection上下文的内容?

答案1

您可以使用textbackground环境将一个框架放在节的内容周围。使用beforesectionaftersection键,您可以在节的开始和结束处启动和停止框架,但您必须使用节命令的启动/停止版本才能使其工作。

与其他机制不同,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

Adding a frame around the content of a section

为了改善框架的布局,您可以创建自己的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]}]

Custom design for the section frame

答案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

enter image description here

相关内容