跳至主要內容

@mdit/plugin-mathjax


使用 Mathjax 呈现数学表达式的插件,你应该将 mathjax-full 安装为 peer 依赖。

这个插件基于 @mdit/plugin-tex

使用 仅限 Node.js 环境

TS
import MarkdownIt from "markdown-it";
import { createMathjaxInstance, mathjax } from "@mdit/plugin-mathjax";

const mathjaxInstance = createMathjaxInstance(options);
const mdIt = MarkdownIt().use(mathjax, mathjaxInstance);

const html = mdIt.render("$E=mc^2$");
const style = mathjaxInstance.outputStyle();

这个插件与其他插件有点不同。 它要求你先创建通过选项一个 Mathjax 实例,然后将其传递给插件。

你可以设置如下选项:

interface MarkdownItMathjaxOptions {
  /**
   * 输出格式
   *
   * @default 'svg'
   */

  output?: "chtml" | "svg";

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

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

  /**
   * 是否启用无障碍
   *
   * @default true
   */
  a11y?: boolean;

  /**
   * TeX 输入选项
   */
  tex?: MathJaxTexInputOptions;

  /**
   * 通用 HTML 输出选项
   */
  chtml?: MathjaxCommonHTMLOutputOptions;

  /**
   * SVG 输出选项
   */
  svg?: MathjaxSVGOutputOptions;
}

该实例包含每个调用的渲染内容,因此您应该:

  • 在不同页面中的每次渲染之前调用 mathjaxInstance.reset(),这确保标签之类的项目被重置。
  • 在所有渲染完成后调用 mathjaxInstance.outputStyle(),以获得最终的 CSS 内容。
  • 如有必要,调用 mathjaxInstance.clearStyle() 清除现有样式缓存。

格式

你应该在行内使用 $tex expression$,在块中使用 $$tex expression$$

转义

  • 你可以使用 \ 来转义 $:

    Euler’s identity \$e^{i\pi}+1=0$
    

    会被渲染为

    Euler’s identity $e^{i\pi}+1=0$

示例

示例

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

rωr(yωω)=(yωω){(logy)r+i=1r(1)Ir(ri+1)(logy)riωi}
Euler’s identity $e^{i\pi}+1=0$ is a beautiful formula in $\mathbb{R}^2$.

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

支持列表

Cookbook