a post with jupyter notebook
To include a jupyter notebook in a post, you can use the following code:
{::nomarkdown}
{% assign jupyter_path = 'assets/jupyter/blog.ipynb' | relative_url %}
{% capture notebook_exists %}{% file_exists assets/jupyter/blog.ipynb %}{% endcapture %}
{% if notebook_exists == 'true' %}
{% jupyter_notebook jupyter_path %}
{% else %}
<p>Sorry, the notebook you are looking for does not exist.</p>
{% endif %}
{:/nomarkdown}
Let’s break it down: this is possible thanks to
Jekyll Jupyter Notebook plugin
that allows you to embed jupyter notebooks in your posts. It
basically calls
jupyter nbconvert --to html
to convert the notebook to an html page and then includes it in
the post. Since
Kramdown
is the default Markdown renderer for Jekyll, we need to surround
the call to the plugin with the
::nomarkdown
tag so that it stops processing this part with Kramdown and
outputs the content as-is.
The plugin takes as input the path to the notebook, but it assumes
the file exists. If you want to check if the file exists before
calling the plugin, you can use the
file_exists
filter. This avoids getting a 404 error from the plugin and ending
up displaying the main page inside of it instead. If the file does
not exist, you can output a message to the user. The code
displayed above outputs the following:
Note that the jupyter notebook supports both light and dark themes.