10

考虑以下带有内核命令行界面的对话框:

$ math
Mathematica 6.0 for Linux x86 (32-bit)

In[1]:= p = Plot[x^2, {x,-1,1}]
Out[1]= -Graphics-

In[2]:= Export["foo.png", p]
Out[2]= foo.png

这在具有以下错误的机器上运行良好,但在具有以下错误$Version = 6.0 for Linux x86 (32-bit) (June 2, 2008)的机器上失败:$Version = 7.0 for Linux x86 (64-bit) (November 11, 2008)

Export::nofe: A front end is not available; export of PNG 
requires a front end.

我能想到的任何其他图像格式都有类似的错误。

所以问题是,我怎样才能让没有前端的 Mathematica 内核导出图像?为什么它可以在 Mathematica 6.0 中顺利运行?如果上面的示例在版本 7 中适用于您,请告诉我!

PS:版本 7 引入了该功能UsingFrontEnd,但失败了

Developer`UseFrontEnd::nofestart: 
Unable to launch a front end. Proceeding without a front end.

大概是因为机器上没有安装X11。

附录

事实证明,在这方面,版本 6 和版本 7 没有区别。相反,在版本 6 的机器上,前端被静默调用。另一台机器的问题,正如这个问题的答案所表明的那样,是没有 X 服务器,因此无法调用前端。

4

2 回答 2

7

您需要一个前端来从 MathKernel 导出图形。图形的渲染完全由前端覆盖。没有前端,您就没有要导出的图形。没有解决方法。

如果你有一个工作的前端,你可以做的是使用:

UseFrontEnd[Export[filename,graphics]]

这将从终端调用前端,允许您导出图形。

要在没有安装 X 服务器和 Windows 管理器的 Linux 机器上运行前端,您有以下选项:

  1. 使用其他机器的 X 显示。参见例如http://www.hungry.com/~jamie/xexport.html。基本上它归结为设置环境变量export DISPLAY=machine_address:0.0或在每个执行选项期间传递-display machine_address:0.0

  2. 在本地安装 Xvfb,它是一个 X 服务器帧缓冲区。它非常简单易用。参见例如 Xvfb 上的 Wikipedia 条目。您可以在运行 Xvfb 时设置 X 显示Xvfb :display_nr &,然后像之前的选项一样使用它。

于 2009-11-09T20:01:14.930 回答
3

导出图形也需要版本 6 中的前端。反过来,前端可能需要 X(毕竟甚至一些 2D 绘图也需要 3D 图形加速......)

我只有适用于 Windows 的 v6。从命令行会话导出图形时,前端会根据需要在后台自动启动。

于 2008-11-25T13:18:06.277 回答