我是否应该改变 MetaObj 或者有更好的方法?

我是否应该改变 MetaObj 或者有更好的方法?

我想使用 MetaObj 来安排一些图表。我有一些漂亮的彩色 MetaPost 组件图,可用于我的图表。

我创建的图片对象如下:

input metaobj;

def picphone =
  begingroup;
    save pic;
    picture pic;
    pic := image(
      % lots of drawing commands generated by pstoedit
      drawoptions(); % <-- I added this
    );
    pic
  endgroup
enddef

beginfig(1);
begingroup;
  picture phone;
  phone := picphone scaled 0.1;
  newBox.alfa(phone);
  newBox.bravo(phone);

  %
  % equations for positioning
  %

  drawObj(alfa);
  drawObj(bravo);
endgroup;
endfig;

我本以为会看到漂亮的手机,但却看到了黑色的矩形。读了一点日志后,我意识到 MetaObj Box 对象内的图片是使用这个 vardef 绘制的:

vardef drawPicture@#(suffix p) text options=
  draw @#p transformed @#ctransform_ shifted @#p.off options
           withcolor OptionValue.@#("picturecolor");
enddef;

基本上变成了draw ... withcolor black

因此,我将 metaobj.mp(本地子目录中的副本)更改为如下形式:

vardef drawPicture@#(suffix p) text options=
  draw @#p transformed @#ctransform_ shifted @#p.off options
    if boolean OptionValue.@#("picturecolor") :
      ;
    else:
      withcolor OptionValue.@#("picturecolor");
    fi;
enddef;

我添加了这个:

setObjectDefaultOption("Box")("picturecolor")(false);

到我的文件。

有没有办法可以不修改 metaobj.mp 就做到这一点?我是否误用(滥用?)MetaObj?我应该使用其他东西来布置我的对象吗?

[附言:我对 MetaPost 的了解甚至比对 TeX 的了解还要多,所以请原谅我所犯下的任何愚蠢行为。]

答案1

最方便的方法是准备一个metaobj-x.mp包含

vardef drawPicture@#(suffix p) text options=
  draw @#p transformed @#ctransform_ shifted @#p.off options
    if boolean OptionValue.@#("picturecolor") :
      ;
    else:
      withcolor OptionValue.@#("picturecolor");
    fi;
enddef;

并使用以下命令启动 Metapost 文件

input metaobj;
input metaobj-x;

这样 的新定义drawPicture就会覆盖旧定义。 放在哪里metaobj-x? 这取决于许多因素。如果您只打算将修改后的定义用于一个项目,那么将文件保存在与项目的 Metapost 文件相同的目录中就可以了。如果您打算将其用于许多项目,那么“个人 TeX 树”是最好的地方;在 GNU/Linux 系统上,它是 的子目录~/texmf,对于 MacTeX 来说,它是~/Library/texmf(其中~代表主目录)。创建一个路径,例如

~/texmf/metapost/colin

并保存metaobj-x.mp在那里。

(抱歉回复晚了)

相关内容