Como posso marcar e rotular certas regiões na margem com ConTeXt?
Eu escrevo um documento que discute as diferenças sintáticas entre duas linguagens (digamos, TeX e Markdown). Percorrendo vários tópicos, o texto fala um pouco sobre um idioma e depois sobre o outro.
O que eu quero fazer é colocar marcas na margem para mostrar quais regiões discutem TeX e quais discutem Markdown. Por exemplo:
Here are some paragraphs \
discussing features | TeX
|
of TeX. /
And the text starting here \
| Markdown
discusses Markdown /
Como tenho alguns pares de regiões como este, gostaria de gerá-los com o ambiente, assim:
\starttexdiscussion
Here are some paragraphs discussing features
of TeX.
\stoptexdiscussion
\startmarkdowndiscussion
And the text starting here
discusses Markdown
\stopmarkdowndiscussion
É possível definir ambientes que fazem isso para mim? Como ajustaria a posição e o comprimento do conteúdo da margem para corresponder ao conteúdo principal? Como posso lidar com quebras de página?
Respostas
Aqui está uma solução baseada nos comentários de Henri Menke que faz exatamente o que é descrito, incluindo dividir as chaves quando são encontradas quebras 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