ConTeXt 和 Metafun:在覆盖层内使用环境变量

ConTeXt 和 Metafun:在覆盖层内使用环境变量

我想framed使用 Metafun 为环境绘制自定义框架。我目前正在 Metafun 定义中对框架颜色进行硬编码。但是,我希望 Metafun 框架能够引用环境framecolor的选项framed并相应地更改颜色。这是我目前使用硬编码颜色选项所得到的结果:

\startuniqueMPgraphic{box}
path p;
p := unitcircle xscaled \overlaywidth yscaled \overlayheight;

fill p withcolor .85white;
draw p withpen pencircle scaled 2pt withcolor .625red;
\stopuniqueMPgraphic

\defineoverlay[box][\uniqueMPgraphic{box}]

\starttext

\framed[framecolor=blue, background=box]{test}

\stoptext

Metafun 定义是否可以访问framed选项或者是否有其他方法可以做到这一点?

答案1

您可以使用\framedparameter{framecolor}来访问该参数。如果未设置 framecolor,则会导致错误。您可以使用\MPcolorwith\framedparameter来修复该问题。示例:

\startuniqueMPgraphic{box}
  path p;
  p := unitcircle xscaled \overlaywidth yscaled \overlayheight;

  fill p withcolor .85white;
  draw p withpen pencircle scaled 2pt withcolor \MPcolor{\framedparameter{framecolor}};
\stopuniqueMPgraphic

\defineoverlay
  [box]
  [\uniqueMPgraphic{box}]

\starttext
  \framed[framecolor=blue, background=box]{test}
  \framed[background=box]{foobar}
\stoptext

result

相关内容