RST cheat sheet

Headings

For each formatting line (e.g., ===), write as many symbols (=) as there are characters in the header.
The symbols used for the formatting are, in fact, not important. Only the order in which they are written matters, as it determines the size of the decorated heading. This means that you may encounter different heading formatting and in a different order, in which case you should follow the formatting in place in the document. In any other case, use the formatting shown below.

Heading size

Formatting

H1

=======
Heading
=======

H2

Heading
=======

H3

Heading
-------

H4

Heading
~~~~~~~

H5

Heading
*******

H6

Heading
^^^^^^^

Important

Each document must have exactly one H1 heading. No less, no more.

Markups

Emphasis (italic)

To emphasize a part of the text. The text is rendered in italic.

Fill out the information before saving the form.

Fill out the information *before* saving the form.

Strong emphasis (bold)

To emphasize a part of the text. The text is rendered in bold.

A subdomain is a domain that is a part of another domain.

A **subdomain** is a domain that is a part of another domain.

Technical term (literal)

To write a technical term or a specific value to insert. The text is rendered in literal.

Insert the IP address of your printer, for example, 192.168.1.25.

Insert the IP address of your printer, for example, `192.168.1.25`.

Definitions

Use the dfn markup to define a term.

The documentation is written in RST and needs to be built (converted to HTML) to display nicely.

The documentation is written in RST and needs to be built (:dfn:`converted to HTML`) to display
nicely.

Abbreviations

Use the abbr markup to write a self-defining abbreviation that is displayed as a tooltip.

Odoo uses OCR and artificial intelligence technologies to recognize the content of the documents.

Odoo uses :abbr:`OCR (optical character recognition)` and artificial intelligence technologies to
recognize the content of the documents.

GUI element

Use the guilabel markup to identify any text of the interactive user interface (e.g., button labels, view titles, field names, lists items, …).

Update your credentials, then click on Save.

Update your credentials, then click on :guilabel:`Save`.

File

Use the file markup to indicate a file path or name.

Create redirections with the redirects.txt file at the root of the repository.

Create redirections with the :file:`redirects.txt` file at the root of the repository.

Command

Use the command markup to highlight a command.

Run the command make clean html to delete existing built files and build the documentation to HTML.

Run the command :command:`make clean html` to delete existing built files and build the
documentation to HTML.

Lists

Bulleted list

  • This is a bulleted list.

  • It has two items, the second item uses two lines.

- This is a bulleted list.
- It has two items, the second
  item uses two lines.

Numbered list

  1. This is a numbered list.

  2. Numbering is automatic.

#. This is a numbered list.
#. Numbering is automatic.
  1. Use this format to start the numbering with a number other than one.

  2. The numbering is automatic from there.

6. Use this format to start the numbering
   with a number other than one.
#. The numbering is automatic from there.

Astuce

Prefer the use of autonumbered lists with #. for better code resilience.

Nested lists

  • This is the first item of a bulleted list.

    1. It has a nested numbered list

    2. with two items.

- This is the first item of a bulleted list.

  #. It has a nested numbered list
  #. with two items.

Custom anchors

Custom anchors follow the same syntax as external hyperlink aliases but without any URL. Indeed, they are internal. They allow referencing a specific part of a document by using the target as an anchor. When the user clicks on the reference, the documentation scrolls to the part of the page containing the anchor.

The definition syntax is: .. _target:
There are two ways to reference them, both using the ref markup:
  1. :ref:`target` creates a hyperlink to the anchor with the heading defined below as label.

  2. :ref:`label <target>` creates a hyperlink to the anchor with the given label.

See Use relative links for internal URLs to learn how to write proper relative links for internal references.

Note

  • Custom anchors can be referenced from other files than the ones in which they are defined.

  • Notice that there is no _ at the end, contrary to what is done with external hyperlinks.

This can easily be done by creating a new product, see How to create a product? for additional help.

How to create a product?

As explained at the start of the page, …

.. _sales/quotation/start-of-page:

This can easily be done by creating a new product, see :ref:`product` for additional help.

.. _sales/quotation/product:

How to create a product?
========================

As explained at the :ref:`start of the page <sales/quotation/start-of-page>`, ...

Images

The image markup allows inserting images in a document.

Create an invoice.
.. image:: rst_cheat_sheet/create-invoice.png
   :align: center
   :alt: Create an invoice.

Astuce

Add the :class: o-no-modal option to an image to prevent opening it in a modal.

Alert blocks (admonitions)

Seealso

.. seealso::
   - :doc:`customer_invoices`
   - `Pro-forma invoices <../sales/sales/invoicing/proforma.html#activate-the-feature>`_

Note

Note

Use this alert block to grab the reader’s attention about additional information.

.. note::
   Use this alert block to grab the reader's attention about additional information.

Pourboire

Astuce

Use this alert block to inform the reader about a useful trick that requires an action.

.. tip::
   Use this alert block to inform the reader about a useful trick that requires an action.

Exemple

Example

Use this alert block to show an example.

.. example::
   Use this alert block to show an example.

Exercise

Exercise

Use this alert block to suggest an exercise to the reader.

.. exercise::
   Use this alert block to suggest an exercise to the reader.

Important

Important

Use this alert block to notify the reader about important information.

.. important::
   Use this alert block to notify the reader about important information.

Avertissement

Avertissement

Use this alert block to require the reader to proceed with caution with what is described in the warning.

.. warning::
   Use this alert block to require the reader to proceed with caution with what is described in the
   warning.

