ConTeXt中如何实现tcolorbox宏包的效果?

ConTeXt中如何实现tcolorbox宏包的效果?

我对 ConTeXt 完全陌生,刚刚开始尝试直接在 ConTeXt 中编写 metapost。在 Latex 中,我们使用 tcolorbox 宏包来实现左侧代码右侧输出的效果,我的问题是,如何在 ConTeXt 中实现类似的效果? 在此处输入图片描述

答案1

下面我提供一些入门知识。在 ConTeXt 中使用缓冲区非常方便,因此我建议使用一个只与当前缓冲区一起使用的宏。因此,在下面的示例中,您定义一个缓冲区,然后调用MPCodeFig。该宏由一个使用 MetaFun(这非常元!)图形作为背景的外框组成MyBackground,然后我最终得到了一个自然的内容表。还有其他方法,也许还有其他更流畅的方法。

一些评论:

  • 在上下文中您不需要beginfigand endfig
  • 不需要btexetex,只需写"$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

代码和图

相关内容