# Formatting Documentation Most of Cantera's HTML documentation, with the exception of the C++ API documentation, is generated by [Sphinx](https://sphinx-doc.org). The C++ API documentation is generated using Doxygen. The content used to generate these pages comes from several sources: - [reStructuredText](https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html) documents (with the `.rst` extension), organized under the `doc/sphinx` subdirectory of the Cantera Git repository. - [MyST Markdown](https://myst-parser.readthedocs.io/en/latest/index.html) documents (with the `.md` extension), organized under the `doc/sphinx` subdirectory of the Cantera Git repository. - Docstrings extracted from the Python source code, which are used to generate the Python API docs. These docstrings are parsed as reStructuredText. - Docstrings extracted from the C++ source code, which are parsed by [Doxygen](https://www.doxygen.nl/manual/docblocks.html). These docstrings are formatted using Doxygen's syntax, which includes support for its own flavor of Markdown. - Markdown files, organized under the `doc/doxygen` subdirectory of the Cantera Git repository, processed using Doxygen's Markdown parser. This page provides some notes on useful syntax for writing in these various formats. ## Useful MyST syntax - Linking to a Python class: `[](#ThermoPhase)` - This only works if there isn't a Matlab class with the same name! - Linking to a Python class: ``` {py:class}`~cantera.Wall` ``` - The `~` removes the `cantera` prefix from the rendered link. - Linking to a C++ class: ``` {ct}`ThermoPhase` ``` - Linking to a Doxygen page: `link text` - The number of `../` required depends on how deep the source page is in the hierarchy - Linking to a Sphinx page: - `[](/absolute-subdir/docname)` (automatically get the text from `docname`'s title) - `[link text](relative-subdir/docname)` (explicitly specified link text) - source file extension is optional - Linking to examples: - ``` [`example_name.py`](/examples/python/subdir/example_name) ``` - Linking to a labeled section: - `[Build Commands](sec-build-commands)` - Labeling a section: Above the heading, write: - `(sec-label-name)=` - To cite as "according to Smith et al \[1999]": ``` according to {cite:t}`smith1999` ``` - To cite as "blah blah \[Smith et al 1999]": ``` blah blah {cite:p}`smith1999` ``` - Including code from a file (here, drawing directly from the Cantera source tree; the path is relative to the temporary build directory `build/doc/sphinx/develop/reactor-integration.md`; the number of `../` will vary for files that are at depths within the `sphinx` directory): ``` :::{literalinclude} ../../../../src/zeroD/ReactorNet.cpp :start-at: "void ReactorNet::updateState" :end-before: " ReactorNet::" :language: c++ ::: ``` ## Useful reST syntax reStructuredText is used in the docstrings for the Python package and in the comment blocks in the examples that are parsed by Sphinx Gallery. - Linking to a Sphinx label: - `` :ref:`sec-label-name` `` (automatic name) - `` :ref:`link text ` `` (specified link text) - Linking to a Sphinx page: - `` :doc:`/absolute/path` `` (automatic name) - Linking to examples: - `` :doc:`example_name.py ` `` - Caution on usage of single backticks versus double backticks -- the former are only for linking to things using the default role (that is, Python objects) ## Useful Doxygen syntax - Linking to a Sphinx page: `[link text](../reference/science/phasethermo/lattice.html)` - Citations: `@cite authorYYYY` will generate a numbered citation like `[8]`, assuming `authorYYYY` is a key in `doc/doxygen/cantera.bib`. - Equations can be added using LaTeX input bracketed by `@f[` and `@f]`. - In-line math expressions are enclosed by a pair of `@f$` directives, for example `@f$ \sin(x) @f$`.