Introduction to Sphinx¶
Philosophy¶
Sphinx is what is called a documentation generator. This means that it takes a bunch of source files in plain text, and generates a bunch of other awesome things, mainly HTML. For our use case you can think of it as a program that takes in plain text files in reStructuredText format, and outputs HTML.
reST -> Sphinx -> HTML
So as a user of Sphinx, your main job will be writing these text files. This means that you should be minimally familiar with reStructuredText as a language. It’s similar to Markdown in a lot of ways. It’s a lot more powerful than Markdown, but with that power comes increased complexity. Just know that some of the awkward syntax allows you to do more interesting things further down the line. In particular, it is extensible: it has a formal way of adding markup directives that allow more sophisticated parsing. For example, Sphinx includes directives to relate documentation of modules, classes and methods to the corresponding code.
Installing Sphinx¶
The first step to getting going is installing Sphinx. Sphinx is a Python project, so it can be installed like any other Python library. Several Operating Systems (Mac OS X, Major Versions of Linux/BSD) have Python pre-installed, so you should just have to run:
sudo pip install Sphinx
Instructions for installing Python and Sphinx on Windows can be found at the Sphinx install page.
Note
Advanced users can install this in a virtualenv if they wish.
Getting started¶
You’ll want to read the Sphinx Getting Started guide,
as it provides an introduction to a lot of the basic ideas. If you use
the sphinx-quickstart
tool described there, it’ll create
a sample project with the following standard structure:
project/
docs/
conf.py
index.rst
Makefile
We have a top-level docs
directory in the main project directory.
Inside of this is:
index.rst
:- This is the index file for the documentation, or what lives at
/
. It can be thought of as a landing page that contains child topics for users to navigate to. It normally contains a table of contents that will link other topics in the documentation. conf.py
: which allows for customization of the output.- For the most part this shouldn’t need to be changed.
Makefile
: This ships with sphinx,- and is the main interface for local development, but shouldn’t be changed.
Other *.rst
files for specific subsections of documentation.
Table of contents structure¶
The method for specifying a table of contents (TOC) structure in
Sphinx is somewhat unusual. Instead of a master file that contains the
hierarchical structure of the TOC for the whole project, you’ll need
to include toctree directives in each parent topic that has child
topics. Sphinx will then infer the overall TOC structure from the toctree
directives in individual files.
For example, the index.rst
file in your project folder may contain
the following toctree directive:
.. toctree::
TopLevel1
TopLevel2
This indicates that there are two top-level topics. If you want the
TopLevel1
topic to contain child topics, then you’d insert the
following toctree
directive in TopLevel1:
.. toctree::
Child1
Child2
Child3
Different Sphinx themes will have different ways of displaying the TOC
in the sidebar. You can also configure whether or not to display the
toctree directive as a mini-toc within the topic itself, by adding a
:hidden:
option to the toctree
directive.
Writing docs¶
Where you write your documentation will vary based on how the project is laid out. Generally major topics will go in an aptly named file in the top-level docs directory. If a topic gets larger, it can then be broken out into multiple files in a directory. When you write a document, figure out if there is already a place for it in the project, otherwise feel free to start a new file.
Warning
If you make a new file, make sure it is included in a
toctree
directive in a file that is in the TOC. When
you build the documentation, Sphinx will display a
warning for each document that isn’t in the TOC.
reStructuredText¶
To write nice looking documentation you will need to have a basic understanding of RST as a language. The reStructuredText Primer is a great place to start reading, and it covers most of the syntax you will care about. The main parts you will need at first are:
- Inline Markup
- Source Code
- Hyperlinks
- Sections
- Directives
Note
You can live-preview RST on the web: http://rst.ninjs.org/ . Note that it won’t understand Sphinx-specific markup though.
Feel free to play around with RST a bit to make sure that you understand how it works.
Warning
RST is white-space sensitive in places. If it is acting weirdly, make sure you indent lines that are part of the same content similarly.
Building docs¶
Once you have your documentation written and want to turn it into HTML, it’s pretty simple. Simply run:
# Inside top-level docs/ directory.
make html
This should run Sphinx in your shell, and output HTML.
At the end, it should say something about the documents being ready in
_build/html
.
You can now open them in your browser by typing:
open _build/html/index.html