IPython
Markdown cells can format
LaTeX math expressions between $...$
(inline) or
$$...$$
(block) delimiters. This works great when editing and viewing within a
Jupyter process. However, when converting the source *.ipynb
file
to HTML using the otherwise excellent notebookjs package the math
expressions do not appear -- notebookjs
does not currently support expansion of $...$
and $$...$$
expressions into math HTML renderings.
NOTE: currently the delimiters are hard–coded. Customizing this is work for a future release.
This NPM package provides a simple filter for IPython
source which when run before
notebookjs
's render
process will properly generate inline and block math HTML expressions using the
KaTeX package. I use this to perform server-side math expression rendering for
my blog, Keystroke Countdown. The post
Metalsmith Plugins for Server-side KaTeX Processing
talks about the implementation of this package as well as a Remarkable plugin that does similar processing for Markdown
text.
Install this package using npm
:
% npm install [-s] notebookjs-katex
Assuming you already have notebookjs
installed, one way for using this would like so, just prior to using
notebookjs
to parse and render HTML:
var KatexFilter = require("notebookjs-katex");
var kf = new KatexFilter();
var ipynb = JSON.parse(fs.readFileSync('/path/to/notebook.ipynb'));
kf.expandKatexInNotebook(ipynb);
var notebook = notebookjs.parse(ipynb);
var html = notebook.render().outerHTML;
The KatexFilter
constructor takes an optional configuration object which will be given to the KaTeX render
method. See the docs for details. Note that KatexFilter
always sets throwOnError
to false
, and displayMode
will be set depending on the delimiters surrounding the
math expression.
- jsonpath -- used to isolate the Markdown cells in an IPython notebook JSON file.
- KaTeX -- performs the rendering of the LaTeX commands.
There are a set of Vows in index.test.js. To run:
% npm test
NOTE: if this fails, there may be a path issue with
vows
executable. See package.json.