
Ich versuche, mit ConTeXt ausgefallene Rahmen zu definieren, aber ich habe einige Schwierigkeiten. Da ich viele Beispiele dafür gefunden habe, habe ich hauptsächlich Metapost verwendet, aber da ich eher ein TiKz-Experte bin, verstehe ich nicht wirklich, was vor sich geht.
Zuerst habe ich versucht, eine Framedtext-Umgebung zu verwenden, aber diese verhält sich beim Einbetten einer Abbildung (was ich oft brauche) nicht richtig. Dies ist der Rahmen, wie ich ihn gerne hätte.
\usesymbols[mvs]
\definesymbol[info][{\symbol[martinvogel 2][Info]}]
\startuseMPgraphic{mp:axiomframe}
draw (OverlayWidth,OverlayHeight) -- (0,OverlayHeight) -- (0,0);
draw (0.5pt,0) -- (OverlayWidth,0) -- (OverlayWidth,OverlayHeight-
0.5pt) withpen pencircle scaled 1.2bp;
fill OverlayBox withcolor 0.95 white;
fill bbox textext.top("\tfd\symbol[info]") shifted
(0.5EmWidth,OverlayHeight-3ExHeight) withcolor white;
draw textext.top("\tfd\symbol[info]") shifted
(0.5EmWidth,OverlayHeight-3ExHeight) ;
setbounds currentpicture to OverlayBox ;
\stopuseMPgraphic
\defineoverlay[axiomframe][\useMPgraphic{mp:axiomframe}]
\defineframedtext[theoremFrame]
[frame=off,
rulethickness=1pt,
offset=5pt,
background=axiomframe,
width=fit,
location=middle]
\def\starttheorem{\dosingleempty\doStarttheorem}
\def\doStarttheorem[#1]{
\starttheoremFrame
\iffirstargument \hskip2em {\bfa #1} \\ \fi
}
\def\stoptheorem{\stoptheoremFrame}
\useexternalfigure[ctanlion]
[http://www.ctan.org/lion/ctan_lion_350x350.png][width=5cm]
\starttext
\starttheorem[Hello]
\placefigure[here,right,none]{}{\externalfigure[ctanlion]}
\input knuth
\stoptheorem
Dann habe ich es mit einem Texthintergrund versucht; ich habe die Overlay- und Framedtext-Definitionen mit geändert
\definetextbackground[theoremFrame]
[mp=mp:axiomframe,
leftoffset=2\bodyfontsize,rightoffset=.5\bodyfontsize,
topoffset=.5\bodyfontsize,bottomoffset=.5\bodyfontsize,
before={\testpage[3]\blank},
after={\blank[2*medium]},
width=local]
Dies löst das Float-Problem, führt aber zu folgendem Problem: Der Rahmen nimmt die gesamte Seite ein, anstatt nur den erforderlichen Platz, und ich konnte an den Rändern keinen Platz schaffen:
Schließlich habe ich versucht, den MP-Teil mithilfe eines Dokuments von Aditya zu ändern:
\startuseMPgraphic{mp:axiomframe}
path p;
for i = 1 upto nofmultipars :
p = (multipars[i] topenlarged 0pt bottomenlarged 0pt);
fill p withcolor 0.95white ;
draw p withcolor black withpen pencircle scaled
\MPvar{linewidth};
endfor;
fill bbox textext.top("\tfd\symbol[info]") shifted
(0.5EmWidth,OverlayHeight-3ExHeight) withcolor white;
draw textext.top("\tfd\symbol[info]") shifted
(0.5EmWidth,OverlayHeight-3ExHeight) ;
setbounds currentpicture to OverlayBox ;
\stopuseMPgraphic
Aber es verhält sich nicht gut und scheint keine variable Linienstärke zuzulassen (und ich konnte keine Dokumentation zum Multipars-Array finden ...)
Antwort1
Ich empfehle die Verwendung von textbackground
, da dies zu Seitenunterbrechungen führen kann. Daher habe ich Wolfgangs Lösung von angepasstGanze Abschnitte in ConTeXt einrahmen.
\usesymbols[mvs]
\definesymbol[info][{\symbol[martinvogel 2][Info]}]
\startuseMPgraphic{mp:axiomframe}
begingroup;
for i=1 upto nofmultipars :
% Draw the surrounding box
path p;
p := ( llcorner multipars[i]
-- lrcorner multipars[i]
-- urcorner multipars[i]
-- ulcorner multipars[i]
-- cycle )
enlarged (EmWidth,EmWidth) ;
fill p withcolor boxfillcolor ;
draw p withcolor boxlinecolor ;
draw (p cutbefore point 2 of p cutafter point 4 of p)
withpen pencircle scaled 2pt
withcolor boxlinecolor ;
% Draw the info symbol
picture pic;
pic := textext.ulft("\tfd\symbol[info]");
pic := pic shifted ulcorner multipars[i];
fill bbox pic withcolor white;
draw pic;
endfor ;
setbounds currentpicture to OverlayBox ;
endgroup;
\stopuseMPgraphic
\definetextbackground
[theoremFrame]
[mp=mp:axiomframe,
location=paragraph,
backgroundcolor=green,
framecolor=red,
before={\testpage[3]\blank},
after={\blank[2*medium]}]
\defineenumeration
[theorem]
[text=,
number=no,
title=yes,
titledistance=2em,
titleleft=,
titleright=,
before={\starttextbackground[theoremFrame]},
after={\stoptextbackground}]
\useexternalfigure[ctanlion]
[http://www.ctan.org/lion/ctan_lion_350x350.png][width=5cm]
\starttext
\starttheorem[title=Hello]
\placefigure[here,right,none]{}{\externalfigure[ctanlion]}
\input knuth
\stoptheorem
\input lorem
\starttheorem[title=Hello]
\placefigure[here,right,none]{}{\externalfigure[ctanlion]}
\input knuth
\stoptheorem
\stoptext