Come posso contrassegnare ed etichettare determinate regioni a margine con ConTeXt?
Scrivo un documento che discute le differenze sintattiche tra due linguaggi (diciamo, TeX e Markdown). Passando attraverso vari argomenti, il testo parla un po 'di tempo di una lingua e poi dell'altra lingua.
Quello che voglio fare è mettere dei segni a margine per mostrare quali regioni discutono di TeX e quali discutono di Markdown. Per esempio:
Here are some paragraphs \
discussing features | TeX
|
of TeX. /
And the text starting here \
| Markdown
discusses Markdown /
Dato che ho alcune coppie di regioni come questa, vorrei generarle con l'ambiente, in questo modo:
\starttexdiscussion
Here are some paragraphs discussing features
of TeX.
\stoptexdiscussion
\startmarkdowndiscussion
And the text starting here
discusses Markdown
\stopmarkdowndiscussion
È possibile definire ambienti che lo facciano per me? Come dovrei regolare la posizione e la lunghezza del contenuto del margine per abbinare il contenuto principale? Come posso gestire le interruzioni di pagina?
Risposte
Ecco una soluzione basata sui commenti di Henri Menke che fa esattamente ciò che viene descritto, inclusa la divisione delle parentesi graffe quando si incontrano interruzioni di pagina.
\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