跳至主要內容

@mdit/plugin-tex


提供 TEX 语法支持的插件。

此插件面向开发者,如果你正在寻找一个开箱即用的方案,请尝试 @mdit/plugin-katex@mdit/plugin-mathjax ,它们基于此插件构建。

使用

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

const mdIt = MarkdownIt().use(figure, {
  render: (content, displayMode) => {
    // 在此渲染 tex 并返回
  },
});

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

这个插件为 TEX 注册 Markdown 规则。 它将用 render 函数的结果替换 TEX 标记。

选项

interface MarkdownItTexOptions {
  /**
   * 是否将解析的数学语言 fence 块转换为显示模式数学
   *
   * @default false
   */
  mathFence?: boolean;

  /**
   * Tex 渲染函数
   *
   * @param content 文本内容
   * @param displayMode 是否是显示模式
   * @param env MarkdownIt 环境变量
   * @returns 渲染结果
   */
  render: (content: string, displayMode: boolean, env: MarkdownItEnv) => string;

  /**
   * 是否允许两端带空格的内联数学
   *
   * @description 不建议将此设置为 true,因为它很可能会破坏 $ 的默认使用
   *
   * @default false
   */
  allowInlineWithSpace?: boolean;
}

格式

  • 内联模式:$xxx$

  • 显示模式:

    $$xxx$$
    
    $$
    xxx
    $$
    

转义

可以通过在 $ 字符之前使用 \ 或在 $ 字符前后添加空格来完成转义:

  • a=1 是一个 TeX 方程,而 a=1 和 $a=1$ 不是。
- $a=1$ 是一个 TeX 方程,而 $a=1$ 和 \$a=1$ 不是。

案例

行内语法

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)^i r \cdots (r-i+1) (\log y)^{r-i}} {\omega^i} \right\}
$$

TeX 教程

运算符

  • 一些运算符,可以在数学模式下直接输入;另一些需要用控制序列生成:

    • +: +
    • -:
    • \times: ×
    • \div: ÷
    • =: =
    • \pm: ±
    • \cdot:
    • \cup:
    • \geq:
    • \leq:
    • \neq:
    • \approx:
    • \equiv:
    • \quad: (空白分隔符)
  • 根式: \sqrt{xxx} xxx

  • 分式 \frac{aaa}{bbb} aaabbb (第一个参数为分子,第二个为分母) 。

  • 连加: \sum

  • 连乘: \prod

  • 极限: \lim lim

  • 积分: \int

  • 多重积分:

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

提示

连加、连乘、极限、积分等大型运算符可以用 \limits\nolimits 来强制显式地指定是否压缩这些上下标。

\varoiint, \sqint, \sqiint, \ointctrclockwise, \ointclockwise, \varointclockwise, \varointctrclockwise, \fint, \landupint, \landdownint 目前不被支持。

案例

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$$

符号

  • 英文字母可以直接输入

    abcxyzABC

    $a \quad b \quad c \quad x \quad y \quad z \quad A \quad B \quad C$
    
  • 希腊字母使用 \characterName 来输入符号,首字母大写时输出大写字母。

    αβγΩΔΓ

    $\alpha \quad \beta \quad \gamma \quad \Omega \quad \Delta \quad \Gamma$
    
  • 其他数学表达式可以对应使用

    logabx

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

上下标

  • 上标,使用 ^ 来实现
  • 下标,使用 _ 来实现
  • 上下标默认只作用于之后的一个字符,如果想对连续的几个字符起作用,请将这些字符用花括号 {} 括起来。

例子

Einstein ’s E=mc2.

210>1000

Einstein ’s $E=mc^2$.

$2^{10} > 1000$

定界符 (括号等)

各种括号用 (), [], \{\}, \langle\rangle 等命令表示。

提示

注意花括号通常用来输入命令和环境的参数,所以在数学公式中它们前面要加 \

因为 LaTeX 中 |\| 的应用过于随意,推荐用 \lvert\rvert\lVert\rVert 取而代之。

为了调整这些定界符的大小,推荐使用 \big, \Big, \bigg, \Bigg 等一系列命令放在上述括号前面调整大小。

(((((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$

省略号

省略号用 \dots, \cdots, \vdots, \ddots 等命令表示。

提示

\dots\cdots 的纵向位置不同,前者一般用于有下标的序列。

x1,x2,,xn1,2,,n

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

矩阵

pmatrix, bmatrix, Bmatrix, vmatrix, Vmatrix 等环境可以在矩阵两边加上各种分隔符。

(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}
$$

使用 smallmatrix 环境,可以生成行内公式的小矩阵。

A small matrix: (abcd).

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

多行公式

  • 换行

    使用 \\\newline 进行换行

    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
    $$
    
  • 对齐

    可以使用 aligned 环境来实现对齐,使用 & 标识固定锚点

    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}
    $$
    

公式组

无需对齐的公式组可以使用 gather 环境。

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

编号

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

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

分段函数

使用 case 环境

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

文字

如果你需要在公式中插入文字,请使用 \text{}