Nextra 3.0 已发布。 阅读更多

LaTeX

Nextra 可以使用 KaTeX 直接在 MDX 中预渲染 LaTeX 表达式,或使用 MathJax 在浏览器中动态渲染数学公式。要启用 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
```

示例

例如,以下 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}
```

将渲染为

勾股定理为 a=b2+c2a=\sqrt{b^2 + c^2} 和二次方程

x=b±b24ac2ax=\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},您可以使用以下配置。

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

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

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

您可以通过 Nextra 配置中的 options 键将其他选项传递给 better-react-mathjaxconfig: ... 选项设置 MathJax 配置。但是,请注意,您只能通过 Nextra 配置中的 options 键将可序列化选项传递给 better-react-mathjax2

例如,要配置 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 提供服务。要从其他位置(包括项目中的本地位置)提供文件,必须将 src: ... 选项传递给 latex 配置。有关 src 选项的详细信息,请参阅 better-react-mathjax 文档。此外,您可能需要将 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 的可访问性功能,第二个公式可以通过 Tab 键访问,并且具有上下文菜单,可以帮助屏幕阅读器重新处理视障人士的数学公式。

脚注

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

  2. 要传递像函数这样的不可序列化对象,必须直接在源代码中使用 <MathJaxContext config={...} /> 组件。