Giter Site home page Giter Site logo

nikstoyanov / nb_hugo_exporter Goto Github PK

View Code? Open in Web Editor NEW

This project forked from jbandlow/nb_hugo_exporter

0.0 1.0 0.0 48 KB

Jupyter notebook exporter to a Markdown format suitable for use with Hugo

License: MIT License

Python 91.53% Smarty 7.53% HTML 0.95%

nb_hugo_exporter's Introduction

Export Notebooks To Hugo Compatible Markdown

Basic Installation and Use

pip install nbhugoexporter

will install the exporter. You will also need to add some shortcode definitions to Hugo. You can customize these as you wish, but an easy way to get started is to run the following from the root of your Hugo project:

mkdir -p layouts/shortcodes
for x in cell input; do for y in start end;
  do curl -L https://github.com/jbandlow/nb_hugo_exporter/raw/master/resources/jupyter_$x\_$y.html > layouts/shortcodes/jupyter_$x\_$y.html;
done; done;

You can then run the exporter with

python3 -m nbconvert path/to/nb_file.ipynb --to hugo --output-dir content/path/insert-title-here

This will create a content/path/insert-title-here directory with an index.md file derived from nb_file.ipynb. The generated metadata will include

---
title: Nb File
date: <last file modification time for nb_file.ipynb>
draft: True
...
---

along with any other metadata you've specified. To set metadata, go to Edit -> Edit Notebook Metadata from within your notebook, and add

"hugo": {
  "key1": value1,
  ...
}

with whatever keys and values you wish. The title value will default to the notebook filename with snake_case replaced by Initial Caps. All auto-generated values (title, date, and draft) can be overridden in the notebook metadata.

The resulting markdown will contain the following hugo shortcodes:

{{% jupyter_cell_start [cell_type] }}
{{% jupyter_input_start }}
...
{{% jupyter_input_end }}
...
{{% jupyter_cell_end }}

in the places you'd expect. [cell_type] is the Jupyter cell type, e.g., markdown, code, etc. Code itself will have GitHub style code fences:

```python
import this
```

Set pygmentsCodeFences to true in your Hugo configuration file to use a syntax highlighter. See the hugo documentation for much more on this.

You may also want to enable the noEmptyLineBeforeBlock BlackFriday extension. Markdown in Jupyter is processed as though this setting were enabled.

CSS configuration

You may also want to configure your CSS. The main design goal for this project was to generate markdown that could be styled to my particular tastes. The shortcodes are simply used to generate divs, and the corresponding classes are then easy to style. With the shortcodes in this repo, the resulting HTML looks like:

<div class="jupyter-cell [cell_type]">
  <div class="jupyter-input"> ... </div>
  ...
</div>

In concert with styling the syntax highlighter, this can be made to look more or less like Jupyter's own theme, or like anything else you wish. Note that the exporter currently adds some unnecessary blank lines. These can be cleaned up with

.jupyter-cell p:empty { display: none; }

Latex

Finally, for LaTeX to render properly, you should include the MathJax script on your pages. Note that nbconvert --to hugo solves the underscore problem with the "tedious" solution of simply quoting all underscores in math mode. So there is no need for the MathJax configuration script that "fixes <code> tags" in your Javascript, or the custom CSS described in that post.

That's it! Happy blogging with Jupyter notebooks and Hugo.

Acknowledgements

Shout-out to the amazing Hugo, and Jupyter teams for building incredible tools.

For another approach to this issue, see hugo-jupyter, from Stephan Fitzpatrick. This didn't fully fit my needs, but it might fit yours.

nb_hugo_exporter's People

Contributors

jbandlow avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.