9

我有一个 iPython 笔记本,其中包含一个内联图(即它包含命令plot(x,y))。当我发出命令ipython nbconvert --to latex --post PDF --SphinxTransformer.author='Myself' MyNotebook.ipynb生成的 .PDF 文件包含该图,但它已导出为 .PNG,所以它没有看起来非常好(像素化)。如何告诉nbconvert将所有绘图/图形导出为 .EPS?

谢谢

4

3 回答 3

20

首先,notebook 不负责创建绘图,但matplotlib可以将您的绘图渲染为 eps、pdf、svg 等,以高质量包含在出版物中。

我同意默认的内联绘图格式,即png由于多种原因不适用于出版物。正如您在答案中发布的 github 问题中给出的那样,内联后端可以配置为使用svg而不是png通过调用

%config InlineBackend.figure_format = 'svg'

在代码单元中。有了这个,新创建的图将是矢量的,(正如马特所说,已经渲染的 png 将不会被转换!)。这些 svg 嵌入到笔记本中(现代浏览器可以呈现 svg),随后通过 nbconvert 转换为 pdf。这些 pdf 满足出版准备图的要求。但是,请注意 svg 可能非常大(与 png 相比)并且可能会显着减慢笔记本的处理速度。

您最初的问题是关于eps图形的。如上所述,matplotlib 可以渲染 eps,因此,您始终可以执行诸如savefig('plot1.eps')创建所需图形之类的操作。这实际上是我创建出版物图形的方式(笔记本中的 png,纸中的 eps)。假设我们会让 IPython 生成 eps 文件(嵌入但不能在浏览器中呈现)。nbconverttex生成的文件旨在与pdflatex一起使用。如果输入 eps 文件,pdflatex会将这些文件转换为 pdf 以包含在最终文档中。所以基本上它与nbconvert目前对 svgs 的作用相同。因此,没有任何好处。

最后,我想指出的是,即使 nbconvert 生成的 tex 文件看起来很棒(尤其是使用 master 分支创建的那些),恕我直言,没有任何方法可以使用这些文件(例如添加标题、缩放图像、. ..)。因此,您始终可以将这一步的 eps 文件包含到您的论文中。

于 2013-10-29T22:29:30.587 回答
0

NBconvert 不会运行您的代码。因此,如果您没有使用 SVG matplotlib 后端进行绘图,这是不可能的。如果您这样做了,那么您需要编写一个执行 svg-> eps 的 nbconvert 预处理器并扩展相关模板以了解如何嵌入 EPS。

于 2013-10-29T15:29:09.467 回答
0

显然这是 nbconvert 中缺少的功能。目前没有办法在最终 PDF 中获得出版质量图:https ://github.com/ipython/ipython/issues/3603

https://github.com/ipython/ipython/issues/3693

于 2013-10-29T16:14:05.320 回答