Nextra 3.0 がリリースされました。 詳細はこちら

LaTeX

Nextra は、KaTeX を使用して LaTeX 式を MDX で直接プリレンダリングするか、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-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: ... オプションを渡す必要があります。src オプションの詳細については、better-react-mathjax のドキュメント を参照してください。さらに、MathJax ディストリビューションを /public フォルダにコピーして、ローカルで提供する必要がある場合があります。

KaTeX 対 MathJax

KaTeX では、数学式は事前にレンダリングされるため、ちらつきがなく、ページの読み込み速度が速くなります。ただし、KaTeX は MathJax のすべての機能、特にアクセシビリティ関連の機能をサポートしているわけではありません。

次の2つの例は、KaTeX(最初)と MathJax(2番目)でレンダリングされた同じ数式を示しています。

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

MathJax のアクセシビリティ機能により、2番目の数式はタブでアクセスでき、スクリーンリーダーが視覚障害者のために数学式を再処理するのに役立つコンテキストメニューがあります。

脚注

  1. これは、Nextra の設定で { options: { src: ... } } を設定することで変更できます。

  2. 関数のようなシリアライズできないオブジェクトを渡すには、ソースで直接 <MathJaxContext config={...} /> コンポーネントを使用する必要があります。