Skip to main content

@mdit/plugin-tex


Plugins for TEX grammar support.

Note

This plugin is facing developers.

If you are looking for an out of box solution, you should try @mdit/plugin-katex and @mdit/plugin-mathjax, which are based on this plugin.

Usage

TS
import MarkdownIt from "markdown-it";
import { figure } from "@mdit/plugin-figure";

const mdIt = MarkdownIt().use(figure, {
  render: (content, displayMode) => {
    // render tex here and return
  },
});

mdIt.render("$E=mc^2$");

This plugin registers markdown rules for TEX. It will replace the TEX tokens with the result of render function.

Syntax

  • Inline mode: $xxx$

  • Display mode:

    $$xxx$$
    
    $$
    xxx
    $$
    

Escaping

Escaping can be done by using \ before the $ character, or adding space both before and after the $ character:

  • The a=1 is a TeX equation, while $ a=1 $ and $a=1$ is not.
- The $a=1$ is a TeX equation, while $ a=1 $ and \$a=1$ is not.

Options

interface MarkdownItTexOptions {
  /**
   * Whether parsed fence block with math language to display mode math
   *
   * @default false
   */
  mathFence?: boolean;

  /**
   * Tex Render function
   *
   * @param content Text content
   * @param displayMode whether is display mode
   * @param env MarkdownIt environment
   * @returns render result
   */
  render: (content: string, displayMode: boolean, env: MarkdownItEnv) => string;

  /**
   * Whether to allow inline math with spaces on ends
   *
   * @description NOT recommended to set this to true, because it will likely break the default usage of $
   *
   * @default false
   */
  allowInlineWithSpace?: boolean;
}

Demo

Euler’s identity eiπ+1=0 is a beautiful formula in R2.

Euler’s identity $e^{i\pi}+1=0$ is a beautiful formula in $\mathbb{R}^2$.
rωr(yωω)=(yωω){(logy)r+i=1r(1)Ir(ri+1)(logy)riωi}
$$
\frac {\partial^r} {\partial \omega^r} \left(\frac {y^{\omega}} {\omega}\right)
= \left(\frac {y^{\omega}} {\omega}\right) \left\{(\log y)^r + \sum_{i=1}^r \frac {(-1)^ Ir \cdots (r-i+1) (\log y)^{ri}} {\omega^i} \right\}
$$

Tex Tutorial

Operator

  • Some operators can be entered directly in math mode; others need to be generated using control sequences:

    • +: +
    • -:
    • \times: ×
    • \ div: ÷
    • =: =
    • \pm: ±
    • \cdot:
    • \cup:
    • \geq:
    • \leq:
    • \neq:
    • \approx:
    • \equiv:
    • \quad: (blank separator)
  • Radical: \sqrt{xxx} xxx

  • Fraction \frac{aaa}{bbb} aaabbb (the first parameter is the numerator and the second is the denominator).

  • Sum: \sum

  • Tandem: \prod

  • Limit: \lim lim

  • Points: \int

  • Multiple points:

    • \iint:
    • \iiint:
    • \iiiint:
    • \idotsint

Tips

Large operators such as continuous addition, multiplication, limits, and integrals can use \limits and \nolimits to force explicitly specify compress these superscripts or not.

\varoiint, \sqint, \sqiint, \ointctrclockwise, \ointclockwise, \varointclockwise, \varointctrclockwise, \fint, \landupint, \landdownint are not supported currently.

Case

x, 12.

i=1nii=1n

i=1nii=1n

12x212x212x212x2

12x212x212x212x2

12x212x212x212x2
$\sqrt{x}$, $\frac{1}{2}$.

$\sum_{i=1}^n i\; \prod_{i=1}^n$

$\sum\limits _{i=1}^n i\; \prod\limits _{i=1}^n$

$\iint_1^2 x^2\; \iiint_1^2 x^2\; \iiiint_1^2 x^2\; \idotsint_1^2 x^2$

$\iint\limits_1^2 x^2\; \iiint\limits_1^2 x^2\; \iiiint\limits_1^2 x^2\; \idotsint\limits_1^2 x^2$

$$\iint_1^2 x^2\; \iiint_1^2 x^2\; \iiiint_1^2 x^2\; \idotsint_1^2 x^2$$

Symbol

  • English letters can be entered directly

    abcxyzABC

    $a \quad b \quad c \quad x \quad y \quad z \quad A \quad B \quad C$
    
  • Greek characters use \characterName to enter symbols, and output capital letters when the first letter is capitalized.

    αβγΩΔΓ

    $\alpha \quad \beta \quad \gamma \quad \Omega \quad \Delta \quad \Gamma$
    
  • Other mathematical expressions can be used correspondingly

    logabx

    $\log_{a}{b} \quad \partial x$
    

