281 lines
8.4 KiB

.. highlight:: rst
Markup Style Guide
.. Editor's Note:
There are many detailed conventions, e.g:
- When definition lists/bullet-points are used.
- Word-ordering in filenames.
- How text is wrapped.
- The number of spaces between lines.
- When it is/is not okay to add in Unicode characters.
- Should comments on a page be above or below titles :)
Having a lot of detailed text on this page is off-putting to new contributors,
so please avoid making this page into a wall-of-text,
many conventions can be noticed along the way by reading existing text.
This page covers the conventions for writing and use of the reStructuredText (RST) markup syntax.
- Three space indentation.
- Lines should be less than 120 characters long.
- Use italics for button/menu names.
Other loose conventions:
- Avoid Unicode characters.
- Avoid heavily wrapped text
(i.e. sentences can have their own lines).
.. code-block:: rst
Document Part
Document Chapter
Document Section
Document Subsection
Document Subsubsection
Document Paragraph
.. note:: *Parts* should only be used for contents or index pages.
.. note:: Each ``.rst`` file should only have one chapter heading (``*``) per file.
Text Styling
See the `overview on ReStructuredText <>`__
for more information on how to style the various elements of the documentation and
on how to add lists, tables, pictures and code blocks.
The `Sphinx reference <>`__ provides
more insight additional constructs.
The following are useful markups for text styling::
Interface Elements
- ``:kbd:`LMB``` -- keyboard and mouse shortcuts.
- ``*Mirror*`` -- interface labels.
- ``:menuselection:`3D Viewport --> Add --> Mesh --> Monkey``` -- menus.
Code Samples
There is support for syntax highlighting if the programming language is provided,
and line numbers can be optionally shown with the ``:linenos:`` option::
.. code-block:: python
import bpy
def some_function():
Figures should be used to place images::
.. figure:: /images/interface_window-system_splash_current.png
Image caption.
For consistency, and since it would be good to ensure screenshots are
all a similar size when floated next to text,
writers should take screenshots in the following manner:
#. Prepare the area you would like to capture making sure to use the default theme and setting.
(In some cases you may not want to use the default settings e.g. if some options are hidden behind a checkbox.)
#. Zoom to the maximum zoom level (hold :kbd:`NumpadPlus` or :kbd:`Ctrl-MMB` or similar).
#. Zoom out eight zoom levels (:kbd:`NumpadMinus` -- eight times).
#. In some cases you will want to leave a small margin around the thing you are trying to capture.
This should be around 30px but does not have to be exact.
This can be applied to several parts of the interface but might not work for all cases.
No Caps, No Gaps
Lower case filenames underscore between words.
Sort Usefully
Order naming with specific identifiers at the end.
Use ``.png`` for images that have solid colors such as screenshots of the Blender interface,
and ``.jpg`` for images with a high amount of color variance, such as sample renders and photographs.
Do not use animated ``.gif`` files, these are hard to maintain, can be distracting
and are usually large in file size. Instead use a video if needed (see `Videos`_ below).
Place the image in the ``manual/images`` folder. Use no other subfolders.
For naming files use underscores to separate chapters and sections,
and use dashes to separate sections that are two or more words.
So for image files should look like: ``chapter_subsection_sub-subsection_id.png``, e.g:
- ``interface_splash_current.png``
- ``interface_undo-redo_last.png``
- ``interface_undo-redo_repeat-history-menu.png``
Do not use special characters or spaces!
Usage Guides
- Avoid specifying the resolution of the image,
so that the theme can handle the images consistently
and provide the best layout across different screen sizes.
- When documenting a panel or section of the UI,
it is better to use a single image that shows all of the relevant areas
(rather than multiple images for each icon or button)
placed at the top of the section you are writing,
and then explain the features in the order that they appear in the image.
.. note::
It is important that the manual can be maintained long term,
UI and tool options change so try to avoid having a lot of images
(when they are not especially necessary).
Otherwise, this becomes too much of a maintenance burden.
Videos can be embedded from Blender's self-hosted `PeerTube <>`__ instance
which can be found at ` <>`__.
To embed a video using the following directive::
.. peertube:: ID
The ``ID`` is found in the video's URL, e.g:
The ID for ````
is ``47448bc1-0cc0-4bd1-b6c8-9115d8f7e08c``.
To get a new video uploaded, contact
a `Documentation Project Administrator <>`__ or
include the uploaded video in your :doc:`Pull Request </contribute/pull_requests>` description.
Usage Guides
- Avoid adding videos that rely on voice or words, as this is difficult to translate.
- Do not embed video tutorials as a means of explaining a feature, the writing itself should explain it adequately.
(Though you may include a link to the video at the bottom of the page under the heading ``Tutorials``).
Useful Constructs
- ``|BLENDER_VERSION|`` -- Resolves to the current Blender version.
- ``:abbr:`SSAO (Screen Space Ambient Occlusion)``` --
Abbreviations display the full text as a tooltip for the reader.
- ``:term:`Manifold``` -- Links to an entry in the :doc:`Glossary </glossary/index>`.
Cross References and Linkage
You can link to another document in the manual with::
:doc:`The Title </section/path/to/file>`
To link to a specific section in another document (or the same one), explicit labels are available::
.. _sample-label:
[section or image to reference]
Some text :ref:`Optional Title <sample-label>`
Linking to a title in the same file::
Titles are Targets
Body text.
Implicit references, like `Titles are Targets`_
Linking to the outside world::
`Blender Website <>`__
Context Sensitive Manual Access
It is possible to link to a specific part of the manual from in Blender by opening
the context menu (right click) of a property or operator and selecting *Online Manual*.
In order for this to work, this needs to be accounted for in the documentation.
To link a property or operator to a specific part of the manual you need to add
an external reference link tag whose ID matches Blender's RNA tag.
The easiest way to find out what the tag for a property is to open the context menu of
the property/operator and select *Online Python Reference* to extract the tag from the URL.
Some examples of how this looks in the RST document are given below::
.. _bpy.types.FluidDomainSettings.use_fractions:
Fractional Obstacles
Enables finer resolution in fluid / obstacle regions (second order obstacles)...
.. _bpy.types.FluidDomainSettings.fractions_distance:
Obstacle Distance
Determines how far apart fluid and obstacles are...
For an operator::
.. _bpy.ops.curve.subdivide:
Further Reading
To learn more about reStructuredText, see:
`Sphinx RST Primer <>`__
Good basic introduction.
`Docutils reStructuredText Reference <>`__
Links to reference and user documentation.