Как я могу отметить и пометить определенные области на полях с помощью ConTeXt?

Aug 17 2020

Я пишу документ, в котором обсуждаются синтаксические различия между двумя языками (скажем, 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

Можно ли определить среду, которая сделает это за меня? Как мне настроить положение и длину поля для соответствия основному контенту? Как мне справиться с разрывами страниц?

Ответы

1 flyx Aug 19 2020 at 12:27

Вот решение, основанное на комментариях Генри Менке, которое делает именно то, что описано, включая разделение фигурных скобок при обнаружении разрывов страниц.

\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