So beheben Sie diese ausgefallene Überschrift in ConTeXT

So beheben Sie diese ausgefallene Überschrift in ConTeXT

Ich weiß nicht, ob es sich hierbei um ein Duplikat handelt oder nicht, aber wenn ja, können wir es schließen.

Ich habe versucht, zu lernen ConTeXt. Ich liebe besonders die Formatierungen für Überschriften und Seitenzahlen, die ich in den von mir heruntergeladenen Dokumentationen sehe, die durch die Verwendung von Metapost/ erreicht werden Metafun. Ich habe versucht, diesen Effekt in \chapter(erstellt in LaTeX durch egreg'sgmpPaket.

Bildbeschreibung hier eingeben

Zu diesem Zweck habe ich Codes aus mehreren Dateien kopiert und eingefügt, die ich gefunden habe vonHier. Dies ist die Ausgabe, die ich derzeit erhalte.

Bildbeschreibung hier eingeben

mit diesem Code.

\setuppapersize[A4][A4]
\setuplayout[topspace=0.5in, backspace=1in, header=24pt, footer=36pt,
  height=middle, width=middle]

\def\MPclipOne#1#2#3#4#5%
  {\startuseMPgraphic{clip:one}
     w := #1;  width  := 100;  wfactor := w/width;
     h := #2;  height := 100;  hfactor := h/height;
     %
     color lightred;  lightred  := (.90,.50,.50);
     color lightgray; lightgray := (.95,.95,.95);
     color gray;      gray      := (.50,.50,.50);
     %
     def random_delta (expr d) =
       d-(uniformdeviate 2d)
     enddef;
     %
     z1 = (0,height);
     z2 = (0,0);
     z3 = (width,0);
     z4 = (width,height);
     %
     z5 = (width+random_delta(.2width),height+random_delta(.2height));
     z6 = (.5width+random_delta(.1width),height+random_delta(.1height));
     %
     pickup pencircle
       xscaled (#3/wfactor)
       yscaled (#3/(2*hfactor))
       rotated 30;
     %
     draw z5..z1..z2..z3..z4..z6 withcolor #4;
     %
     pickup pencircle
       xscaled (#3/wfactor)
       yscaled (#3/hfactor);
     %
     draw z1 withcolor #5;
     draw z2 withcolor #5;
     draw z3 withcolor #5;
     draw z4 withcolor #5;
     draw z5 withcolor #5;
     draw z6 withcolor #5;
     %
     newwidth  := (xpart (urcorner currentpicture)) -
                  (xpart (llcorner currentpicture));
     newheight := (ypart (urcorner currentpicture)) -
                  (ypart (llcorner currentpicture));
     %
     currentpicture := currentpicture
      xscaled (w/newwidth) yscaled (h/newheight);
   \stopuseMPgraphic
   \useMPgraphic{clip:one}{}}

\defineoverlay
  [KopAchtergrond]
  [\MPclipOne{\overlaywidth}{\overlayheight}{10pt}{gray}{red}]

\def\HeadCommand#1#2%
  {\alignedline{\v!outer}{\v!left}
     {\framed
        [\c!background=KopAchtergrond,
         \c!width=\v!fit,
         \c!height=\v!fit,
         \c!frame=\v!off,
         \c!strut=\v!no,
         \c!offset=24pt,
         \c!align=\v!middle]
        {\doifmode{*sectionnumber}
           {#1\kern.5em% strut niet geset, zou wel moeten
            \hbox{\color[headrule]{\vrule\!!width1pt\!!height1.5\ht\strutbox\!!depth1.25\dp\strutbox}}%
            \kern.5em}%
         #2}}}

\setuphead
  [\v!chapter]
  [\c!command=\HeadCommand,
   \v!appendix\c!label=none,
   \c!page=,
   \c!before=\vskip36pt plus 6pt minus 6pt,
   \c!after=\vskip24pt]

\starttext

\chapter{Sample chapter}

\stoptext

Erklären Sie mir bitte, was hier passiert und wie ich den gewünschten Effekt erziele.

Antwort1

Ihnen fehlt ein \unprotect..- \protectBlock und ein \unexpanded.

\setuppapersize[A4][A4]
\setuplayout[topspace=0.5in, backspace=1in, header=24pt, footer=36pt,
  height=middle, width=middle]

\unprotect
\def\MPclipOne#1#2#3#4#5%
  {\startuseMPgraphic{clip:one}
     w := #1;  width  := 100;  wfactor := w/width;
     h := #2;  height := 100;  hfactor := h/height;
     %
     color lightred;  lightred  := (.90,.50,.50);
     color lightgray; lightgray := (.95,.95,.95);
     color gray;      gray      := (.50,.50,.50);
     %
     def random_delta (expr d) =
       d-(uniformdeviate 2d)
     enddef;
     %
     z1 = (0,height);
     z2 = (0,0);
     z3 = (width,0);
     z4 = (width,height);
     %
     z5 = (width+random_delta(.2width),height+random_delta(.2height));
     z6 = (.5width+random_delta(.1width),height+random_delta(.1height));
     %
     pickup pencircle
       xscaled (#3/wfactor)
       yscaled (#3/(2*hfactor))
       rotated 30;
     %
     draw z5..z1..z2..z3..z4..z6 withcolor #4;
     %
     pickup pencircle
       xscaled (#3/wfactor)
       yscaled (#3/hfactor);
     %
     draw z1 withcolor #5;
     draw z2 withcolor #5;
     draw z3 withcolor #5;
     draw z4 withcolor #5;
     draw z5 withcolor #5;
     draw z6 withcolor #5;
     %
     newwidth  := (xpart (urcorner currentpicture)) -
                  (xpart (llcorner currentpicture));
     newheight := (ypart (urcorner currentpicture)) -
                  (ypart (llcorner currentpicture));
     %
     currentpicture := currentpicture
      xscaled (w/newwidth) yscaled (h/newheight);
   \stopuseMPgraphic
   \useMPgraphic{clip:one}{}}

\defineoverlay
  [KopAchtergrond]
  [\MPclipOne{\overlaywidth}{\overlayheight}{10pt}{gray}{red}]

\unexpanded\def\HeadCommand#1#2%
  {\alignedline{\v!outer}{\v!left}
     {\framed
        [\c!background=KopAchtergrond,
         \c!width=\v!fit,
         \c!height=\v!fit,
         \c!frame=\v!off,
         \c!strut=\v!no,
         \c!offset=24pt,
         \c!align=\v!middle]
        {\doifmode{*sectionnumber}
           {#1\kern.5em% strut niet geset, zou wel moeten
            \hbox{\color[headrule]{\vrule\!!width1pt\!!height1.5\ht\strutbox\!!depth1.25\dp\strutbox}}%
            \kern.5em}%
         #2}}}

\setuphead
  [\v!chapter]
  [\c!command=\HeadCommand,
   \v!appendix\c!label=none,
   \c!page=,
   \c!before=\vskip36pt plus 6pt minus 6pt,
   \c!after=\vskip24pt]
\protect

\starttext

\chapter{Sample chapter}

\stoptext

Aber das ist wirklich alter ConTeXt-Code. Hier erfolgt die Kommunikation zwischen TeX und Metapost über Makroparameter. Ich würde für die Kommunikation einfach Schlüssel-Wert-Parameter verwenden. Hier ist eine mögliche Lösung, bei der ich den dotcolotSchlüssel verwende, um die Farbe des Punkts anzugeben.

\setupexternalfigures[location={local,global}]

\startuseMPgraphic{randomcircle}
   width  := 100;  wfactor := OverlayWidth/width;
   height := 100;  hfactor := OverlayHeight/height;
   %
   color dotcolor; dotcolor := \MPcolor{\framedparameter{dotcolor}};

   def random_delta (expr d) =
     d-(uniformdeviate 2d)
   enddef;
   %
   z1 = (0,height);
   z2 = (0,0);
   z3 = (width,0);
   z4 = (width,height);
   %
   z5 = (width, height)    randomized (0.2width, 0.2height);
   z6 = (0.5width, height) randomized (0.1width, 0.1height);
   %
   pickup pencircle
     xscaled (OverlayLineWidth/wfactor)
     yscaled (OverlayLineWidth/(2*hfactor))
     rotated 30;
   %
   draw z5..z1..z2..z3..z4..z6 withcolor OverlayLineColor;
   %
   pickup pencircle
     xscaled (OverlayLineWidth/wfactor)
     yscaled (OverlayLineWidth/hfactor);
   %

   draw z1 withcolor dotcolor;
   draw z2 withcolor dotcolor;
   draw z3 withcolor dotcolor;
   draw z4 withcolor dotcolor;
   draw z5 withcolor dotcolor;
   draw z6 withcolor dotcolor;
   %
   newwidth  := (xpart (urcorner currentpicture)) -
                (xpart (llcorner currentpicture));
   newheight := (ypart (urcorner currentpicture)) -
                (ypart (llcorner currentpicture));
   %
   currentpicture := currentpicture
    xscaled (OverlayWidth/newwidth) yscaled (OverlayHeight/newheight);
\stopuseMPgraphic

\defineoverlay
  [randomcircle]
  [\useMPgraphic{randomcircle}]

Jetzt kann das Overlay randomcirclemit jedem Befehl verwendet werden, der ein Overlay akzeptiert. Zum Beispiel ein Rahmen und eine Figur:

Bildbeschreibung hier eingeben

welches erhalten wurde mit:

\definecolor[gray][r=0.5, g=0.5, b=0.5]


\starttext

\startTEXpage[offset=10mm]

  \dontleavehmode
  \framed[background=randomcircle, dotcolor=red, framecolor=gray, offset=24pt, rulethickness=10pt, frame=off]
         { Hello World}
  \hskip 6em 
  \externalfigure[cow.pdf]
                 [width=3cm, 
                  background=randomcircle, dotcolor=red, framecolor=gray,
                  backgroundoffset=24pt, rulethickness=10pt, frame=off]

\stopTEXpage

\stoptext

Um die Grafik um die Abschnittsüberschrift herum anzuordnen, müssen Sie lediglich den commandSchlüssel von festlegen \setuphead.

verwandte Informationen