![我是否应该改变 MetaObj 或者有更好的方法?](https://linux22.com/image/233711/%E6%88%91%E6%98%AF%E5%90%A6%E5%BA%94%E8%AF%A5%E6%94%B9%E5%8F%98%20MetaObj%20%E6%88%96%E8%80%85%E6%9C%89%E6%9B%B4%E5%A5%BD%E7%9A%84%E6%96%B9%E6%B3%95%EF%BC%9F.png)
我想使用 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
在那里。
(抱歉回复晚了)