2012-11-19 37 views
2

這是一個非常奇怪的問題:將Sphinx PDF輸出附加到Sphinx HTML輸出

我已經能夠使用Sphinx生成html和pdf輸出;我不得不將兩者都與我的distribution (to PyPI)捆綁在一起,以便用戶都可以訪問它們。

儘管我可以直接上傳HTML文檔以在PyPI上託管,但我無法上傳它的PDF LaTeX版本。我想這樣做,因爲實際的代碼是在50K以下,但捆綁文檔使它膨脹到300K左右。

最終,我希望用戶能夠擁有脫機版本的文檔,而不必下載幾頁sphinx文檔。

所以我的問題是這樣的:我可以自動將PDF與HTML捆綁在一起,以便最終用戶可以直接下載PDF以供脫機使用? (我知道我可以將PDF與我的發行版捆綁在一起,但這似乎是一種更乾淨的方法)

+0

我不這麼認爲。如果您可以在某處(如DropBox)託管PDF文件,則可以在HTML中包含一個下載鏈接。另一種選擇是壓縮PDF文件 - 根據其內容,它可能會顯着縮小。 – martineau

+0

壓縮PDF確實讓我難以置信。但作爲設計決策,文檔應該不會與發行版捆綁在一起。這就是我的目標 – inspectorG4dget

回答

2

我去的Reinout麪包車里斯的解決方案的修改:

我創建了一個downloadMe.rst(這裏面出現Lorem存有文本)時運行make html它就會自動內置到HTML,因此使得downloadMe.html與Lorem存有文本。

我然後編輯Makefile文件的HTML目標如下:

  1. 使其建立LaTeX的PDF,並將其複製到以上_build/html/static
  2. 使用sed腳本將downloadMe.html中的lorem ipsum文本替換爲_build/html/_static中PDF的HTML超鏈接。

當所有這一切做,這就是在Makefile的HTML目標的樣子:

html: 
     @echo "Making LaTeX" 
     make latex 
     (cd _build/latex/; make) # the LaTeX needs to be built separately. This can be done in a subshell 
     @echo "Done making LaTeX" 
     @echo "Copying PDF to Static" 
     cp _build/latex/Genetic.pdf _build/html/_static/ 
     @echo "Copy PDF to Static... DONE" 
     @echo "Adding PDF to HTML" 
     sed -i '' 's/lorem\ ipsum/\<a href="_static\/Genetic.pdf"\>Download\ Me\<\/a\>/g' _build/html/downloadPDF.html 
     @echo "Done adding PDF to HTML" 
     @echo "Removing LaTeX dir" 
     rm -rf _build/latex 
     @echo "Done removing LaTeX dir" 

     $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html 
     @echo 
     @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." 

這個Makefile目標,雖然重一點的優勢在於它的發射後不管;我只需要make html,並且所有文檔都是一次完成的,並且在make完成時,我不必編輯任何文件。這使我留下更少的空間讓我忘記編輯一些文件或其他文件,以便在上傳到PyPI之前正確地創建文檔。

1

您可以修改Sphinx放置在您的doc/build/目錄中的Makefile。在latexpdf目標的末尾,添加一行以將PDF複製到html構建目錄。這裏有一個例子(我只加了最後一行):

latexpdf: 
    $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex 
    @echo "Running LaTeX files through pdflatex..." 
    $(MAKE) -C $(BUILDDIR)/latex all-pdf 
    @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." 
    cp $(BUILDDIR)/latex/*pdf $(BUILDDIR)/html/ 

然後,您可以在您的README.rst添加一個鏈接到PDF。

(如果自述文件包含在你的獅身人面像中,這可能會給你一個Sphinx警告,但是對於缺少的目標文件,除非你也將PDF複製到你的源代碼目錄中。版本被複制)

我的建議:添加一個「原始的HTML」進入你的README.rst,它也有沒有出現在PDF輸出:-)

.. raw:: html 

    <a href="pypi/link/to/pdf">PDF version</a> 
2

替代的優勢(也到我的其他答案)是讓http://readthedocs.org構建和託管您的文檔。他們還可以構建PDF文件,因此您可以在文檔中和/或您的文檔README.rst上提供PDF的鏈接(由readthedocs構建和託管)。例如,https://readthedocs.org/projects/zestreleaser/downloads/。你會看到PDF的鏈接,epub和壓縮的html下載。可能正是你想要的。