jemdoc-cvx – download

Get the bundle

The easiest way to install jemdoc-cvx is to grab the latest release archive from GitHub:

GitHub releases

Each release ships a .tar.gz and a .zip, both containing:

Unpack and try it out:

tar -xzf jemdoc-cvx-1.0.0.tar.gz
cd jemdoc-cvx-1.0.0
./jemdoc --version

The single executable script is ./jemdoc. It uses only the Python standard library, so any Python 3.11+ interpreter is enough to run it. To make it available system-wide:

sudo install ./jemdoc /usr/local/bin/jemdoc

Or clone the repository

If you would prefer to track the source (or contribute), clone instead:

git clone https://github.com/cvxgrp/jemdoc-cvx.git

The repository layout matches the bundle: .jemdoc at the root, themes and fonts under css, the documentation site source under www/. Everything needed to run the tool ships in either form.

Optional: KaTeX for server-side equation rendering

If your pages contain LaTeX equations ($inline$ or \(display\) blocks), install the pinned KaTeX CLI so jemdoc-cvx can render the math at build time and embed the resulting HTML directly in each page. Install KaTeX once on the machine where you build the site — typically your laptop, or your faculty webserver if you build there. KaTeX is not needed on whichever machine actually serves the resulting html.

cd /path/to/jemdoc-cvx-1.0.0
npm install

This places the katex binary at .node_modules.bin/katex, which jemdoc discovers automatically. Cached output goes in a katexcache/ directory next to your sources, so subsequent builds reuse it.

If you skip this step or katex is not on PATH, jemdoc-cvx falls back to emitting raw \(..\) / \..\ delimiters that a client-side script (e.g. MathJax loaded via a conf override) can render in the browser. See latex equations for details.

Building an academic website

A canonical academic page (homepage, publications, teaching, CV) is just a handful of .jemdoc files alongside a MENU file and the theme assets. Recommended layout:

mysite/
    MENU                  # sidebar menu, listed once
    index.jemdoc          # one .jemdoc per page
    publications.jemdoc
    teaching.jemdoc
    cv.jemdoc
    jemdoc-cvx.css        # the default theme stylesheet
    fonts/                # the woff2 files referenced by the theme
        source-serif-4-latin-wght-normal.woff2
        source-serif-4-latin-wght-italic.woff2
        jetbrains-mono-latin-wght-normal.woff2
    papers/               # PDFs and other static assets, served as-is
        mypaper.pdf

To bootstrap, copy the theme out of the unpacked release bundle (or the cloned repo) and start writing pages:

mkdir mysite && cd mysite
cp /path/to/jemdoc-cvx-1.0.0/css/jemdoc-cvx.css .
cp -r /path/to/jemdoc-cvx-1.0.0/css/fonts .
# write your .jemdoc sources, plus a MENU file, then build all pages:
/path/to/jemdoc-cvx-1.0.0/jemdoc *.jemdoc

By default jemdoc writes index.html next to index.jemdoc, etc. To send the output into a separate directory:

mkdir build
/path/to/jemdoc-cvx-1.0.0/jemdoc -o build/ *.jemdoc
cp jemdoc-cvx.css build/
cp -r fonts build/

Then point your webserver (Apache, nginx, GitHub Pages, whatever your department uses) at the directory containing the rendered .html files. The output is plain static html — no Python, Node, or other runtime is needed to serve it.

Where to next?

Read running jemdoc for the full set of command-line options, modelines, and theme switching. The syntax reference documents the markup language itself; an example page shows source and rendered output side by side.

You can also study the source of this index page as a starting point.