Skip to Content
🎉 Nextra 4.0 已发布。dimaMachina 正在 寻找新工作或咨询机会 

LaTeX

Nextra 可以使用 KaTeX  来在 MDX 中直接预渲染 LaTeX 表达式,或者使用 MathJax  在浏览器中动态渲染数学公式。

设置

启用 latex 选项

默认情况下,LaTeX 是禁用的。要启用它,您需要在 next.config.mjs 文件中设置 latex 选项:

next.config.mjs
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 ```

应用样式

这仅适用于使用 KaTeX 作为数学渲染器的情况。

  1. 安装 katex
npm i katex
  1. 在根布局中导入 CSS
app/layout.jsx
import 'katex/dist/katex.min.css'

示例

例如,以下 Markdown 代码:

page.md
The **Pythagorean equation** is $a=\sqrt{b^2 + c^2}$ and the quadratic formula: ```math x=\frac{-b\pm\sqrt{b^2-4ac}}{2a} ```

将被渲染为:

The Pythagorean equation is a=b2+c2a=\sqrt{b^2 + c^2} and the quadratic formula:

x=b±b24ac2ax=\frac{-b\pm\sqrt{b^2-4ac}}{2a}

您仍然可以在同一行中使用 Markdown 和 MDX 语法 与 LaTeX 表达式结合。

Tip

如果您想在内容中显示 $ 而不是将其渲染为方程,您可以使用反斜杠 (\) 转义它。例如 \$e = mc^2\$ 将被渲染为 $e = mc^2$。

API

KaTeX

rehype-katex 用于预渲染您内容中的 LaTeX 表达式。您可以通过 Nextra 配置中的 options 键传递支持的 KaTeX 选项 。例如,要添加一个渲染为 \mathbb{R} 的宏 \RR,您可以使用以下配置。

next.config.mjs
const withNextra = nextra({ latex: { renderer: 'katex', options: { macros: { '\\RR': '\\mathbb{R}' } } } })

有关支持的命令列表,请参阅 KaTeX 的文档 

MathJax

当启用 MathJax 时(通过设置 latex: { renderer: 'mathjax' }),数学将在页面加载时通过 better-react-mathjax 渲染,而不是预渲染。默认情况下,MathJax 通过 MathJax CDN 提供服务,而不是直接包含在您的站点中。1

MathJax 渲染通过在 Nextra 配置中设置 renderer: 'mathjax' 来启用。

next.config.mjs
const withNextra = nextra({ latex: { renderer: 'mathjax' } })

您可以通过 Nextra 配置中的 options 键向 better-react-mathjax 传递额外的选项。config: ... 选项设置 MathJax 配置 。然而,请注意,您只能通过 Nextra 配置中的 options 键向 better-react-mathjax 传递可序列化选项。2

例如,要配置 MathJax 将 \RR 渲染为 \mathbb{R},您可以使用以下配置。

next.config.mjs
const withNextra = nextra({ latex: { renderer: 'mathjax', options: { config: { tex: { macros: { RR: '\\mathbb{R}' } } } } } })

MathJax CDN

默认情况下,MathJax 通过 MathJax CDN 提供服务。要从其他位置提供文件(包括本地项目中),您必须向 latex 配置传递 src: ... 选项。请参阅 better-react-mathjax 文档  以获取有关 src 选项的详细信息。此外,您可能需要将 MathJax 分发复制到 /public 文件夹中以本地提供服务。

KaTeX 与 MathJax

使用 KaTeX,数学会被预渲染,这意味着无闪烁且页面加载更快。然而,KaTeX 不支持 MathJax 的所有功能,尤其是与可访问性相关的功能。

以下两个示例显示了相同的公式,使用 KaTeX(第一个)和 MathJax(第二个)渲染。

23x3dx\int_2^3x^3\,\mathrm{d}x \[\int_2^3x^3\,\mathrm{d}x \]

由于 MathJax 的可访问性功能,第二个公式是标签可访问的,并且具有上下文菜单,帮助屏幕阅读器为视障人士重新处理数学。

Footnotes

  1. 这可以通过在 Nextra 配置中设置 { options: { src: ... } } 来更改。

  2. 要传递非可序列化对象(如 Function),您必须直接在源代码中使用 <MathJaxContext config={...} /> 组件。

Last updated on