如何以批处理模式运行 Asymptote,而不创建窗口?

如何以批处理模式运行 Asymptote,而不创建窗口?

我正在使用 asymptote 在 LaTeX 文档中生成大量图像。这些图像从 asymptote 转换为 PDF,如下所示:

pdflatex text.tex
asy text-*.asy
pdflatex text.tex

但是,asymptote 坚持要打开一个窗口(短暂闪烁后消失,没有任何内容)。因此,我无法使用 ssh 从远程计算机编译我的文档:

asy x.asy
freeglut (asy): failed to open display ''

有没有办法在某些不需要窗口系统(DISPLAY在 Unix 中没有定义)的模式下运行渐近线?

我已经尝试过-noView-nointeractiveView,但 Asymptote 仍会尝试打开一个窗口。

答案1

Asymptote 默认禁用离屏渲染。要启用此功能,请将-offscreen选项传递给asy

asy -offscreen text-*.asy

或者你可以创建一个config.asy 配置文件并包括以下内容:

import settings;
offscreen=true;

答案2

看起来事情已经发生了变化,第一个方法(-offscreen其他答案将被解释为即输出到名为或 的-o ffscreen文件。ffscreen.epsffscreen.pdf

第二种方法settings.offscreen根本不起作用。

一个选择是使用从源代码构建渐近线--enable-offscreen

不幸的是,对我来说,屏幕外的 OSMesa 存在一些未知问题 -https://github.com/vectorgraphics/asymptote/issues/392有详细信息。

因此,另一个选择是运行无头/虚拟 X 服务器。

  • 首先,运行Xvfb :1启动一个虚拟X服务器,监听服务器1上的连接。
  • 然后,告诉 Asymptote 使用哪个显示器:DISPLAY=:1 asy a.asy或者asy --glOptions="-display :1" a.asy两者都可以。

备注:(没有很好记录的)选项-glOptions将选项传递给glutInit()

注意Xvfb似乎不使用 GPU,因此渲染速度可能较慢。您也可以看看https://superuser.com/a/503355/577463了解无头 X 服务器的其他选项。

相关内容