=========== Sphinx Role =========== Using a combination of information from `Sphinx substitutions `_ and `Stackoverflow `_, we can create a custom section for part of our text. This only works for one instance, which can be used as often as you like. Sphinx Setup ============= Assuming we have a modern Sphinx layout, but it also works on the older layout:: Application ├──docs │ ├──build │ ├──source │ │ ├──_static │ │ │ ├──css │ │ │ └──fonts │ │ ├──_templates │ │ ├──app files │ │ ├──conf.py │ │ └──index-rst │ │ │ ├──make.bat │ └──Makefile │ └──README.md This shows a simplified modern layout - we are mostly involved in the *source* folder - use the *css* folder to store our scripts and the *fonts* folder to store custom fonts. *conf.py* is the central file where any changes to the configuration and methods are made. Customising Parts of Sphinx ============================ Normally all the fonts and sizes are handled by the sphinx theme. Each part of sphinx is covered and we have no normal methods to change a part of the text apart from standard sphinx methods - in our case using rst. This method allows us to use a font using standard css rules within our custom style file, *custom.css* found within the *css* folder:: @font-face { font-family: "Kingofthieves"; src: url((../fonts/Kingofthieves-v6mL.ttf); } The font was in the *fonts* folder and required the relative path between the folders *css* and *fonts*. This font is now available to custom.css. Now add our instructions on how it should be rendered:: .keys { font-family: "Kingofthieves"; font-size: 60px; color: #ff073a; text-shadow: 0 0 3px #ccff02; } We are using a class *keys* preceded with a full stop. In this case we want to use our custom font, with its size, color and text shadow. Now to make it work *conf.py* must be configured. Ensure that the following two lines exist in *conf.py*:: html_static_path = ['_static'] html_css_files = ['css/custom.css'] All this does is tell *conf.py* where to find our custom style file and its name. Now to tell *conf.py* what to do:: rst_prolog = f""" .. role:: AL :class: keys """ We have added an rst role called *AL* and it will use the input from our custom class *keys*, which *conf.py* knows is in our custom script. All we have to do is call up *AL* together with the text that requires altering:: :AL:`Frothy Brew` Our text is enclosed in single backward pointing inverted commas. Unfortunately as there is only one *rst_prolog* role we are limited in our actions. To see this in action :ref:`my-reference-label`.