Bagaimana cara menandai dan melabeli wilayah tertentu di margin dengan ConTeXt?

Aug 17 2020

Saya menulis dokumen yang membahas perbedaan sintaksis antara dua bahasa (katakanlah, TeX dan Markdown). Dengan membahas berbagai topik, beberapa saat teks berbicara tentang satu bahasa dan kemudian tentang bahasa lain.

Yang ingin saya lakukan adalah memberi tanda di margin untuk menunjukkan wilayah mana yang membahas TeX dan mana yang membahas penurunan harga. Sebagai contoh:

Here are some paragraphs   \
discussing features        | TeX
                           |
of TeX.                    /

And the text starting here \
                           | Markdown
discusses Markdown         /

Karena saya memiliki beberapa pasangan wilayah seperti ini, saya ingin membuatnya dengan lingkungan, seperti:

\starttexdiscussion
Here are some paragraphs discussing features

of TeX.
\stoptexdiscussion

\startmarkdowndiscussion
And the text starting here

discusses Markdown
\stopmarkdowndiscussion

Apakah mungkin untuk menentukan lingkungan yang melakukan itu untuk saya? Bagaimana cara menyesuaikan posisi dan panjang konten margin agar sesuai dengan konten utama? Bagaimana cara menangani jeda halaman?

Jawaban

1 flyx Aug 19 2020 at 12:27

Berikut adalah solusi berdasarkan komentar Henri Menke yang melakukan persis seperti yang dijelaskan, termasuk memisahkan kawat gigi saat jeda halaman ditemukan.

\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