¿Cómo puedo marcar y etiquetar ciertas regiones en el margen con ConTeXt?

Aug 17 2020

Escribo un documento que analiza las diferencias sintácticas entre dos idiomas (digamos, TeX y Markdown). Pasando por varios temas, el texto habla en algún momento de un idioma y luego del otro idioma.

Lo que quiero hacer es colocar marcas en el margen para mostrar qué regiones discuten sobre TeX y cuáles discuten sobre Markdown. Por ejemplo:

Here are some paragraphs   \
discussing features        | TeX
                           |
of TeX.                    /

And the text starting here \
                           | Markdown
discusses Markdown         /

Como tengo bastantes pares de regiones como este, me gustaría generarlos con el entorno, así:

\starttexdiscussion
Here are some paragraphs discussing features

of TeX.
\stoptexdiscussion

\startmarkdowndiscussion
And the text starting here

discusses Markdown
\stopmarkdowndiscussion

¿Es posible definir entornos que hagan eso por mí? ¿Cómo ajustaría la posición y la longitud del contenido del margen para que coincida con el contenido principal? ¿Cómo puedo manejar los saltos de página?

Respuestas

1 flyx Aug 19 2020 at 12:27

Aquí hay una solución basada en los comentarios de Henri Menke que hace exactamente lo que se describe, incluida la división de las llaves cuando se encuentran saltos de página.

\def\definebraceddiscussion#1[#2]#3[#4]{
  \startuseMPgraphic{#2frame}
    begingroup;
        numeric n ;
        pair lr, ur ;
        picture p ;
        for i=1 upto nofmultipars :
            lr := lrcorner multipars[i] ;
            ur := urcorner multipars[i] ;
            n := arclength(lr -- ur) / 2 ;
            p := textext.rt("$\left.\vrule height " & decimal n & "bp width 0pt depth 0pt\right\}$") ;
            draw p shifted (.5[lr,ur] + (EmWidth,0));
            label.rt("#4", .5[lr,ur] shifted (.75cm, 0)) ;
        endfor ;
    endgroup;
  \stopuseMPgraphic
  \definetextbackground[#2Frame]
    [mp=#2frame, location=paragraph]
  \definestartstop[#2discussion]
    [before={\starttextbackground[#2Frame]},
     after={\stoptextbackground[#2Frame]}]
}

\definebraceddiscussion[tex][TeX]
\definebraceddiscussion[markdown][Markdown]

\starttext

\starttexdiscussion

  \input knuth

  \input tufte

\stoptexdiscussion

\startmarkdowndiscussion

  \input ward

  \input zapf

\stopmarkdowndiscussion

\stoptext