SIGMA-SE Math & Tech Library

SIGMA-SE Math & Tech Library


数学と情報技術をテーマに、書籍や教材だけではつかみにくい考え方を具体例とともに簡潔にわかりやすく伝える解説サイトです。
技術の歴史や背景、関連知識の整理、学習のための覚書や要約記事も掲載しています。

MathJax - MathML、LaTeX : 導入と数式表示サンプル

概要

MathJaxを使い、Webページ上でMathMLやLaTeX形式の数式を表示する方法を整理する。

技術記事では、数式を画像ではなくテキストとして扱えると、拡大表示、検索、修正がしやすくなる。

ここでは、MathJaxの読み込み、MathMLの基本要素、LaTeXによる数式表現をサンプルで確認する。

この記事の構成

実施内容

MathJaxの導入

MathJaxはCDNからJavaScriptを読み込むだけで導入できる。

  • 現行のMathJax 4.xを読み込む
    TeXとMathMLを入力として受け取り、CommonHTMLで表示する公式ドキュメントの構成例は次のとおり。
    <script defer src="https://cdn.jsdelivr.net/npm/mathjax@4/tex-mml-chtml.js"></script>
    
    mathjax@4は最新の4.x系を取得する指定である。
    再現性を重視する環境ではmathjax@4.0.0のように完全なバージョンを固定。TeXだけを処理する場合はtex-chtml.jsなど、用途に合う小さなコンポーネントも選べる。

MathMLの要素

MathMLでは、トップレベルの<math>内に<mn><mo>などの要素を組み合わせ、数式の構造を記述する。

  • このページで使う主なMathML要素

    • <math>:トップレベル要素。
    • <mrow>:複数の要素を一つの部分式としてまとめる。
    • <mi>:変数名や関数名などの識別子。
    • <mn>:数値。
    • <mo>:演算子や括弧。
    • <mfrac>:分数。
    • <msqrt>:平方根。
    • <msup>:上付き文字。
    • <munder>:式の真下に付ける要素。
    • <mtable><mtr><mtd>:表や行列、その行、セル。

※ MathML仕様には<mfenced>もあるが、ブラウザ実装を重視したMathML Coreには含まれない。
互換性を考え、このページでは<mrow>と括弧を表す<mo>を明示的に使用する。

MathMLの表示サンプル

以下の表示サンプルで確認する。

  • 黄金比

    • 表示
      1 + 5 2

    • マークアップ
      <math>
        <mfrac>
          <mrow>
            <mn>1</mn><mo>+</mo><msqrt><mn>5</mn></msqrt>
          </mrow>
          <mn>2</mn>
        </mfrac>
      </math>
      
  • 極限値

    • 表示
      lim x 0 sin x x = 1

    • マークアップ
      <math>
        <munder>
          <mi>lim</mi>
          <mrow>
            <mi>x</mi>
            <mo></mo>
            <mn>0</mn>
          </mrow>
        </munder>
        <mfrac>
          <mrow>
            <mi>sin</mi>
            <mo></mo>
            <mi>x</mi>
          </mrow>
          <mi>x</mi>
        </mfrac>
        <mo>=</mo>
        <mn>1</mn>
      </math>
      
  • 逆行列

    \(2 \times 2\)行列の逆行列を表示。ただし、逆行列が存在する条件は\(ad-bc \neq 0\)である。

    • 表示
      A = ( a b c d ) A - 1 = 1 a d - b c ( d - b - c a )

    • マークアップ
      <math>
        <mtable>
          <mtr>
            <mtd>
              <mi>A</mi>
              <mo>=</mo>
              <mrow>
                <mo>(</mo>
                <mtable>
                  <mtr>
                    <mtd>
                      <mi>a</mi>
                    </mtd>
                    <mtd>
                      <mi>b</mi>
                    </mtd>
                  </mtr>
                  <mtr>
                    <mtd>
                      <mi>c</mi>
                    </mtd>
                    <mtd>
                      <mi>d</mi>
                    </mtd>
                  </mtr>
                </mtable>
                <mo>)</mo>
              </mrow>
            </mtd>
          </mtr>
          <mtr>
            <mtd>
              <msup>
                <mi>A</mi>
                <mrow>
                  <mo>-</mo>
                  <mn>1</mn>
                </mrow>
              </msup>
              <mo>=</mo>
              <mfrac>
                <mn>1</mn>
                <mrow>
                  <mi>a</mi>
                  <mo></mo>
                  <mi>d</mi>
                  <mo>-</mo>
                  <mi>b</mi>
                  <mo></mo>
                  <mi>c</mi>
                </mrow>
              </mfrac>
              <mo></mo>
              <mrow>
                <mo>(</mo>
                <mtable>
                  <mtr>
                    <mtd>
                      <mi>d</mi>
                    </mtd>
                    <mtd>
                      <mo>-</mo>
                      <mi>b</mi>
                    </mtd>
                  </mtr>
                  <mtr>
                    <mtd>
                      <mo>-</mo>
                      <mi>c</mi>
                    </mtd>
                    <mtd>
                      <mi>a</mi>
                    </mtd>
                  </mtr>
                </mtable>
                <mo>)</mo>
              </mrow>
            </mtd>
          </mtr>
        </mtable>
      </math>
      

