Como consertar esse título sofisticado no ConTeXT

Como consertar esse título sofisticado no ConTeXT

Não sei se é uma duplicata ou não, mas podemos fechá-la se for.

Tenho tentado aprender ConTeXt. Adoro especialmente as formatações de cabeçalho e número de página que vejo nas documentações que baixei, obtidas através do uso de Metapost/ Metafun. Eu tenho tentado conseguir esse efeito em \chapter(produzido em LaTeX através egregdo 'sgmppacote.

insira a descrição da imagem aqui

Para este fim copiei e colei códigos de vários arquivos encontrados emaqui. Esta é a saída que estou obtendo por enquanto.

insira a descrição da imagem aqui

com este código.

\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

Por favor, faça-me entender o que está acontecendo aqui e como conseguir o efeito desejado.

Responder1

Está faltando um bloco \unprotect.. \protecte um bloco \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

Mas este é um código ConTeXt realmente antigo. Aqui a comunicação entre TeX e Metapost é através de parâmetros macro. Eu usaria apenas parâmetros de valor-chave para a comunicação. Aqui está uma solução possível, onde uso dotcolotkey para especificar a cor do ponto.

\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}]

Agora a sobreposição randomcirclepode ser usada com qualquer comando que aceite uma sobreposição. Por exemplo, uma moldura e uma figura:

insira a descrição da imagem aqui

que foi obtido usando:

\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

Agora, obter o gráfico em torno do título da seção é simplesmente uma questão de definir a commandchave \setuphead.

informação relacionada