我使用 asymptote 包 ( \usepackage{asymptote}
) 和环境绘制了一幅图\begin{asy}...\end{asy}
。我想在环境中重复使用代码,{asy}
而不必复制粘贴。
- 是否可以保存
{asy}
块内的绘图结果以将其插入同一文档中的不同位置? - 是否可以保存代码块(即子图片)以便在其他地方重新使用它们?
例如,我可能会画一个绿色圆盘,在其他地方画一个红色圆盘。在文档的不同位置,我可能想插入其他完全相同的绿色和红色圆盘,而无需复制粘贴代码。在某些时候,我甚至可能想插入一张包含绿色和红色圆盘的图片,以某种方式组合/叠加以形成一张图片。
多谢!
编辑:以(希望)更清晰的方式重写描述。
答案1
这里尝试使用asypictureB
包(Asymptote 的替代接口)来回答这两个问题。它利用了这样一个事实:在使用时,asypictureB
您可以命名 Asymptote 图片,并使用该名称来调用生成的图形。请注意,这\jobname
实际上是主文件的名称tex
;例如,如果此文件名为foo.tex
,\jobname
则将扩展为foo
。
对于第二个问题,我利用了include
Asymptote 中的命令,它直接包含来自指定 Asymptote 文件的代码。还要注意,在环境中asypicture
,@jobname
行为就像\jobname
在环境之外一样(在软件包文档)。
\documentclass{article}
\usepackage{asypictureB}
\begin{document}
A red disk:
\begin{center}
\begin{asypicture}{name=red_disk}
size(3cm);
fill(unitcircle, red);
\end{asypicture}
\end{center}
%
A green disk:
\begin{center}
\begin{asypicture}{name=green_disk}
size(4cm);
fill(unitcircle, green);
\end{asypicture}
\end{center}
%
A red disk and a green disk:
\begin{center}
\includegraphics{\jobname-red_disk}
\hspace{1cm}
\includegraphics{\jobname-green_disk}
\end{center}
%
A red disk and a green disk in the same \verb!asypicture!:
\begin{center}
\begin{asypicture}{name=overlay}
// Execute all the code from the red_disk asypicture.
include "@jobname-red_disk";
// Save the resulting picture and start a new one.
picture reddisk = currentpicture;
currentpicture = new picture;
// Execute all the code from the green_disk asypicture.
include "@jobname-green_disk";
// Save the resulting picture and start a new one.
// Note that the scale information from the previous
// pictures is lost. If you want to retain it, look into
// using frames instead of pictures.
picture greendisk = currentpicture;
currentpicture = new picture;
unitsize(1cm);
add(shift(-0.3,0)*greendisk);
add(shift(0.3,0)*reddisk);
\end{asypicture}
\end{center}
\end{document}
结果: