code-block¶
Code examples blocks with code-block offers much more options that plain literal-block. It allows syntax highlighting, line numbering, emphasis particular lines and using captions.
Basic usage¶
Basic usage of code-block is as simple as:
1.. code-block::
2
3 i = 256 + 256
4 print('The value of i is', i)
i = 256 + 256
print('The value of i is', i)
Syntax highlighting¶
Set language to highlight as the directive argument, i.e. .. code-block:: language
.
1.. code-block:: python3
2
3 i = 256 + 256
4 print('The value of i is', i)
i = 256 + 256
print('The value of i is', i)
Syntax highlighting uses library Pygments. Pygments calls supported highlight languages as lexers and it has a lexer for almost any language you might imagine - just use python
(Python 2), python3
, java
, javascript
, c++
, html
, json
, … as a code-block argument.
tip:: If you don’t want any highlighting, use none or text.
See Pygments’s available lexers page for exhaustive reference. Argument for code-block is one of “short names” (the look of webpage at the time of writing):
Line numbering¶
code-block example can be automatically line numbered by :linenos:
option.
1.. code-block::
2 :linenos:
3
4 i = 256 + 256
5 print('The value of i is', i)
1i = 256 + 256
2print('The value of i is', i)
Emphasising lines¶
With :emphasize-lines:
you can highlight one or more lines.
Important
Only non-empty lines are counted. For example, the following snippet we want to actually highlight line 8, but skipping two empty lines it is :emphasize-lines: 6
.
1.. code-block::
2 :emphasize-lines: 6
3
4 $ make gettext
5
6 $ cd _build/gettext
7
8 $ ls
9 calling.pot
10 configuration.pot
11 constdata.pot
12 glossary.pot
13 index.pot
14 ...
$ make gettext
$ cd _build/gettext
$ ls
calling.pot
configuration.pot
constdata.pot
glossary.pot
index.pot
...
Complex example¶
You can combine all possibilities together, indeed.
1.. code-block:: python3
2 :caption: The ``print()`` function.
3 :emphasize-lines: 2
4 :linenos:
5
6 i = 256 + 256
7 print('The value of i is', i)
1i = 256 + 256
2print('The value of i is', i)
Common issues¶
Always specify highlight language¶
Code-block highlight even if you don’t specify a language. It is not “autodetect” or “none” (plain text) as you might expect.
.. code-block::
Nobody knows what highlight language will be used.
Usually default highlight mode for Sphinx is python3
. It’s better to always specify language with every code-block or turn off syntax highlighting in conf.py
with:
highlight_language = 'none'
See more at Techwriter at work blog.