答案1
下面我提供一些入门知识。在 ConTeXt 中使用缓冲区非常方便,因此我建议使用一个只与当前缓冲区一起使用的宏。因此,在下面的示例中,您定义一个缓冲区,然后调用MPCodeFig
。该宏由一个使用 MetaFun(这非常元!)图形作为背景的外框组成MyBackground
,然后我最终得到了一个自然的内容表。还有其他方法,也许还有其他更流畅的方法。
一些评论:
- 在上下文中您不需要
beginfig
andendfig
。 - 不需要
btex
和etex
,只需写"$4$"
等等。 - 我不知道你想要盒子里面的间距是多少,所以你可能想玩一下。
- 就我个人而言,我更喜欢没有框架并且带有圆角的版本。
\startuseMPgraphic{MyBackground}
path p, q ;
p := unitsquare xyscaled (OverlayWidth,OverlayHeight) ;
fill p withcolor "gray" ;
p := p enlarged (-1dk,-1dk) ;
p := p cornered 1dk ;
q := (p cutafter point 1.5 of p) -- (p cutbefore point 5.5 of p) -- cycle ;
fill q withcolor "lightgray" ;
draw p ;
\stopuseMPgraphic
\defineoverlay[MyBackground][\useMPgraphic{MyBackground}]
\starttexdefinition MPCodeFig
\starttextdisplay
\startframed
[width=\textwidth,
offset=2dk,
frame=no,
background=MyBackground,
foregroundstyle=small]
\setupTABLE[frame=no,offset=overlay]
\setupTABLE[c][width=\dimexpr0.5\textwidth-2dk-\linewidth\relax]
\setupTABLE[c][1][align=top]
\setupTABLE[c][2][align=lohi,loffset=1dk]
\bTABLE
\bTR
\bTD \typebuffer \eTD
\bTD \processMPbuffer \eTD
\eTR
\eTABLE
\stopframed
\stoptextdisplay
\stoptexdefinition
\starttext
\samplefile{ward}
\startbuffer
z0 = origin ;
z1 = (4cm,0) ;
z2 = (4cm,3cm) ;
draw z0 -- z1 -- z2 --cycle ;
label.bot("$4$", 1/2[z0,z1]) ;
label.rt ("$3$", 1/2[z1,z2]) ;
label.top("$5$", 1/2[z2,z0]) ;
\stopbuffer
\MPCodeFig
\samplefile{ward}
\stoptext