使用 Sphinx Extension 将 svg 转换为 pdf

Ale*_*ph0 6 latex imagemagick pdflatex python-sphinx imagemagick-convert

我的公司正在使用 Sphinx 为我们的产品创建手册。我们的产品附带 PDF 和 HTML 文档。我们使用 Windows 作为唯一的开发环境。

必要的要求是从相同的源(*.rst 文件)生成两种格式。

旧文档使用大量 SVG 图像,但 sphinx 构建格式latex不支持\includegraphics{}环境中的 SVG 文件。

现在我找到了有前途的 Sphinx-Extensionsphinx.ext.imgconverter并将其包含到我的conf.py.

extensions = [
    'sphinx.ext.imgmath',
    'sphinx.ext.ifconfig',
    'sphinx.ext.imgconverter'
]
Run Code Online (Sandbox Code Playgroud)

如果我正在构建 LaTeX,希望将所有 SVG 文件转换为 PDF 文件。不幸的是,该扩展的文档非常短,并且没有有效的示例。

http://www.sphinx-doc.org/en/master/ext/imgconverter.html#module-sphinx.ext.imgconverter

我们第一个文件的内容基本上是:

.. image:: Image.*
   :width: 100px
Run Code Online (Sandbox Code Playgroud)

Sphinx 应该根据构建的 html/pdf 自行确定是否应将星号替换为 svg 或 pdf。我从之前的帖子中得到的信息:

  1. 使用 Sphinx 文档,如何为 HTML 构建指定 png 图像格式,为 Latex/PDF 构建指定 pdf 图像格式?

但不知怎的,我无法生成我的乳胶。 使用 Sphinx 文档,如何为 HTML 构建指定 png 图像格式,为 Latex/PDF 构建指定 pdf 图像格式?

相反,会发出以下警告:

WARNING: no matching candidate for image URI u'Image.*'
Run Code Online (Sandbox Code Playgroud)

但只有当我想在 HTML 的情况下构建 LaTeX 时,才会出现警告。

我必须安装 ImageMagick 还是有什么问题?Sphinx 如何知道在哪里搜索 ImageMagick?

更新

我刚刚将 Sphinx 更新到版本 1.7.2。它仍然不起作用。由于我无法安装 ImageMagick,我暂时删除了该扩展以sphinx.ext.imgconverter测试conf.py手动解决方案。我使用 inkscape 手动将所有图像转换为 pdf/png。

现在,如果我使用make latex.

WARNING: a suitable image for latex builder not found: ['image/svg+xml']
Run Code Online (Sandbox Code Playgroud)

source但是目录和目录中肯定都有手动转换的图像(pdf,png)build/latex,类似。

我的 LaTeX 文件被编译为:

\noindent\sphinxincludegraphics[width=100\sphinxpxdimen]{{Image}.*}
Run Code Online (Sandbox Code Playgroud)

我无法用 pdflatex 编译它。

LaTeX Error: Unknown graphics extension: .*.
Run Code Online (Sandbox Code Playgroud)

我的 LaTeX Builder 是否有一些设置来conf.py获取转换后的图像?

如果我在我的代码中包含以下几行,conf.py就会发生意想不到的事情:

from sphinx.builders.latex import LaTeXBuilder
LaTeXBuilder.supported_image_types = ['image/png', 'image/pdf','image/svg+xml' ]
Run Code Online (Sandbox Code Playgroud)

我的 LaTeX 文件的输出现在包含以下行:

\noindent\sphinxincludegraphics[width=100\sphinxpxdimen]{{Image}.svg}
Run Code Online (Sandbox Code Playgroud)

image/svg+xml如果我从中删除类型,supported_image_types我会再次收到之前的错误。我的印象是,sphinx-build在错误的地方寻找转换后的图像。但这只是一个想法。

Ste*_*rcy 1

  1. 我怀疑该错误与此问题有关。它已在 Sphinx 1.7 中修复,这表明您安装了 Sphinx < 1.7 的版本。升级到 Sphinx 1.7 或更高版本。 提示:始终搜索源代码存储库以获取帮助。
  2. 从文档中sphinx.ext.imgconverter

    在内部,此扩展使用Imagemagick来转换图像。

    这意味着它必须安装并位于您的系统路径中。