我写了一篇文档,讨论两种语言(比如 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
这是基于 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