Thomas Fehige
6. Juni 2016 um 10:11
I'm trying to put a piece of text in a partial frame that's meant to look like square brackets aligned with the left and right edges of the textblock.

I tried to use two \framed constructions inside each other, the outer one with width=textwidth and negative toffset and boffset, the inner one with a smaller width, a fat rulethickness and the color of the background, expecting it to erase the outer frame where it's not needed:

\color[zier]{%

\framed[%

align=middle,

width=\textwidth,

                        toffset=-4mm,

boffset=-4mm,

strut=no,

]{%

\color[paper]{\framed[%

align=middle,

width=222mm, % i.e. \textwidth-4mm

                                toffset=6mm,

boffset=5mm,

rulethickness=5mm

]{%

\color[zier]{\tfd \strut Here's the text that is menat to look important; its length/number of lines is undetermined.\strut}

}}%

}%

}%

... but it doesn't work. Apparently the inner frame is drawn before the outer one. Putting the wider frame inside the narrower results in alignment problems --  due to the overfull hbox, I presume.
Your example is of not much use because it can’t be converted to a PDF (missing \starttext and empty lines).
Is  there a simple solution in ConTeXt that I haven't found yet, or will I have to try some plain TeX box magic myself?
You can use MetaPost to draw the frame/lines for the left and right borders.

\startuseMPgraphic{leftbracket}
    z[0] = (EmWidth,OverlayHeight) ;
    z[1] = (0,OverlayHeight) ;
    z[2] = (0,0) ;
    z[3] = (EmWidth,0) ;
    draw z[0]--z[1]--z[2]--z[3] withcolor \MPcolor{\overlaylinecolor} ;
\stopuseMPgraphic

\startuseMPgraphic{rightbracket}
    z[0] = (-EmWidth,OverlayHeight) ;
    z[1] = (0,OverlayHeight) ;
    z[2] = (0,0) ;
    z[3] = (-EmWidth,0) ;
    draw z[0]--z[1]--z[2]--z[3] withcolor \MPcolor{\overlaylinecolor} ;
\stopuseMPgraphic

\installleftframerenderer {bracket}{\useMPgraphic {leftbracket}}
\installrightframerenderer{bracket}{\useMPgraphic{rightbracket}}

\defineframed
  [bracketframed]
  [frame=off,
   offset=1ex,
   leftframe=bracket,
   rightframe=bracket,
   framecolor=red,
   foregroundstyle=\ssx,
   foregroundcolor=darkgray,
   align=normal,
   width=max]

\starttext
\bracketframed{\input knuth }
\stoptext

Wolfgang