将 Asymptote 命令包含到文件中

将 Asymptote 命令包含到文件中

我有几个命令想要用于不同的图表。例如,我定义了一个直角三维角:

path3 RightAngle(real radius, triple A, triple B, triple C)
{
return B+radius*unit(A-B)--B+radius*(unit(A-B)+unit(C-B))--B+radius*unit(C-B);
} 

现在我可以在同一文件中写入

draw(RightAngle(0.3,A,H1,C));

这有效。很好。但现在我想在另一个图表中绘制一个直角。我是否必须每次都将第一个代码复制到新的 asy 图中,或者有没有办法将所有这样的命令放入文件 MyAsyCommands.asy(或 MyAsyCommands.tex,或 MyAsyCommands.Idontknowwhat)中,然后像

input MyAsyCommands;

这里他们建议:

您可以通过简单地创建一个新的 .asy 文件(例如 MyMacros.asy)来创建自己的包,其中包含您自己的定义,并将其保存在 Asymptote 安装的目录中(默认情况下为 C:\Program Files\Asymptote)。然后在您的文档中导入 MyMacros;,您就设置好了!

我正在使用 ubuntu,但不知道 asymptote 在哪里。是的,我知道,我感到很惭愧,但难道不应该更简单吗?我尝试将文件 MyAsyCommands.asy 放入包含 asy-picture 的文件所在的文件夹中。(test.tex 带有 \begin{asy}\end{asy})。它没有起作用。也就是说,这个有效:

\documentclass{article}
\usepackage{asymptote}
\begin{document}
\begin{asy}
settings.outformat = "pdf";
settings.render = 0;
import three;
//import MyAsyCommands;
size(7cm, 0);
currentprojection=orthographic((5,2,3));
triple A=(0,0,1);
triple B=(0,1,0);
triple C=(1,0,0);
draw (A--B--C);
dot(Label("$A$",align=N),A);
dot(Label("$B$",align=E),B);
dot(Label("$C$",align=W),C);
//draw(RightAngle(0.3,A,B,C));
\end{asy}
\end{document}

但是当我删除注释并输入文件 MyAsyCommands.asy 时:

path3 RightAngle(real radius, triple A, triple B, triple C)
{
return B+radius*unit(A-B)--B+radius*(unit(A-B)+unit(C-B))--B+radius*unit(C-B);
}

不是。可能 MyAsyCommands.asy 应该以某种方式特别设计(您知道,当我们在 LaTeX 中执行相同操作时,我们使用 \RequirePackage 而不是 \usepackage)或类似的东西。

在此处输入图片描述

我做错了什么?

答案1

这个答案包含未经测试的代码片段。我只是遵循 Asymptote 文档import

asy环境中,你可以尝试

import "./MyAsyCommands.asy" as MyAsyCommands;

省略./也可能有效。或者,.asy如果您不想依赖当前目录,您可以指定文件的绝对路径。

对于您来说,以下低级命令可能也能起到同样的作用:

include "./MyAsyCommands.asy";

您也可以在那里调整路径。

相关内容