@mdit/plugin-katex
使用 KaTeX 呈现数学表达式的插件。
注
这个插件基于 @mdit/plugin-tex。
使用 仅限 Node.js 环境
TS
import MarkdownIt from "markdown-it";
import { katex } from "@mdit/plugin-katex";
const mdIt = MarkdownIt().use(katex);
mdIt.render("$E=mc^2$");
JS
const MarkdownIt = require("markdown-it");
const { katex } = require("@mdit/plugin-katex");
const mdIt = MarkdownIt().use(katex);
mdIt.render("$E=mc^2$");
我们也有一个 @mdit/plugin-katex-slim
包,其中 katex
是可选对等依赖。
格式
语法取决于 delimiters
选项:
- 默认 (
"dollars"
): 内联使用$tex expression$
,块级使用$$tex expression$$
。 - LaTeX 风格 (
"brackets"
): 内联使用\(tex expression\)
,块级使用\[tex expression\]
。 - 两种语法 (
"all"
): 同时支持美元符号和括号语法。
样式
你应该自己从 katex
包或 CDN 导入 katex/dist/katex.min.css
。
转义
你可以使用
\
来转义$
\[
和\(
:Euler’s identity \$e^{i\pi}+1=0$
会被渲染为
Euler’s identity $e^{i\pi}+1=0$
示例
Euler’s identity
示例
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\}
$$
mhchem 扩展
如果你想加载 mhchem
扩展,你应该从 @mdit/plugin-katex
中导入 loadMhchem
:
import { loadMhchem } from "@mdit/plugin-katex";
await loadMhchem();
因为它是异步的,你应该在准备阶段调用它,因为 markdown-it 渲染是同步的。
选项
type KatexLogger<MarkdownItEnv = unknown> = (
errorCode:
| "unknownSymbol"
| "unicodeTextInMathMode"
| "mathVsTextUnits"
| "commentAtEnd"
| "htmlExtension"
| "newLineInDisplayMode",
errorMsg: string,
token: Token,
env: MarkdownItEnv,
) => "error" | "warn" | "ignore" | boolean | undefined | void;
interface MarkdownItKatexOptions<MarkdownItEnv = unknown> extends KatexOptions {
/**
* 启用的数学分隔符语法
*
* - `"brackets"`: 使用 `\(...\)` 表示内联数学,使用 `\[...\]` 表示显示模式数学(LaTeX 风格)
* - `"dollars"`: 使用 `$...$` 表示内联数学,使用 `$$...$$` 表示显示模式数学(常见 Markdown 风格)
* - `"all"`: 启用括号和美元符号两种语法
*
* @default "dollars"
*/
delimiters?: "brackets" | "dollars" | "all";
/**
* 是否允许两端带空格的内联数学
*
* @description 不建议将此设置为 true,因为它很可能会破坏 $ 的默认使用
*
* @default false
*/
allowInlineWithSpace?: boolean;
/**
* 是否将解析的数学语言 fence 块转换为显示模式数学
*
* @default false
*/
mathFence?: boolean;
/**
* 错误日志记录器
*/
logger?: KatexLogger<MarkdownItEnv>;
/**
* 输出内容的转换器
*/
transformer?: TeXTransformer;
}