LaTeXの表示サンプル

MathJaxのTeX入力では、分数や行列をMathMLより短い記述で表せる。
ここでは、数式を\[\]で囲んだ別行表示の例を確認する。

  • 二次方程式の解

    • 表示
      \[ x = \frac{-b\pm\sqrt{b^{2}-4ac}}{2a} \]
    • マークアップ
      \[
       x = \frac{-b\pm\sqrt{b^{2}-4ac}}{2a}
      \]
      
  • 絶対値の定義

    • 表示
      \[ |x| = \begin{cases} x & (x\ge0\text{ のとき}) \\ -x & (x<0\text{ のとき}) \end{cases} \]
    • マークアップ
      \[
       |x| = \begin{cases}
         x & (x\ge0\text{ のとき}) \\
         -x & (x<0\text{ のとき})
       \end{cases}
      \]
      
  • \(f(x)\)の導関数

    • 表示
      \[ f'(x) = \lim_{\Delta x \to 0} \frac{f(x+\Delta x) - f(x)}{\Delta x} \]
    • マークアップ
      \[
       f'(x) = \lim_{\Delta x \to 0} \frac{f(x+\Delta x) - f(x)}{\Delta x}
      \]
      
  • ガウス積分

    • 表示
      \[ \int_{-\infty}^{\infty} e^{-x^{2}} \, dx = \sqrt{\pi} \]
    • マークアップ
      \[
       \int_{-\infty}^{\infty} e^{-x^{2}} \, dx = \sqrt{\pi}
      \]
      
  • \(n \times n\)行列

    • 表示
      \[ A = \begin{pmatrix} a_{11} & a_{12} & \ldots & a_{1n} \\ a_{21} & a_{22} & \ldots & a_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ a_{n1} & a_{n2} & \ldots & a_{nn} \end{pmatrix} \]
    • マークアップ
      \[
       A = \begin{pmatrix}
       a_{11} & a_{12} & \ldots & a_{1n} \\
       a_{21} & a_{22} & \ldots & a_{2n} \\
       \vdots & \vdots & \ddots & \vdots \\
       a_{n1} & a_{n2} & \ldots & a_{nn}
       \end{pmatrix}
      \]
      

まとめ

  • MathJaxを使うと、Webページ上でMathMLやLaTeXの数式を表示できる。
  • MathMLはHTMLに近い構造で数式を表し、LaTeXは短い記法で数式を書けるため、用途に応じて使い分ける。
  • MathJaxのscriptが正しく読み込まれない場合、数式は変換されず文字列のまま表示される。
  • HTMLの記号やブログの変換処理によるエスケープ漏れに注意し、数式を壊れないテキストとして管理すると記事を保守しやすい。

参考文献

この記事を共有
Xで共有 Facebookで共有 LINEで共有



Copyright SIGMA-SE All Rights Reserved.
s-hama@sigma-se.jp