Как я могу отметить и пометить определенные области на полях с помощью ConTeXt?
Я пишу документ, в котором обсуждаются синтаксические различия между двумя языками (скажем, TeX и Markdown). Рассматривая различные темы, в тексте сначала говорится об одном языке, а затем о другом.
Я хочу поставить отметки на полях, чтобы показать, какие регионы обсуждают TeX, а какие - Markdown. Например:
Here are some paragraphs \
discussing features | TeX
|
of TeX. /
And the text starting here \
| Markdown
discusses Markdown /
Поскольку у меня довольно много таких пар регионов, я хотел бы сгенерировать их с помощью окружения, например:
\starttexdiscussion
Here are some paragraphs discussing features
of TeX.
\stoptexdiscussion
\startmarkdowndiscussion
And the text starting here
discusses Markdown
\stopmarkdowndiscussion
Можно ли определить среду, которая сделает это за меня? Как мне настроить положение и длину поля для соответствия основному контенту? Как мне справиться с разрывами страниц?
Ответы
Вот решение, основанное на комментариях Генри Менке, которое делает именно то, что описано, включая разделение фигурных скобок при обнаружении разрывов страниц.
\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