Danger

Danger

Use this alert block to bring the reader’s attention to a serious threat.

.. danger::
   Use this alert block to bring the reader's attention to a serious threat.

Custom

Title

Customize this alert block with a Title of your choice.

.. admonition:: Title

   Customize this alert block with a **Title** of your choice.

Tables

List tables

List tables use two-level bulleted lists to convert data into a table. The first level represents the rows and the second level represents the columns.

Name

Country

Favorite color

Raúl

Montenegro

Purple

Mélanie

France

Red

.. list-table::
   :header-rows: 1
   :stub-columns: 1

   * - Name
     - Country
     - Favorite colour
   * - Raúl
     - Montenegro
     - Purple
   * - Mélanie
     - France
     - Turquoise

Grid tables

Grid tables represent the rendered table and are more visual to work with.

Shirts

T-shirts

Available colours

Purple

Green

Turquoise

Orange

Sleeves length

Long sleeves

Short sleeves

+-----------------------+--------------+---------------+
|                       | Shirts       | T-shirts      |
+=======================+==============+===============+
| **Available colours** | Purple       | Green         |
|                       +--------------+---------------+
|                       | Turquoise    | Orange        |
+-----------------------+--------------+---------------+
| **Sleeves length**    | Long sleeves | Short sleeves |
+-----------------------+--------------+---------------+

Astuce

  • Use = instead of - to define header rows.

  • Remove - and | separators to merge cells.

  • Make use of this convenient table generator to build your tables. Then, copy-paste the generated formatting into your document.

Code blocks

def main():
    print("Hello world!")
.. code-block:: python

   def main():
       print("Hello world!")

Content tabs

Prudence

The tabs markup may not work well in some situations. In particular:

Basic tabs

Basic tabs are useful to split the content into multiple options. The tabs markup is used to define sequence of tabs. Each tab is then defined with the tab markup followed by a label.

Content dedicated to Odoo Online users.

.. tabs::

   .. tab:: Odoo Online

      Content dedicated to Odoo Online users.

   .. tab:: Odoo.sh

      Alternative for Odoo.sh users.

   .. tab:: On-premise

      Third version for On-premise users.

Nested tabs

Tabs can be nested inside one another.

The closest star to us.

.. tabs::

   .. tab:: Stars

      .. tabs::

         .. tab:: The Sun

            The closest star to us.

         .. tab:: Proxima Centauri

            The second closest star to us.

         .. tab:: Polaris

            The North Star.

   .. tab:: Moons

      .. tabs::

         .. tab:: The Moon

            Orbits the Earth.

         .. tab:: Titan

            Orbits Jupiter.

Group tabs

Group tabs are special tabs that synchronize based on a group label. The last selected group is remembered and automatically selected when the user returns to the page or visits another page with the tabs group. The group-tab markup is used to define group tabs.

C++

int main(const int argc, const char **argv) {
    return 0;
}
.. tabs::

   .. group-tab:: C++

      C++

   .. group-tab:: Python

      Python

   .. group-tab:: Java

      Java

.. tabs::

   .. group-tab:: C++

      .. code-block:: c++

         int main(const int argc, const char **argv) {
             return 0;
         }

   .. group-tab:: Python

      .. code-block:: python

         def main():
             return

   .. group-tab:: Java

      .. code-block:: java

         class Main {
             public static void main(String[] args) {}
         }

Code tabs

Code tabs are essentially group tabs that treat the content as a code block. The code-tab markup is used to define a code tab. Just as for the code-block markup, the language defines the syntax highlighting of the tab. If set, the label is used instead of the language for grouping tabs.

#include <iostream>

int main() {
    std::cout << "Hello World";
    return 0;
}
.. tabs::

   .. code-tab:: c++ Hello C++

      #include <iostream>

      int main() {
          std::cout << "Hello World";
          return 0;
      }

   .. code-tab:: python Hello Python

      print("Hello World")

   .. code-tab:: javascript Hello JavaScript

      console.log("Hello World");

Document metadata

Sphinx supports document-wide metadata markups that specify a behavior for the entire page.
They must be placed between colons (:) at the top of the source file.

Metadata

Purpose

show-content

Make a toctree page accessible from the navigation menu.

show-toc

Show the table of content on a page that has the show-content metadata markup.

code-column

Show a dynamic side column that can be used to display interactive tutorials or code excerpts.

hide-page-toc

Hide the « On this page » sidebar and use full page width for the content.

custom-css

Link CSS files (comma-separated) to the document.

custom-js

Link JS files (comma-separated) to the document.

classes

Assign the specified classes to the <main/> element of the document.

orphan

Suppress the need to include the document in a toctree.

nosearch

Exclude the document from search results.

Formatting tips

Break the line but not the paragraph

A first long line that you break in two -> here <- is rendered as a single line.
A second line that follows a line break.
| A first long line that you break in two
  -> here <- is rendered as a single line.
| A second line that follows a line break.

Escape markup symbols (Advanced)

Markup symbols escaped with backslashes (\) are rendered normally. For instance, this \*\*line of text\*\* with \*markup\* symbols is rendered as “this **line of text** with *markup* symbols”.

When it comes to backticks (`), which are used in many cases such as external hyperlinks, using backslashes for escaping is no longer an option because the outer backticks interpret enclosed backslashes and thus prevent them from escaping inner backticks. For instance, `\`this formatting\`` produces an [UNKNOWN NODE title_reference] error. Instead, ```this formatting``` should be used to produce the following result: `this formatting`.