# How to Create and Configure a Sphinx project to Document SPEC Macros¶

Tip

for more information on this topic, refer to the SPhinx tutorial: http://sphinx.pocoo.org/tutorial.html

## Decide which configuration¶

In-source configuration or Out-of-source configuration?

Tip

Most likely, you will want to keep the Sphinx documentation files in a separate directory from the SPEC macros. Then again, maybe not.

### In-source configuration¶

An in-source configuration is where the Sphinx .rst files are in the same directory as the SPEC macro files.

Here is a graphical example:

### Out-of-source configuration¶

An out-of-source configuration is where the Sphinx .rst files are in a separate directory from the SPEC macro files.

Here is a graphical example: [1]

The source files are located in the source directory (child of the build directory):

Caution

FIXME: these are Python files and project directories. The figure should be shown with SPEC macro files out-of-source.

## Create the Sphinx documentation tree¶

Make a new sandbox directory to try this out:

mkdir /tmp/sandbox
cd /tmp/sandbox


Create a Sphinx configuration in this directory by running:

sphinx-quickstart


Here’s the full session:

  1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74  jemian@como-ubuntu64:/tmp/sandbox$sphinx-quickstart Welcome to the Sphinx 1.1.2 quickstart utility. Please enter values for the following settings (just press Enter to accept a default value, if one is given in brackets). Enter the root path for documentation. > Root path for the documentation [.]: You have two options for placing the build directory for Sphinx output. Either, you use a directory "_build" within the root path, or you separate "source" and "build" directories within the root path. > Separate source and build directories (y/N) [n]: Inside the root directory, two more directories will be created; "_templates" for custom HTML templates and "_static" for custom stylesheets and other static files. You can enter another prefix (such as ".") to replace the underscore. > Name prefix for templates and static dir [_]: The project name will occur in several places in the built documentation. > Project name: sandbox > Author name(s): sandy Sphinx has the notion of a "version" and a "release" for the software. Each version can have multiple releases. For example, for Python the version is something like 2.5 or 3.0, while the release is something like 2.5.1 or 3.0a1. If you don't need this dual structure, just set both to the same value. > Project version: test > Project release [test]: The file name suffix for source files. Commonly, this is either ".txt" or ".rst". Only files with this suffix are considered documents. > Source file suffix [.rst]: One document is special in that it is considered the top node of the "contents tree", that is, it is the root of the hierarchical structure of the documents. Normally, this is "index", but if your "index" document is a custom template, you can also set this to another filename. > Name of your master document (without suffix) [index]: Sphinx can also add configuration for epub output: > Do you want to use the epub builder (y/N) [n]: Please indicate if you want to use one of the following Sphinx extensions: > autodoc: automatically insert docstrings from modules (y/N) [n]: y > doctest: automatically test code snippets in doctest blocks (y/N) [n]: > intersphinx: link between Sphinx documentation of different projects (y/N) [n]: > todo: write "todo" entries that can be shown or hidden on build (y/N) [n]: > coverage: checks for documentation coverage (y/N) [n]: > pngmath: include math, rendered as PNG images (y/N) [n]: > mathjax: include math, rendered in the browser by MathJax (y/N) [n]: > ifconfig: conditional inclusion of content based on config values (y/N) [n]: > viewcode: include links to the source code of documented Python objects (y/N) [n]: y A Makefile and a Windows command file can be generated for you so that you only have to run e.g. make html' instead of invoking sphinx-build directly. > Create Makefile? (Y/n) [y]: > Create Windows command file? (Y/n) [y]: Creating file ./conf.py. Creating file ./index.rst. Creating file ./Makefile. Creating file ./make.bat. Finished: An initial directory structure has been created. You should now populate your master file ./index.rst and create other documentation source files. Use the Makefile to build the docs, like so: make builder where "builder" is one of the supported builders, e.g. html, latex or linkcheck. jemian@como-ubuntu64:/tmp/sandbox$ 

In case you missed them, these are the non-default answers supplied:

prompt response
> Project name: sandbox
> Author name(s): sandy
> Project version: test
> autodoc: automatically insert docstrings from modules (y/N) [n]: y
> viewcode: include links to the source code of documented Python objects (y/N) [n]: y

## Configure: Changes to conf.py¶

Edit the new file conf.py and add these two lines to the extensions list after line 28:

# this says \${PYTHONPATH)/sphinxcontrib/specdomain.py must be found
extensions.append('sphinxcontrib.specdomain')


If you wish, you can also change the html_theme from the default to sphinxdoc or agogo or one of the others. Check the Sphinx documentation for the choices. To change the theme, look on line 97 (or thereabouts) and change:

html_theme = 'default'


to:

html_theme = 'sphinxdoc'
`

Footnotes

 [1] The green check boxes correspond to the status of each item in the version control system.