Skip to content

jfbercher/jupyter_latex_envs

Repository files navigation

Maintainer(s) wanted... Unfortunately, I, @jfbercher, don't have the time to continue the development of this extension, which I still use very often. Are there any volunteers to maintain it or continue the development? A big project would be to port it to jupyter-lab.


(some) LaTeX environments for Jupyter notebook

This extension for Jupyter notebook enables the use of some LaTeX commands and environments markdown cells.

  1. LaTeX commands and environments
    • support for some LaTeX commands within markdown cells, e.g. \textit, \textbf, \underline.
    • support for theorems-like environments, support for labels and cross references
    • support for lists: enumerate, itemize,
    • limited support for a figure environment,
    • support for an environment listing,
    • additional textboxa environment
  2. Citations and bibliography
    • support for \cite with creation of a References section
  3. Document-wide numbering of equations and environments, support for \label and \ref
  4. Configuration toolbar
  5. LaTeX_envs dropdown menu for a quick insertion of environments
  6. User's LaTeX definitions file can be loaded and used
  7. Export to plain HTML, Slides and LaTeX with a customized exporter
  8. Environments title/numbering can be customized by users in user_envs.json config file.
  9. Styles can be customized in the latex_env.css stylesheet
  10. Autocompletion for $, (, {, [, for LaTeX commands and environments

More environments can be simply added in user_envs.json or in the source file (thmsInNb4.js).

It is possible to export the notebooks to plain $\LaTeX$ and html while keeping all the features of the latex_envs notebook extension in the converted version. We provide specialized exporters, pre and post processors, templates. We also added entry-points to simplify the conversion process. It is now as simple as

jupyter nbconvert --to html_with_lenvs FILE.ipynb

or

jupyter nbconvert --to latex_with_lenvs FILE.ipynb

to convert FILE.ipynb into html/latex while keeping all the features of the latex_envs notebook extension in the converted version. Other options are slides_with_lenvs for converting to reveal-js presentations, and html_with_toclenvs to include a table of contents. The LaTeX converter also expose several conversion options (read the docs).

Demo/documentation

The doc subdirectory that constains an example notebook and its html and pdf versions. This serves as the documentation. A demo notebook latex_env_doc.ipynb is provided. Its html version is latex_env_doc.html serves as documentation.

Installation

The extension consists of a pypi package that includes a javascript notebook extension, along with python code for nbconvert support. Since Jupyter 4.2, pypi is the recommended way to distribute nbextensions. The extension can be installed

  • from the master version on the github repo (this will be always the most recent version)
  • via pip for the version hosted on Pypi
  • via conda, from the conda-forge channel
  • as part of the great jupyter_contrib_nbextensions collection. Follow the instructions there for installing. Once this is done, you can open a tab at http://localhost:8888/nbextensions to enable and configure the various extensions.

From the github repo or from Pypi,

  1. install the package

    • pip3 install https://github.com/jfbercher/jupyter_latex_envs/archive/master.zip [--user][--upgrade]
    • or pip3 install jupyter_latex_envs [--user][--upgrade]
    • or clone the repo and install git clone https://github.com/jfbercher/jupyter\_latex\_envs.git python3 setup.py install
  2. install the notebook extension

    jupyter nbextension install --py latex_envs [--user|--sys-prefix|--system]
    
  3. and enable it

    jupyter nbextension enable --py latex_envs [--user|--sys-prefix|--system]
    

For Jupyter versions before 4.2, the situation after step 1 is more tricky, since the --py option isn't available, so you will have to find the location of the source files manually as follows (instructions adapted from [@jcb91](https://github.com/jcb91)'s jupyter_highlight_selected_word). Execute

python -c "import os.path as p; from latex_envs import __file__ as f, _jupyter_nbextension_paths as n; print(p.normpath(p.join(p.dirname(f), n()[0]['src'])))"

Then, issue

jupyter nbextension install <output source directory>
jupyter nbextension enable latex_envs/latex_envs

where <output source directory> is the output of the first python command.

Disclaimer, sources and acknowledgments

Originally, I used a piece of code from the nice online markdown editor stackedit, where the authors also considered the problem of incorporating LaTeX markup in their markdown.

I also studied and used examples and code from ipython-contrib/jupyter_contrib_nbextensions.

  • This is done in the hope it can be useful. However there are many impovements possible, in the code and in the documentation. Contributions will be welcome and deeply appreciated.
  • If you have issues, please post an issue at https://github.com/jfbercher/jupyter_latex_envs/issues here.

Self-Promotion -- Like latex_envs? Please star and follow the repository on GitHub.