{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# NbConvert" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Command line usage" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`NbConvert` is both a library and command line tool that allows you to convert notebooks to other formats. It ships with many common formats: `html`, `latex`, `markdown`, `python`, `rst`, and `slides`\n", "NbConvert relys on the Jinja templating engine, so implementing a new format or tweeking an existing one is easy." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can invoke nbconvert by running\n", "\n", "```bash\n", "$ ipython nbconvert \n", "```\n", "\n", "Call `ipython nbconvert` with the `--help` flag or without any aruments to display the basic help. For detailed configuration help, use the `--help-all` flag." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Basic export" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a test, the `Index.ipynb` notebook in the directory will be convert. \n", "\n", "If you're converting a notebook with code in it, make sure to run the code cells that you're interested in before attempting to convert the notebook. Unless explicitly requested, nbconvert **does not execute the code cells** of the notebooks that it converts." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%%bash\n", "ipython nbconvert 'Index.ipynb'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Html is the (configurable) default value. The verbose form of the same command as above is " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%%bash\n", "ipython nbconvert --to=html 'Index.ipynb'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can also convert to latex, which will extract the embeded images. If the embeded images are SVGs, inkscape is used to convert them to pdf:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%%bash\n", "ipython nbconvert --to=latex 'Index.ipynb'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the latex conversion creates latex, not a PDF. To create a PDF you need the required third party packages to compile the latex.\n", "\n", "A `--post` flag is provided for convinience which allows you to have nbconvert automatically compile a PDF for you from your output." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%%bash\n", "ipython nbconvert --to=latex 'Index.ipynb' --post=pdf" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Custom templates" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Look at the first 20 lines of the `python` exporter" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "pyfile = !ipython nbconvert --to python 'Index.ipynb' --stdout\n", "for l in pyfile[20:40]:\n", " print l" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "From the code, you can see that non-code cells are also exported. If you want to change this behavior, you can use a custom template. The custom template inherits from the Python template and overwrites the markdown blocks so that they are empty." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%%writefile simplepython.tpl\n", "{% extends 'python.tpl'%}\n", "\n", "{% block markdowncell -%}\n", "{% endblock markdowncell %}\n", "\n", "## we also want to get rig of header cell\n", "{% block headingcell -%}\n", "{% endblock headingcell %}\n", "\n", "## and let's change the appearance of input prompt\n", "{% block in_prompt %}\n", "# This was input cell with prompt number : {{ cell.prompt_number if cell.prompt_number else ' ' }}\n", "{%- endblock in_prompt %}" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "pyfile = !ipython nbconvert --to python 'Index.ipynb' --stdout --template=simplepython.tpl\n", "\n", "for l in pyfile[4:40]:\n", " print l\n", "print '...'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For details about the template syntax, refer to [Jinja's manual](http://jinja2.readthedocs.org/en/latest/intro.html)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Template that use cells metadata" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The notebook file format supports attaching arbitrary JSON metadata to each cell. Here, as an exercise, you will use the metadata to tags cells." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First you need to choose another notebook you want to convert to html, and tag some of the cells with metadata. You can refere to the file `soln/celldiff.js` as an example or follow the Javascript tutorial to figure out how do change cell metadata. Assuming you have a notebook with some of the cells tagged as `Easy`|`Medium`|`Hard`|``, the notebook can be converted specially using a custom template. Design your template in the cells provided below.\n", "\n", "The following, unorganized lines of code, may be of help:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "```\n", "{% extends 'html_full.tpl'%}\n", "{% block any_cell %}\n", "{{ super() }}\n", "
\n", "
\n", "```\n", "\n", "If your key name under `cell.metadata.example.difficulty`, the following code would get the value of it:\n", "\n", "`cell['metadata'].get('example',{}).get('difficulty','')`\n", "\n", "Tip: Use `%%writefile` to edit the template in the notebook." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%%bash\n", "# ipython nbconvert --to html --template=" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%loadpy soln/coloreddiff.tpl" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# ipython nbconvert --to html '04 - Custom Display Logic.ipynb' --template=soln/coloreddiff.tpl" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Get rid of all command line flags." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "IPython nbconvert can be configured using the default profile or a profile specified via the `--profile` flag. Additionally, if a `config.py` file exist in current working directory, nbconvert will use that as config." ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.4.3" } }, "nbformat": 4, "nbformat_minor": 0 }