LaTeX
Nextra 可以使用 KaTeX 在 MDX 中预渲染 LaTeX 表达式,或使用 MathJax 在浏览器中动态渲染数学公式。要启用 LaTeX 支持,你必须在 next.config.mjs 文件中启用 latex 选项:
import nextra from 'nextra'
const withNextra = nextra({
latex: true
})
export default withNextra()当值为 true 时将使用 KaTeX 作为数学渲染器。要明确指定渲染器,你可以提供一个对象
{ renderer: 'katex' } 或 { renderer: 'mathjax' } 作为 latex: ... 的值。
当启用后,必要的 CSS 和字体将自动包含在你的网站中,你可以通过在 $...$ 中包含内联数学公式,
或在带有 math 标签的代码块中编写数学公式:
```math
\int x^2
```示例
例如,以下 Markdown 代码:
**毕达哥拉斯方程式**是 $a=\sqrt{b^2 + c^2}$,二次方程公式:
```math
x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}
```将被渲染为:
The Pythagorean equation is and the quadratic formula:
你仍可以在包含 LaTeX 表达式的同一行中使用 Markdown 和 MDX 语法。
If you want to display $ in your content instead of rendering it as an
equation, you can escape it with a backslash (\). For example \$e = mc^2\$
will be rendered as $e = mc^2$.
API
KaTeX
rehype-katex is used to pre-render LaTeX expressions in your content. You can
pass supported KaTeX options via the options
key in your Nextra config. For example, to add a macro \RR that renders as
\mathbb{R} you could use the following configuration.
const withNextra = nextra({
latex: {
renderer: 'katex',
options: {
macros: {
'\\RR': '\\mathbb{R}'
}
}
}
})查看 KaTeX 的文档 获取支持的命令列表。
应用 KaTeX 样式
在你的根 layout 文件的 <head> 元素中添加
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex/dist/katex.css" />,
因为 <link rel="stylesheet" />
在 Next.js Metadata API 中不受支持 。
或者,你可以直接在你的 MDX 文件中包含 <link rel="stylesheet" />:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex/dist/katex.css" />
# 单次使用 KaTeX 的页面
```math
\int_2^3x^3\,\mathrm{d}x
```MathJax
当启用 MathJax 时(通过设置 latex: { renderer: 'mathjax' }),数学公式会通过
better-react-mathjax
在页面加载时渲染,而不是预渲染。默认情况下,MathJax 通过 MathJax CDN 提供服务,
而不是直接包含在你的网站中。
MathJax rendering is enabled by setting renderer: 'mathjax' in your
Nextra config.
const withNextra = nextra({
latex: {
renderer: 'mathjax'
}
})你可以通过 Nextra 配置中的 options 键向 better-react-mathjax 传递额外的选项。
config: ... 选项设置 MathJax 配置 。
但请注意,你只能通过 Nextra 配置中的 options 键向 better-react-mathjax 传递可序列化的选项。1
For example, to configure MathJax to render \RR as \mathbb{R} you could use
the following configuration.
const withNextra = nextra({
latex: {
renderer: 'mathjax',
options: {
config: {
tex: {
macros: {
RR: '\\mathbb{R}'
}
}
}
}
}
})MathJax CDN
默认情况下,MathJax 通过 MathJax CDN 提供服务。要从其他位置(包括你项目中的本地)提供文件,
你必须向 latex 配置传递 src: ... 选项。有关 src 选项的详细信息,请参阅
better-react-mathjax 文档 。
此外,你可能需要将 MathJax 发行版复制到你的 /public 文件夹中以便本地提供服务。
KaTeX 与 MathJax 对比
使用 KaTeX,数学公式会被预渲染,这意味着无闪烁且更快的页面加载。 但是,KaTeX 不支持 MathJax 的所有功能,特别是与无障碍相关的功能。
以下两个示例展示了相同的公式分别用 KaTeX(第一个)和 MathJax(第二个)渲染的效果。
\[\int_2^3x^3\,\mathrm{d}x \]由于 MathJax 的无障碍功能,第二个公式可以通过 Tab 键访问,并具有上下文菜单,帮助屏幕阅读器为视障人士重新处理数学公式。
Footnotes
-
要传递像函数这样的不可序列化对象,你必须直接在源码中使用
<MathJaxContext config={...} />组件。 ↩