Superscript and Subscript

  • Superscript, use ^ to achieve
  • Subscript, use _ to achieve
  • By default, superscript and subscript only apply to the next character. To work with multiple consecutive characters, please enclose these characters in curly brackets {}.

Einstein ’s E=mc2.

210>1000

Einstein ’s $E=mc^2$.

$2^{10} > 1000$

Delimiters (parentheses, etc.)

Various parentheses are represented by commands such as (), [], \{\}, \langle\rangle.

Tips

Note that curly braces are usually used to enter command and environment parameters, so they must be preceded by \ in mathematical formulas.

Because the application of | and \| in LaTeX is too casual, we recommend using \lvert\rvert and \ lVert\rVert instead.

To adjust the size of these delimiters, we recommend using \big, \Big, \bigg, \Bigg and a series of commands to adjust the size before the above brackets.

(((((x)))))[[[[[x]]]]]{{{{{x}}}}}x|||||x|||||x

$\Biggl(\biggl(\Bigl(\bigl((x)\bigr)\Bigr)\biggr)\Biggr)$
$\Biggl[\biggl[\Bigl[\bigl[[x]\bigr]\Bigr]\biggr]\Biggr]$
$\Biggl \{\biggl \{\Bigl \{\bigl \{\{x\}\bigr \}\Bigr \}\biggr \}\Biggr\}$
$\Biggl\langle\biggl\langle\Bigl\langle\bigl\langle\langle x
\rangle\bigr\rangle\Bigr\rangle\biggr\rangle\Biggr\rangle$
$\Biggl\lvert\biggl\lvert\Bigl\lvert\bigl\lvert\lvert x
\rvert\bigr\rvert\Bigr\rvert\biggr\rvert\Biggr\rvert$
$\Biggl\lVert\biggl\lVert\Bigl\lVert\bigl\lVert\lVert x
\rVert\bigr\rVert\Bigr\rVert\biggr\rVert\Biggr\rVert$

Ellipsis

The ellipsis is represented by commands such as \dots,\cdots, \vdots,\ddots.

Tips

\dots and\cdots have different vertical positions. The former is generally used for subscripted sequences.

x1,x2,,xn1,2,,n

$x_1,x_2,\dots ,x_n \quad 1,2,\cdots ,n \quad \vdots\quad \ddots$

Matrix

pmatrix, bmatrix, Bmatrix, vmatrix, Vmatrix and other environments can add various separators on both sides of the matrix.

(abcd)[abcd]{abcd}|abcd|abcd
$$
\begin{pmatrix} a&b\\c&d \end{pmatrix} \quad
\begin{bmatrix} a&b\\c&d \end{bmatrix} \quad
\begin{Bmatrix} a&b\\c&d \end{Bmatrix} \quad
\begin{vmatrix} a&b\\c&d \end{vmatrix} \quad
\begin{Vmatrix} a&b\\c&d \end{Vmatrix}
$$

Using the smallmatrix environment, you can generate small matrices of inline formulas.

A small matrix: (abcd).

A small matrix: $( \begin{smallmatrix} a&b\\c&d \end{smallmatrix} )$.

Multi-line Formula

  • newline

    Use \\ or \newline to wrap

    x=a+b+c+d+e+f+gx=a+b+c+d+e+f+g
    $$
    x = a+b+c+ \\
    d+e+f+g
    $$
    
    $$
    x = a+b+c+ \newline
    d+e+f+g
    $$
    
  • Alignment

    You can use the aligned environment to achieve alignment, and&to identify fixed anchor points

    x=a+b+c+d+e+f+g10x+3y=23x+13y=4
    $$
    \begin{aligned}
    x ={}& a+b+c+{} \\
    &d+e+f+g
    \end{aligned}
    $$
    
    $$
    \begin{alignedat}{2}
       10&x+ &3&y = 2 \\
       3&x+&13&y = 4
    \end{alignedat}
    $$
    

Formula Group

Formula groups that do not require alignment can use the gather environment.

a=b+c+dx=y+z
$$
\begin{gathered}
a = b+c+d \\
x = y+z
\end{gathered}
$$

Numbering

(1)x+y2x1x+y2x
$\tag{1} x+y^{2x}$

$\tag*{1} x+y^{2x}$

Segmented Functions

Use case environment

y={x,x0x,x>0
$$
y= \begin{cases}
-x,\quad x\leq 0 \\
x,\quad x>0
\end{cases}
$$

Text

To insert text in TeX, you should use \text{} to wrap them.