ConTeXt ile marjdaki belirli bölgeleri nasıl işaretleyebilir ve etiketleyebilirim?

Aug 17 2020

İki dil arasındaki sözdizimsel farklılıkları tartışan bir belge yazıyorum (diyelim, TeX ve Markdown). Çeşitli konuları ele alan metin, bir dilden bir süre sonra diğer dilden bahseder.

Yapmak istediğim, hangi bölgelerde TeX'in ve Markdown'un tartışıldığını göstermek için kenar boşluğuna işaretler koymak. Örneğin:

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

And the text starting here \
                           | Markdown
discusses Markdown         /

Bunun gibi epey bölge çiftine sahip olduğum için, onları şu şekilde çevre ile oluşturmak istiyorum:

\starttexdiscussion
Here are some paragraphs discussing features

of TeX.
\stoptexdiscussion

\startmarkdowndiscussion
And the text starting here

discusses Markdown
\stopmarkdowndiscussion

Benim için bunu yapan ortamları tanımlamak mümkün mü? Kenar boşluğu içeriğinin konumunu ve uzunluğunu ana içerikle eşleşecek şekilde nasıl ayarlayabilirim? Sayfa sonlarını nasıl idare edebilirim?

Yanıtlar

1 flyx Aug 19 2020 at 12:27

İşte, Henri Menke'nin, tam olarak anlatılanı yapan yorumlarına dayanan bir çözüm, sayfa kesilmesiyle karşılaşıldığında parantezleri ayırmak da dahil.

\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