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 選項。例如,要新增一個渲染為 \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-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 vs. 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={...} /> 元件。