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 代码
The **Pythagorean equation** is $a=\sqrt{b^2 + c^2}$ and the quadratic formula:
```math
x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}
```
将渲染为
勾股定理为 和二次方程
您仍然可以在 LaTeX 表达式相同的行中使用 Markdown 和 MDX 语法。
如果您想在内容中显示 $
而不是将其渲染为等式,您可以使用反斜杠 (\
) 对其进行转义。例如 \$e = mc^2\$
将渲染为 $e = mc^2$。
API
KaTeX
rehype-katex
用于预渲染内容中的 LaTeX 表达式。您可以通过 Nextra 配置中的 options
键传递支持的 KaTeX 选项。例如,要添加一个宏 \RR
,将其渲染为 \mathbb{R}
,您可以使用以下配置。
const withNextra = nextra({
latex: {
renderer: 'katex',
options: {
macros: {
'\\RR': '\\mathbb{R}'
}
}
}
})
请参阅 KaTeX 的文档,了解支持的命令列表。
MathJax
启用 MathJax 时(通过设置 latex: { renderer: 'mathjax' }
),数学公式将在页面加载时通过 better-react-mathjax
渲染,而不是预渲染。默认情况下,**MathJax 通过 MathJax CDN 提供服务**,而不是将文件直接包含在您的站点中。1
通过在 Nextra 配置中设置 renderer: 'mathjax'
来启用 MathJax 渲染。
const withNextra = nextra({
latex: {
renderer: 'mathjax'
}
})
您可以通过 Nextra 配置中的 options
键将其他选项传递给 better-react-mathjax
。 config: ...
选项设置 MathJax 配置。但是,请注意,您只能通过 Nextra 配置中的 options
键将可序列化选项传递给 better-react-mathjax
。2
例如,要配置 MathJax 将 \RR
渲染为 \mathbb{R}
,您可以使用以下配置。
const withNextra = nextra({
latex: {
renderer: 'mathjax',
options: {
config: {
tex: {
macros: {
RR: '\\mathbb{R}'
}
}
}
}
}
})
MathJax CDN
默认情况下,MathJax 通过 MathJax CDN 提供服务。要从其他位置(包括项目中的本地位置)提供文件,必须将 src: ...
选项传递给 latex 配置。有关 src
选项的详细信息,请参阅 better-react-mathjax 文档。此外,您可能需要将 MathJax 分发版复制到您的 /public
文件夹中,以便在本地提供服务。
KaTeX 与 MathJax
使用 KaTeX,数学公式会预先渲染,这意味着页面加载无闪烁且速度更快。但是,KaTeX 不支持 MathJax 的所有功能,尤其是与可访问性相关的功能。
以下两个示例显示了使用 KaTeX(第一个)和 MathJax(第二个)渲染的相同公式。
\[\int_2^3x^3\,\mathrm{d}x \]由于 MathJax 的可访问性功能,第二个公式可以通过 Tab 键访问,并且具有上下文菜单,可以帮助屏幕阅读器重新处理视障人士的数学公式。
脚注
-
这可以通过在 Nextra 配置中设置
{ options: { src: ... } }
来更改。 ↩ -
要传递像函数这样的不可序列化对象,必须直接在源代码中使用
<MathJaxContext config={...} />
组件。 ↩