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

时间:2011-06-24 20:52:50

标签: latex pdf-generation documentation-generation python-sphinx

使用sphinx doc生成器,我试图将.png图像用于文档的HTML版本,然后我想将.svg图像用于PDF / LATEx版本。

任何人都知道如何“标记”部分为“HTML构建” - 只有“Latex构建” - 只有?

干杯

2 个答案:

答案 0 :(得分:15)

看看这些选项:

  1. 图片文件名通配符:

    .. image:: gnu.* 
    

    来自documentation:“例如,如果给出了文件名gnu。*并且源树中存在两个文件gnu.pdf和gnu.png,则LaTeX构建器将选择前者,而HTML构建者更喜欢后者。“

  2. only指令:

    .. only:: latex
    
       This appears only in LaTeX output.
    
    .. only:: html
    
       This appears only in HTML output. 
    

答案 1 :(得分:12)

可以使用makefile自动构建适当的输出格式。

还提供了一个演示using Sphinx with SVG and LaTeX PDF output类似过程的教程。

  1. 使用.rst来源中的图片filename wildcard option

    .. image:: my_image.*
    
  2. 使用Inkscape在构建时将源图像转换为PDF和PNG。您可以在构建时自动执行此操作,方法是将以下代码添加到Makefile:

    SOURCEDIR     = source
    #IMAGEDIRS can be a list of directories that contain SVG files and are relative to the SOURCEDIR
    IMAGEDIRS      = _images
    
    # SVG to PDF conversion
    SVG2PDF       = inkscape
    SVG2PDF_FLAGS = -C
    
    # SVG to PNG conversion
    SVG2PNG       = inkscape
    SVG2PNG_FLAGS = -C -d=90 --export-background-opacity=\#00
    
    # Pattern rule for converting SVG to PDF
    %.pdf : %.svg
        $(SVG2PDF) $(SVG2PDF_FLAGS) -f $< -A $@
    
    # Pattern rule for converting SVG to PNG
    %.png : %.svg
        $(SVG2PNG) $(SVG2PNG_FLAGS) -f $< -e $@
    
    # Build a list of SVG files to convert to PDFs
    PDFs := $(foreach dir, $(IMAGEDIRS), $(patsubst %.svg,%.pdf,$(wildcard $(SOURCEDIR)/$(dir)/*.svg)))
    
    # Build a list of SVG files to convert to PNGs
    PNGs := $(foreach dir, $(IMAGEDIRS), $(patsubst %.svg,%.png,$(wildcard $(SOURCEDIR)/$(dir)/*.svg)))
    
    # Make a rule to build the PDFs
    images-pdf: $(PDFs) 
    
    # Make a rule to build the PNGs
    images-png: $(PNGs) 
    
    # Make a rule to build the images
    images: images-pdf images-png
    
    clean-pdf:
        -rm $(PDFs)
    
    clean-png:
        -rm $(PNGs)
    
    clean-images: clean-pdf clean-png
    

    最后,更新cleanlatexlatexpdf规则以依赖相应的图片目标:

    ...
    clean: clean-images
    ...
    html: images-png
    ... 
    latex: images-pdf
    ...
    latexpdf: images-pdf
    ...
    

    现在,您可以通过键入make images来构建图片,然后使用make clean-images进行清理。使用make htmlmake latexmake latexpdf会自动确保您的图片是最新的。

  3. 一个问题是Sphinx默认在HTML输出中更喜欢SVG而不是PNG。您可以通过覆盖conf.py文件中的优先顺序来解决此问题。

    导入后,在conf.py文件顶部附近添加以下行。

    # Redefine supported_image_types for the HTML builder
    from sphinx.builders.html import StandaloneHTMLBuilder
    StandaloneHTMLBuilder.supported_image_types = ['image/png', 'image/svg+xml', 
                                           'image/gif', 'image/jpeg']