# Sphinx RST Style guide¶

This page contains syntax rules, tips, and tricks for using Sphinx and reStructuredText. For more information, please see this comprehensive guide to reStructuredText, as well as the Sphinx reStructuredText Primer.

## Basic markup¶

A reStructuredText document is written in plain text. Without the need for complex formatting, one can be composed simply, just like one would any plain text document. For basic formatting, see this table:

 Format Syntax Output Italics *italics* (single asterisk) italics Bold **bold** (double asterisk) bold Monospace  monospace  (double back quote) monospace

Warning

Use of basic markup is not recommend! Where possible use sphinx inline directives to logically mark commands, parameters, options, input, and files. By using directives consistently these items can be styled appropriately.

## Lists¶

There are two types of lists, bulleted lists and numbered lists. A bulleted list looks like this:

• An item

• Another item

• Yet another item

This is accomplished with the following code:

* An item
* Another item
* Yet another item


A numbered list looks like this:

1. First item

2. Second item

3. Third item

This is accomplished with the following code:

#. First item
#. Second item
#. Third item


Note that numbers are automatically generated, making it easy to add/remove items.

## List-tables¶

Bulleted lists can sometimes be cumbersome and hard to follow. When dealing with a long list of items, use list-tables. For example, to talk about a list of options, create a table that looks like this:

Shapes

Description

Square

Four sides of equal length, 90 degree angles

Rectangle

Four sides, 90 degree angles

This is done with the following code:

.. list-table::
:widths: 20 80

* - Shapes
- Description
* - Square
- Four sides of equal length, 90 degree angles
* - Rectangle
- Four sides, 90 degree angles


## Page labels¶

Ensure every page has a label that matches the name of the file. For example if the page is named foo_bar.rst then the page should have the label:

..  _foo_bar:


Other pages can then link to that page by using the following code:

:ref:foo_bar


Links to other pages should never be titled as “here”. Sphinx makes this easy by automatically inserting the title of the linked document.

Good

To insert a link to an external website:

Text of the link <http://example.com>__


Warning

It is very easy to have two links with the same text resulting in the following error:

**(WARNING/2) Duplicate explicit target name:foo**


To avoid these warnings use of a double __ generates an anonymous link.

## Sections¶

Use sections to break up long pages and to help Sphinx generate tables of contents.

================================================================================
Document title
================================================================================

First level
-----------

Second level
++++++++++++

Third level
***********

Fourth level
~~~~~~~~~~~~


## Notes and warnings¶

When it is beneficial to have a section of text stand out from the main text, Sphinx has two such boxes, the note and the warning. They function identically, and only differ in their coloring. You should use notes and warnings sparingly, however, as adding emphasis to everything makes the emphasis less effective.

Here is an example of a note:

Note

This is a note.

This note is generated with the following code:

.. note:: This is a note.


Similarly, here is an example of a warning:

Warning

Beware of dragons.

This warning is generated by the following code:

.. warning:: Beware of dragons.


## Images¶

Add images to your documentation when possible. Images, such as screenshots, are a very helpful way of making documentation understandable. When making screenshots, try to crop out unnecessary content (browser window, desktop, etc). Avoid scaling the images, as the Sphinx theme automatically resizes large images. It is also helpful to include a caption underneath the image.:

.. figure:: image.png
:align: center

*Caption*


In this example, the image file exists in the same directory as the source page. If this is not the case, you can insert path information in the above command. The root / is the directory of the conf.py file.:

.. figure:: /../images/gdalicon.png


## External files¶

Text snippets, large blocks of downloadable code, and even zip files or other binary sources can all be included as part of the documentation.

To include link to sample file, use the download directive:

:download:An external file <example.txt>


The result of this code will generate a standard link to an external file

To include a the contents of a file, use literalinclude directive:

Example of :command:gdalinfo use:

.. literalinclude:: example.txt


Example of gdalinfo use:

Driver: GTiff/GeoTIFF
Size is 512, 512
Coordinate System is:
DATUM["North_American_Datum_1927",
SPHEROID["Clarke 1866",6378206.4,294.978698213901]],
PRIMEM["Greenwich",0],
UNIT["degree",0.0174532925199433]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",-117],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
UNIT["metre",1]]
Origin = (440720.000000,3751320.000000)
Pixel Size = (60.000000,-60.000000)
Corner Coordinates:
Upper Left  (  440720.000, 3751320.000) (117d38'28.21"W, 33d54'8.47"N)
Lower Left  (  440720.000, 3720600.000) (117d38'20.79"W, 33d37'31.04"N)
Upper Right (  471440.000, 3751320.000) (117d18'32.07"W, 33d54'13.08"N)
Lower Right (  471440.000, 3720600.000) (117d18'28.50"W, 33d37'35.61"N)
Center      (  456080.000, 3735960.000) (117d28'27.39"W, 33d45'52.46"N)
Band 1 Block=512x16 Type=Byte, ColorInterp=Gray


The literalinclude directive has options for syntax highlighting, line numbers and extracting just a snippet:

Example of :command:gdalinfo use:

.. literalinclude:: example.txt
:language: txt
:linenos:
:emphasize-lines: 2-6
:start-after: Coordinate System is:
:end-before: Origin =


## Reference files and paths¶

Use the following syntax to reference files and paths:

:file:myfile.txt


This will output: myfile.txt.

You can reference paths in the same way:

:file:path/to/myfile.txt


This will output: path/to/myfile.txt.

For Windows paths, use double backslashes:

:file:C:\\myfile.txt


This will output: C:\myfile.txt.

If you want to reference a non-specific path or file name:

:file:{your/own/path/to}/myfile.txt


This will output: your/own/path/to/myfile.txt

## Reference commands¶

Reference commands (such as gdalinfo) with the following syntax:

:program:gdalinfo


Use option directive for command line options:

.. option:: -json

Display the output in json format.


Use describe to document create parameters:

.. describe:: WORLDFILE=YES

Force the generation of an associated ESRI world file (with the extension .wld).