Sphinx FAQ¶
Dies ist eine Liste häufig gestellter Fragen zu Sphinx. Bitte schlagen Sie neue Einträge vor!
Wie kann ich…¶
- … PDF-Dateien ohne LaTeX erstellen?
rinohtype bietet einen PDF-Builder, der als direkter Ersatz für den LaTeX-Builder verwendet werden kann.
- … Abschnittsnummern erhalten?
Diese sind in der LaTeX-Ausgabe automatisch; für HTML geben Sie eine Option
:numbered:an die Direktivetoctree, wo Sie mit der Nummerierung beginnen möchten.- … das Aussehen der generierten HTML-Dateien anpassen?
Verwenden Sie Themes, siehe HTML-Theming.
- … globale Substitutionen oder Includes hinzufügen?
Fügen Sie sie in den Konfigurationswerten
rst_prologoderrst_epiloghinzu.- … den gesamten TOC-Baum in der Seitenleiste anzeigen?
Verwenden Sie das
toctree-Callable in einer benutzerdefinierten Layout-Vorlage, wahrscheinlich im Blocksidebartoc.- … eine eigene Erweiterung schreiben?
Siehe die Tutorials.
- … meine bestehenden Dokumente von MoinMoin-Markup konvertieren?
Der einfachste Weg ist die Konvertierung in xhtml, dann die Konvertierung von xhtml zu reStructuredText. Sie müssen immer noch Klassen und ähnliches markieren, aber die Überschriften und Codebeispiele werden sauber übernommen.
Für viele weitere Erweiterungen und andere beigesteuerte Inhalte siehe das Repository sphinx-contrib.
Sphinx verwenden mit…¶
- Read the Docs
Read the Docs ist ein Dokumenten-Hosting-Service, der auf Sphinx basiert. Sie hosten Sphinx-Dokumentation und unterstützen eine Reihe weiterer Funktionen, darunter Versionsunterstützung, PDF-Generierung und mehr. Der Leitfaden Erste Schritte ist ein guter Einstiegspunkt.
- Epydoc
Es gibt eine Drittanbieter-Erweiterung, die eine API-Rolle bereitstellt, die auf Epydocs API-Dokumentation für eine gegebene Kennung verweist.
- Doxygen
Michael Jones hat eine reStructuredText/Sphinx-Brücke zu Doxygen namens breathe entwickelt.
- SCons
Glenn Hutchings hat ein SCons-Build-Skript geschrieben, um Sphinx-Dokumentation zu erstellen; es wird hier gehostet: https://bitbucket-archive.softwareheritage.org/projects/zo/zondo/sphinx-scons.html
- PyPI
Jannis Leidel hat einen Setuptools-Befehl geschrieben, der Sphinx-Dokumentation automatisch in den PyPI-Bereich für Paketdokumentation unter https://pythonhosted.org/ hochlädt.
- GitHub Pages
Fügen Sie
sphinx.ext.githubpageszu Ihrem Projekt hinzu. Es ermöglicht Ihnen, Ihre Dokumentation auf GitHub Pages zu veröffentlichen. Es generiert automatisch Hilfsdateien für GitHub Pages beim Erstellen von HTML-Dokumenten.- MediaWiki
Siehe sphinx-wiki, ein Projekt von Kevin Dunn.
- Google Analytics
Sie können eine benutzerdefinierte Vorlage
layout.htmlverwenden, wie hier{% extends "!layout.html" %} {%- block extrahead %} {{ super() }} <script> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'XXX account number XXX']); _gaq.push(['_trackPageview']); </script> {% endblock %} {% block footer %} {{ super() }} <div class="footer">This page uses <a href="https://analytics.google.com/"> Google Analytics</a> to collect statistics. You can disable it by blocking the JavaScript coming from www.google-analytics.com. <script> (function() { var ga = document.createElement('script'); ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'https://www') + '.google-analytics.com/ga.js'; ga.setAttribute('async', 'true'); document.documentElement.firstChild.appendChild(ga); })(); </script> </div> {% endblock %}
- Google Suche
Um die integrierte Suchfunktion von Sphinx durch Google Suche zu ersetzen, gehen Sie wie folgt vor
Gehen Sie zu https://#/cse/all, um den Google Such-Codeausschnitt zu erstellen.
Kopieren Sie den Codeausschnitt und fügen Sie ihn in
_templates/searchbox.htmlin Ihrem Sphinx-Projekt ein<div> <h3>{{ _('Quick search') }}</h3> <script> (function() { var cx = '......'; var gcse = document.createElement('script'); gcse.async = true; gcse.src = 'https://#/cse.js?cx=' + cx; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(gcse, s); })(); </script> <gcse:search></gcse:search> </div>
Fügen Sie
searchbox.htmlzum Konfigurationswerthtml_sidebarshinzu.
Sphinx vs. Docutils¶
tl;dr: docutils konvertiert reStructuredText in mehrere Ausgabeformate. Sphinx baut auf docutils auf, um die Erstellung von Querverweisen und indizierten Dokumenten zu ermöglichen.
docutils ist ein Textverarbeitungssystem zur Konvertierung von einfacher Textdokumentation in andere, reichhaltigere Formate. Wie in der docutils-Dokumentation erwähnt, verwendet docutils Reader zum Lesen eines Dokuments, Parser zum Parsen von einfacher Textformatierung in eine interne Baumstruktur, die aus verschiedenen Arten von Nodes besteht, und Writer zum Ausgeben dieses Baums in verschiedenen Dokumentformaten. docutils bietet Parser für ein einfaches Textformat – reStructuredText – obwohl andere, Out-of-Tree-Parser implementiert wurden, einschließlich Sphinx' Markdown-Parser. Auf der anderen Seite bietet es Writer für viele verschiedene Formate, einschließlich HTML, LaTeX, Manpages, Open Document Format und XML.
docutils stellt seine gesamte Funktionalität über eine Vielzahl von Frontend-Tools bereit, wie z. B. rst2html, rst2odt und rst2xml. Entscheidend ist jedoch, dass all diese Tools und docutils selbst sich mit einzelnen Dokumenten befassen. Sie unterstützen keine Konzepte wie Querverweise, Indexierung von Dokumenten oder die Erstellung einer Dokumentenhierarchie (die sich typischerweise in einem Inhaltsverzeichnis manifestiert).
Sphinx baut auf docutils auf, indem es die Reader und Parser von docutils nutzt und seine eigenen Builder bereitstellt. Infolgedessen umschließt Sphinx einige der von docutils bereitgestellten Writer. Dies ermöglicht Sphinx, viele Funktionen bereitzustellen, die mit docutils einfach nicht möglich wären, wie die oben genannten.
Epub-Informationen¶
Die folgende Liste gibt einige Hinweise zur Erstellung von EPUB-Dateien
Teilen Sie den Text in mehrere Dateien auf. Je länger die einzelnen HTML-Dateien sind, desto länger dauert es, bis der E-Book-Reader sie rendert. In extremen Fällen kann das Rendern bis zu einer Minute dauern.
Versuchen Sie, die Markierung zu minimieren. Das zahlt sich auch bei der Renderzeit aus.
Für einige Reader können Sie eingebettete oder externe Schriftarten mit der CSS-Direktive
@font-faceverwenden. Dies ist äußerst nützlich für Code-Auflistungen, die oft am rechten Rand abgeschnitten werden. Die Standard-Courier-Schriftart (oder Variante) ist ziemlich breit und Sie können nur bis zu 60 Zeichen pro Zeile anzeigen. Wenn Sie sie durch eine schmalere Schriftart ersetzen, können Sie mehr Zeichen pro Zeile erhalten. Sie können sogar FontForge verwenden und schmale Varianten einer freien Schriftart erstellen. In meinem Fall erhalte ich bis zu 70 Zeichen pro Zeile.Möglicherweise müssen Sie ein wenig experimentieren, bis Sie brauchbare Ergebnisse erzielen.
Testen Sie die erstellten EPUBs. Sie können verschiedene Alternativen verwenden. Die mir bekannten sind Epubcheck, Calibre, FBreader (obwohl es CSS nicht rendert) und Bookworm. Für Bookworm können Sie den Quellcode von https://code.google.com/archive/p/threepress herunterladen und Ihren eigenen lokalen Server ausführen.
Große schwebende Divs werden nicht richtig angezeigt. Wenn sie mehr als eine Seite bedecken, wird das Div nur auf der ersten Seite angezeigt. In diesem Fall können Sie die Datei
epub.cssaus dem Verzeichnissphinx/themes/epub/static/in Ihr lokales Verzeichnis_static/kopieren und die Float-Einstellungen entfernen.Dateien, die außerhalb der
toctree-Direktive eingefügt werden, müssen manuell eingebunden werden. Dies gilt manchmal für Anhänge, z. B. das Glossar oder die Indizes. Sie können sie mit der Optionepub_post_fileshinzufügen.Die Handhabung der EPUB-Titelseite unterscheidet sich vom reStructuredText-Verfahren, das Bildpfade automatisch auflöst und die Bilder in das Verzeichnis
_imageslegt. Für die EPUB-Titelseite legen Sie das Bild in das Verzeichnishtml_static_pathund referenzieren Sie es mit seinem vollständigen Pfad in der Konfigurationsoptionepub_cover.Der Befehl kindlegen kann aus einer erstellten epub3-Datei in eine
.mobi-Datei für Kindle konvertieren. Sie erhaltenihrDokument.mobiunter_build/epubnach dem folgenden Befehl$ make epub $ kindlegen _build/epub/yourdoc.epub
Der kindlegen-Befehl akzeptiert keine Dokumente, die Abschnittsüberschriften um die
toctree-Direktive herum habenSection Title ============= .. toctree:: subdocument Section After Toc Tree ======================
kindlegen geht davon aus, dass alle Dokumente linear geordnet sind, aber das resultierende Dokument hat eine komplizierte Reihenfolge für kindlegen
``parent.xhtml`` -> ``child.xhtml`` -> ``parent.xhtml``
Wenn Sie die folgende Fehlermeldung erhalten, korrigieren Sie Ihre Dokumentenstruktur
Error(prcgen):E24011: TOC section scope is not included in the parent chapter:(title) Error(prcgen):E24001: The table of content could not be built.
Texinfo-Informationen¶
Es gibt zwei Hauptprogramme zum Lesen von Info-Dateien: info und GNU Emacs. Das Programm info hat weniger Funktionen, ist aber in den meisten Unix-Umgebungen verfügbar und kann schnell vom Terminal aus aufgerufen werden. Emacs bietet eine bessere Schrift- und Farbdarstellung und unterstützt umfangreiche Anpassungen (natürlich).
Links anzeigen¶
Ein bemerkenswertes Problem, auf das Sie bei den generierten Info-Dateien stoßen könnten, ist die Anzeige von Referenzen. Wenn Sie die Quelle einer Info-Datei lesen, würde eine Referenz auf diesen Abschnitt wie folgt aussehen:
* note Displaying Links: target-id
Im Standalone-Reader info werden Referenzen genauso angezeigt, wie sie in der Quelle erscheinen. Emacs hingegen ersetzt standardmäßig *note: durch see und verbirgt die target-id. Zum Beispiel:
Man kann die Generierung von Inline-Referenzen in einem Dokument mit texinfo_cross_references deaktivieren. Das macht eine Info-Datei für den Standalone-Reader (info) lesbarer.
Das genaue Verhalten, wie Emacs Referenzen anzeigt, hängt von der Variablen Info-hide-note-references ab. Wenn sie auf den Wert hide gesetzt ist, verbirgt Emacs sowohl den Teil *note: als auch die target-id. Dies ist im Allgemeinen der beste Weg, um Sphinx-basierte Dokumente anzuzeigen, da diese häufig Links verwenden und diese Einschränkung nicht berücksichtigen. Das Ändern dieser Variablen beeinflusst jedoch, wie alle Info-Dokumente angezeigt werden, und die meisten berücksichtigen dieses Verhalten.
Wenn Sie möchten, dass Emacs von Sphinx erzeugte Info-Dateien mit dem Wert hide für Info-hide-note-references und dem Standardwert für alle anderen Info-Dateien anzeigt, versuchen Sie, den folgenden Emacs Lisp-Code zu Ihrer Startdatei ~/.emacs.d/init.el hinzuzufügen.
(defadvice info-insert-file-contents (after
sphinx-info-insert-file-contents
activate)
"Hack to make `Info-hide-note-references' buffer-local and
automatically set to `hide' iff it can be determined that this file
was created from a Texinfo file generated by Docutils or Sphinx."
(set (make-local-variable 'Info-hide-note-references)
(default-value 'Info-hide-note-references))
(save-excursion
(save-restriction
(widen) (goto-char (point-min))
(when (re-search-forward
"^Generated by \\(Sphinx\\|Docutils\\)"
(save-excursion (search-forward "\x1f" nil t)) t)
(set (make-local-variable 'Info-hide-note-references)
'hide)))))
Hinweise¶
Die folgenden Hinweise können hilfreich sein, wenn Sie Texinfo-Dateien erstellen möchten
Jeder Abschnitt entspricht einem anderen
nodein der Info-Datei.Doppelpunkte (
:) können in Menüeinträgen und Xrefs nicht richtig maskiert werden. Sie werden durch Semikolons (;) ersetzt.Links zu externen Info-Dateien können mit dem etwas offiziellen URI-Schema
infoerstellt werden. Zum Beispiel:info:Texinfo#makeinfo_options