Writing Shark Tutorials¶
So you want to write a tutorial or a similar prose documentation text. Simply do the following:
Look at the header menu of this page. Decide in which section your document should appear. For example, the “About Shark” section.
Navigate to your Shark base directory. From there to
doc/sphinx_pages/rest_sources, and then into the subdirectory that corresponds to the site section you chose in the previous step. For example,$SHARKHOME/doc/sphinx_pages/rest_sources/about_shark.Create an empty file with a meaningful name for your new document, ending on
.rst. For example,new_text.rst.Write your documentation text in the reStructuredText markup language. See the original documentation here and the primer included in the Sphinx documentation there. In addition to the standard syntax, Sphinx adds special markup constructs. Alternatively, navigate to an existing html file on the Shark homepage, press “Show page source” on the right and copy along.
Almost finished! We only need to “register” your new document with the Sphinx system. Usually this is done by adding the relative path to the
toctreedirective at the top of$SHARKHOME/doc/sphinx_pages/index.rst. In our example, we’d add the linerest_sources/about_shark/new_text
to the top of
index.rst. In very rare cases, the page is included locally from another sub-page. Note that the page will only be included in the Sphinx navigation tree if a toctree directive on the top of the page is used, so exploit this peculiarity consciously.If you want to look at your page, do a
make htmlin$SHARKHOME/doc/sphinx_pagesor amake docin$SHARKHOME. Some warnings about non-included documents are expected (unrelated: in rare cases amake clean htmlseems to be necessary). Then open$SHARKHOME/doc/sphinx_pages/build/html/rest_sources/about_shark/new_text.htmlin your browser – done!
.tut and .tpp files¶
In order to synchronize tutorials and corresponding source code files,
we introduced a simple, but effective mechanism. Instead of a
.cpp source files and a .rst files referring to them, we
maintain .tpp source files and a .tut files, respectively.
A .tpp file is a source file with additional tags for source code
blocks, for example in RFTutorial.tpp:
//###begin<includes>
#include <shark/Data/Csv.h> //importing the file
#include <shark/Algorithms/Trainers/RFTrainer.h> //the random forest trainer
#include <shark/ObjectiveFunctions/Loss/ZeroOneLoss.h> //zero one loss for evaluation
//###end<includes>
A .tut file can refer to such blocks:
..sharkcode<Supervised/RFTutorial.tpp,includes>
The Shark build system automatically extracts these blocks and
produces stripped .cpp source files, where the tags are removed,
and .rst files. In the latter, the references are replaced by the
corresponding source code blocks.
Formatting requirements and conventions¶
Ideally, the following formatting conventions apply to tutorial .rst sources:
Do not use the h1 heading underline symbol twice, it will look ugly in the document.
Each document needs at least one other heading after/besides the h1 heading.
Ideally, use the following symbols for the different heading levels (almost aligning with the official Python documentation except skipping
=to avoid confusion with tables):h1headings use#h2headings use*h3headings use-h4headings use^
Unfortunately, this convention is followed in close to none of the current tutorials. But it cannot be wrong to have a convention, right?
Do not reference doxygen class names in headings (via the
:doxy:role). Also, do not include inline-code-markup (like so– source:``like so``) within headings. Instead, use a single'(not a`).If you add new pages to the tutorials, first decide what the correct new order should be. Then add the new tutorial in that order both to the index.rst and the tutorials.rst page. In other words, all tutorials should appear in the same order in both files.
Linking to other pages¶
Here’s an internal link (here, to the tutorials): Tutorials
The syntax for this link was: :doc:`tutorials`,
also see the sphinx documentation.
Here we link to a simple plain text file which we stored in a central place (but could also reside anywhere relative
to this document, and it gets copied automagically): a plain file. The code for
this link was :download:`a plain file </static/text_files/test.txt>`
You can link to the outside world like this: Shark uses CMake. The markup
for this link was `CMake <http://www.cmake.org/>`_.
