我正在尝试将 asymptote 包与 vimtex 一起使用,这是我第一次尝试。当我尝试编译时,该图根本没有出现在 pdf 中。这是我找到的一个用于测试的示例代码:
\usepackage[inline]{asymptote} % I've also tried without [inline] but I get the same results
...
\begin{asy}
settings.outformat = "pdf";
defaultpen(fontsize(10pt));
label("Hello world!");
\end{asy}
我收到的唯一警告是
Package asymptote Warning: file `***-1.pdf' not found on input line 30.
文件myfile-*.asy
确实出现在文件夹中。
我发现这个问题在 vimtex github 中,他们建议使用 latexmkrc 文件
sub asy {return system("asy \"$_[0]\"");}
add_cus_dep("asy","eps",0,"asy");
add_cus_dep("asy","pdf",0,"asy");
add_cus_dep("asy","tex",0,"asy");
我尝试将此文件放入我正在处理的文件夹中,但它会导致 vimtex 编译立即失败。
更新:
asy myfile-1.asy
在终端运行返回此错误:
no matching variable 'byteinv'
no matching variable '_schur'
为了解决这个问题,我手动更新到了 2.85,因为之前使用的 MiKTeX 2.81 版本无法正常工作。现在如果我asy myfile-1.asy
手动运行,它可以正常工作,但 vimtex 不会自动执行此操作。
答案1
问题是.asy
文件无法编译,因为显然 Asymptote 的 MiKTeX 发行版没有兼容的文件和可执行文件,正如指出的那样这里。相反,从下载并安装 Asymptote这里并将文件从C:\Program Files\Asymptote
(不确定您是否需要所有文件,但对我来说是可行的)复制到与不兼容版本相同的目录中(C:\Users\David\AppData\Local\Programs\MiKTeX\miktex\bin\x64
在我的情况下)(可能有另一种方法可以在不复制文件的情况下使用正确的可执行文件,但这超出了我的知识范围)。我认为您还需要重命名复制asy.exe
到的文件miktex-asy.exe
。
现在,您可以.asy
通过使用 Asymptote 程序或在终端中执行这些文件来编译它们asy myfile-*.asy
。
Vimtex 默认使用 latexmk。为了在myfile-*.asy
使用 vimtex 编译时自动编译文件,您需要.latexmkrc
在您正在处理的目录中添加一个文件,内容如下:
sub asy {return system("asy \"$_[0]\"");}
add_cus_dep("asy","eps",0,"asy");
add_cus_dep("asy","pdf",0,"asy");
add_cus_dep("asy","tex",0,"asy");