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

다음은 페이지 나누기가 발생할 때 중괄호를 분할하는 것을 포함하여 설명 된대로 정확하게 수행하는 Henri Menke의 주석을 기반으로 한 솔루션입니다.

\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