An example Jupyter Notebook#
This notebook is a demonstration of directly-parsing Jupyter Notebooks into Sphinx using the MyST parser.
Markdown#
Configuration#
https://myst-parser.readthedocs.io/en/latest/using/intro.html#getting-started
To build documentation from this notebook, the following options are set:
myst_enable_extensions = [
"amsmath",
"colon_fence",
"deflist",
"dollarmath",
"html_image",
]
myst_url_schemes = ("http", "https", "mailto")
Syntax#
As you can see, markdown is parsed as expected. Embedding images should work as expected. For example, here’s the MyST-NB logo:


By adding "html_image" to the myst_enable_extensions list in the sphinx configuration (see here), you can even add HTML img tags with attributes:
<img src="../img/unitary_foundation_logo.png" alt="logo" width="200px" class="shadow mb-2">
Because MyST-NB is using the MyST-markdown parser, you can include rich markdown with Sphinx in your notebook. For example, here’s a note admonition block:
Note
Wow, a note! It was generated with this code (as explained here):
:::{note}
**Wow**, a note!
:::
If you wish to use “bare” LaTeX equations, then you should add "amsmath" to the myst_enable_extensions list in the sphinx configuration.
This is explained here, and works as such:
\begin{equation}
\frac {\partial u}{\partial x} + \frac{\partial v}{\partial y} = - \, \frac{\partial w}{\partial z}
\end{equation}
\begin{align*}
2x - 5y &= 8 \\
3x + 9y &= -12
\end{align*}
Also you can use features like equation numbering and referencing in the notebooks:
$$e^{i\pi} + 1 = 0$$ (euler)
Euler’s identity, equation (2), was elected one of the most beautiful mathematical formulas.
You can see the syntax used for this example here in the MyST documentation.
Code cells and outputs#
You can run cells, and the cell outputs will be captured and inserted into the resulting Sphinx site.
__repr__ and HTML outputs#
For example, here’s some simple Python:
import matplotlib.pyplot as plt
import numpy as np
data = np.random.rand(3, 100) * 100
data[:, :10]
array([[ 5.53795308, 35.03617076, 87.79551013, 62.5419711 , 58.62952678,
33.49884177, 17.39910313, 59.85368359, 77.89795375, 62.78131658],
[99.18851813, 31.62435046, 24.92921631, 28.9291576 , 80.80322318,
4.89112715, 90.37135984, 34.53425707, 88.22927572, 16.15841829],
[78.86645182, 8.40729962, 48.85661754, 49.83364222, 17.38035801,
63.73025871, 52.17267352, 42.01727291, 15.73882017, 55.99348775]])
This will also work with HTML outputs
import pandas as pd
df = pd.DataFrame(data.T, columns=['a', 'b', 'c'])
df.head()
| a | b | c | |
|---|---|---|---|
| 0 | 5.537953 | 99.188518 | 78.866452 |
| 1 | 35.036171 | 31.624350 | 8.407300 |
| 2 | 87.795510 | 24.929216 | 48.856618 |
| 3 | 62.541971 | 28.929158 | 49.833642 |
| 4 | 58.629527 | 80.803223 | 17.380358 |
as well as math outputs
from IPython.display import Math
Math(r"\sum_{i=0}^n i^2 = \frac{(n^2+n)(2n+1)}{6}")
This works for error messages as well:
print("This will be properly printed...")
print(thiswont)
This will be properly printed...
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
Cell In[4], line 2
1 print("This will be properly printed...")
----> 2 print(thiswont)
NameError: name 'thiswont' is not defined
Images#
Images that are generated from your code (e.g., with Matplotlib) will also be embedded.
fig, ax = plt.subplots()
ax.scatter(*data, c=data[2])
<matplotlib.collections.PathCollection at 0x71a427aa3e60>
Thumbnail for the Notebook#
To add a thumbnail for an example notebook, first add the thumbnail image file to docs/source/_thumbnails. Next, modify the docs/source/conf.py to include the example and thumbnail in the nbsphinx_thumbnails dictionary at the end of the file. The sample below contains both a generic template and an actual example.
nbsphinx_thumbnails = {
"examples/{EXAMPLE_FILENAME_WITHOUT_.md}": "_static/{THUMBNAIL_FILENAME_WITH_EXTENSION}",
"examples/hamiltonians": "_static/vqe-cirq-pauli-sum-mitigation-plot.png"
}