¿Cómo puedo marcar y etiquetar ciertas regiones en el margen con ConTeXt?
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
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