![使用标签(图形(…),…)在插入的图形上绘制](https://linux22.com/image/320569/%E4%BD%BF%E7%94%A8%E6%A0%87%E7%AD%BE%EF%BC%88%E5%9B%BE%E5%BD%A2%EF%BC%88%E2%80%A6%EF%BC%89%EF%BC%8C%E2%80%A6%EF%BC%89%E5%9C%A8%E6%8F%92%E5%85%A5%E7%9A%84%E5%9B%BE%E5%BD%A2%E4%B8%8A%E7%BB%98%E5%88%B6.png)
我想使用 Asymptote 来合成现有的 EPS 文件并在其上绘制一些内容。我使用建议方法使用label()
并将graphic()
EPS 文件放置在画布上。问题是,导入的图形被视为标签,位于之后完成的所有绘图之上。
假设我有一个使用以下 Asymptote 文件生成的 EPS 文件foo.asy
(在我的例子中,EPS 实际上包含一个光栅图像,所以我不能仅仅在最终的 Asymptote 文件中包含创建 EPS 的命令):
fill(circle((0, 0), 10), blue + white);
现在我从以下 Asymptote 文件中引入 EPS 文件bar.asy
:
label(graphic("foo.eps"), (0, 0));
draw((-10, -10) -- (10, 10), black + 2);
这会导致蓝色圆圈绘制在黑线上方。
有没有办法以某种方式在标签上绘图,或者是否有其他方法来包含 EPS 文件而不使用label()
?
答案1
这里可以找到一个使用 Asymptote 在文件图像上绘图的示例:
https://tex.stackexchange.com/a/129801/484
你缺少的关键步骤是包括以下行
layer();
在添加图像之后,但在绘制任何应放置在其上的内容之前。
解释(对于一般读者来说——原帖作者似乎理解这一点):在 Asymptote(不包括 3d 内容)中,默认情况下,标签始终位于“绘图”元素之上,因此标签不会被隐藏。由于图像是作为一种标签导入的,因此只有其他标签会位于其上方;绘图元素将位于其下方,并且它们本身将被隐藏。
但是,该layer()
命令改变了默认设置:layer()
命令之后的任何内容都会位于其之前的所有内容之上,从而允许绘制的元素位于标签之上。