Skip to content

Upgrade the KaTeX engine to 0.10.0 (or later)

Problem to solve

Our team uses GitLab wikis and Markdown documents to capture technical documentation. The KaTeX math engine is under constant development, and I would love to see a release bump to 0.10.0 (or whatever is latest at the time this proposal is considered).

The syntax is constantly being expanded, and nice features like macros, and delimiters in the array environment (e.g., \hline and \hdashline) were first introduced in release 0.10.0.

Of particular importance, the 0.10.0 release supports macro definitions. Macros let the user declare find/replace "shortcuts" at the top of the math block to save lots of redundant typing, for instance

\newcommand\var[3]{\boldsymbol{\mathrm{#1}}_{#2}^{#3}}
\var{v}{eb}{l} = \var{C}{e}{l} \var{v}{eb}{e}

is much easier to type (and read/ edit) than

\boldsymbol{\mathrm{v}}_{eb}^{l} = \boldsymbol{\mathrm{C}}_{e}^{l} \boldsymbol{\mathrm{v}}_{eb}^{e}

katex_demo

Target audience

GitLab users who use math blocks for technical documentation.

Further details

Click to expand a use-case example

Here's an example formula that I would like to render:

(Screenshot):

ds-srif

(KaTeX >= 0.10.0 source):

\def\arraystretch{1.5}
\newcommand\var[2]{\boldsymbol{\mathrm{#1}}_{#2}}

\begin{aligned}
\var{T}{k}
\begin{bmatrix}
   \begin{array}{c:c}
       \var{R}{w} & 0 \\ \hdashline
       -\var{R}{k-1} \var{\Phi}{k-1}^{-1} \var{\Gamma}{k-1} &
        \var{R}{k-1} \var{\Phi}{k-1}^{-1} \\ \hdashline
       -\var{\tilde{J}}{k} \var{\Phi}{k-1}^{-1} \var{\Gamma}{k-1} &
        \var{\tilde{H}}{k} + \var{\tilde{J}}{k} \var{\Phi}{k-1}^{-1}
    \end{array}
\end{bmatrix} &\begin{bmatrix}
    \var{w}{k-1} \\ \var{x}{k}
\end{bmatrix}
\sim \var{T}{k}
\begin{bmatrix}
   \begin{array}{c}
       0 \\ \hdashline
       \var{b}{k-1} \\ \hdashline
       \var{\tilde{z}}{k}
    \end{array}
\end{bmatrix} \\[3em]
\begin{bmatrix}
   \begin{array}{c:c}
       \# & \# \\ \hdashline
       0 & \var{R}{k} \\ \hdashline
       0 & 0
    \end{array}
\end{bmatrix} &\begin{bmatrix}
    \var{w}{k-1} \\ \var{x}{k}
\end{bmatrix}
\sim
\begin{bmatrix}
   \begin{array}{c}
       \# \\ \hdashline
       \var{b}{k} \\ \hdashline
       \var{\varepsilon}{k}
    \end{array}
\end{bmatrix}
\end{aligned}

But, until the KaTeX engine is updated, I have to settle for

\begin{aligned}
\boldsymbol{\mathrm{T}}_k
\begin{bmatrix}
   \begin{array}{cc}
   \boldsymbol{\mathrm{R}}_w & 0 \\[0.5em]
   -\boldsymbol{\mathrm{R}}_{k-1} \boldsymbol{\mathrm{\Phi}}_{k-1}^{-1} \boldsymbol{\mathrm{\Gamma}}_{k-1} & \boldsymbol{\mathrm{R}}_{k-1} \boldsymbol{\mathrm{\Phi}}_{k-1}^{-1} \\[0.5em]
   -\boldsymbol{\tilde{\mathrm{J}}}_k \boldsymbol{\mathrm{\Phi}}_{k-1}^{-1} \boldsymbol{\mathrm{\Gamma}}_{k-1} & \boldsymbol{\tilde{\mathrm{H}}}_k + \boldsymbol{\tilde{\mathrm{J}}}_k \boldsymbol{\mathrm{\Phi}}_{k-1}^{-1}
\end{array}
\end{bmatrix} &\begin{bmatrix}
\boldsymbol{\mathrm{w}}_{k-1} \\[0.5em] \boldsymbol{\mathrm{x}}_k
\end{bmatrix}
\sim \boldsymbol{\mathrm{T}}_k
\begin{bmatrix}
   \begin{array}{c}
   0 \\[0.5em]
   \boldsymbol{\mathrm{b}}_{k-1} \\[0.5em]
   \boldsymbol{\tilde{\mathrm{z}}}_k
\end{array}
\end{bmatrix} \\[3em]
\begin{bmatrix}
   \begin{array}{cc}
   \# & \# \\[0.5em]
   0 & \boldsymbol{\mathrm{R}}_k \\[0.5em]
   0 & 0
\end{array}
\end{bmatrix} &\begin{bmatrix}
\boldsymbol{\mathrm{w}}_{k-1} \\[0.5em] \boldsymbol{\mathrm{x}}_k
\end{bmatrix}
\sim
\begin{bmatrix}
   \begin{array}{c}
   \# \\[0.5em]
   \boldsymbol{\mathrm{b}}_k \\[0.5em]
   \boldsymbol{\mathrm{\varepsilon}}_k
\end{array}
\end{bmatrix}
\end{aligned}

(KaTeX < 0.10.0 source):

\begin{aligned}
\boldsymbol{\mathrm{T}}_k
\begin{bmatrix}
   \begin{array}{cc}
   \boldsymbol{\mathrm{R}}_w & 0 \\[0.5em]
   -\boldsymbol{\mathrm{R}}_{k-1} \boldsymbol{\mathrm{\Phi}}_{k-1}^{-1} \boldsymbol{\mathrm{\Gamma}}_{k-1} & \boldsymbol{\mathrm{R}}_{k-1} \boldsymbol{\mathrm{\Phi}}_{k-1}^{-1} \\[0.5em]
   -\boldsymbol{\tilde{\mathrm{J}}}_k \boldsymbol{\mathrm{\Phi}}_{k-1}^{-1} \boldsymbol{\mathrm{\Gamma}}_{k-1} & \boldsymbol{\tilde{\mathrm{H}}}_k + \boldsymbol{\tilde{\mathrm{J}}}_k \boldsymbol{\mathrm{\Phi}}_{k-1}^{-1}
\end{array}
\end{bmatrix} &\begin{bmatrix}
\boldsymbol{\mathrm{w}}_{k-1} \\[0.5em] \boldsymbol{\mathrm{x}}_k
\end{bmatrix}
\sim \boldsymbol{\mathrm{T}}_k
\begin{bmatrix}
   \begin{array}{c}
   0 \\[0.5em]
   \boldsymbol{\mathrm{b}}_{k-1} \\[0.5em]
   \boldsymbol{\tilde{\mathrm{z}}}_k
\end{array}
\end{bmatrix} \\[3em]
\begin{bmatrix}
   \begin{array}{cc}
   \# & \# \\[0.5em]
   0 & \boldsymbol{\mathrm{R}}_k \\[0.5em]
   0 & 0
\end{array}
\end{bmatrix} &\begin{bmatrix}
\boldsymbol{\mathrm{w}}_{k-1} \\[0.5em] \boldsymbol{\mathrm{x}}_k
\end{bmatrix}
\sim
\begin{bmatrix}
   \begin{array}{c}
   \# \\[0.5em]
   \boldsymbol{\mathrm{b}}_k \\[0.5em]
   \boldsymbol{\mathrm{\varepsilon}}_k
\end{array}
\end{bmatrix}
\end{aligned}

Proposal

Bump the KaTeX engine to version 0.10.0 (or later).

What does success look like, and how can we measure that?

Links / references

https://github.com/KaTeX/KaTeX/releases

Edited by Andrew Harmon