Sphinx Doc - 如何在构建HTML时呈现动画GIF,而在构建latexpdf时呈现PNG?

时间:2017-08-30 21:07:04

标签: python-sphinx restructuredtext

正如标题所述,我正在使用sphinx-doc,我真的希望在构建输出为latexpdf时为条件渲染静态PNG,并为网络构建动画GIF。

理想情况下,能够以某种方式在第一个文件中执行此操作会很好...语义上:

如果builder == html:   ..图片:等等等等 elif builder == latexpdf:   ..图片:blah blah

2 个答案:

答案 0 :(得分:2)

来自Sphinx documentation for images

  

Sphinx通过允许扩展名的星号来扩展标准的docutils行为:

.. image:: gnu.*
     

然后,Sphinx会搜索与提供的模式匹配的所有图像并确定其类型。然后,每个建筑师从这些候选人中选择最佳图像。例如,如果给出了文件名gnu.*并且源树中存在两个文件gnu.pdfgnu.png,则LaTeX构建器将选择前者,而HTML构建器则更喜欢后者。支持的图像类型和选择优先级在Available builders定义。

自定义"最佳图像"对于给定的构建器,请修改conf.py以使用您喜欢的StandaloneHTMLBuilder顺序覆盖supported_image_types类。

from sphinx.builders.html import StandaloneHTMLBuilder
StandaloneHTMLBuilder.supported_image_types = [
    'image/svg+xml',
    'image/gif',
    'image/png',
    'image/jpeg'
]

答案 1 :(得分:1)

如果它对其他人有用,我采用了 Steve Piercy 非常有用的答案的一个变体,该答案试图验证代码的未来并防止神秘的图像丢失。它使用相同的结构,但默认情况下附加在 StandaloneHTMLBuilder.supported_image_types 中但不在我们提供的新集合中的任何项目。我在考虑 Sphinx 是否开始支持 HEIC 图像之类的东西,或者其他新标准出现,这将使它们能够无缝集成。

new_supported_image_types = [
    'image/svg+xml',
    'image/gif',
    'image/png',
    'image/jpeg'
]

# construct it this way so that if Sphinx adds default support for additional images, such
# as HEIC, then what we do is add any of those to the end. We start with the ones
# we want to support in this order, then subtract them from the defaults to identify
# any remaining items that we append to the end of the list

additional_default_supported_images = list(set(StandaloneHTMLBuilder.supported_image_types) - set(new_supported_image_types))
StandaloneHTMLBuilder.supported_image_types = new_supported_image_types + additional_default_supported_images