24
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Github Pages で数式を ~ MathJax v3 設定のポイント

Last updated at Posted at 2019-10-17

はじめに

Github Pages で数式を使うには MathJax を組み込めばよいですが、できるだけ簡単に設定してみます。MathJax version 2 と、つい最近リリースされた MathJax version 3 を使ってみます。

なお、version 3 を使うにはすこしコツが必要です。最後にその補足をします。

ここでは以下のように「Github Pages のもろもろの設定は Github におまかせにしている」ことを想定します。

  • Github リポジトリの Settings > Github Pages > Source の None を master branch に変えただけ
    • テーマは、リポジトリの Settings で設定したか,もしくはデフォルトのまま
    • テーマのリポジトリを fork/clone して独自にカスタマイズしたりはしていない
  • 各MarkdownファイルにはYAMLフロントマター(冒頭に --- で挟んで入れる設定情報)を書いていない

もちろん一番単純には、数式を使いたいMarkdownファイルに

version2
<script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.6/MathJax.js?config=TeX-AMS_CHTML"></script>

もしくは

version3
<script async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js" id="MathJax-script"></script>

を埋め込んでおけばよいだけですが、行内 (inline) で$...$を使うなど、MathJaxのオプション設定もいろいろしたいので、それぞれのMarkdownファイルにべた書きするのは(特に数式を使いたい Markdownファイルが複数あるのであれば)手間です。

そこで以下の手順で設定します。

手順のまとめ

  1. MathJax読み込みとオプション設定をまとめた htmlファイルを _includes/ に用意
  2. 使用中のテーマの _layouts/default.html をそのテーマのリポジトリからコピーし、1 を読み込むように編集

必ずしも default.html である必要はないですが、どのテーマにもこれはあるはずなので、以下では default.html をカスタマイズすることにします。

まとめのサンプル

以下、詳しく見ていきます。

1. MathJax の読み込みとオプション設定をまとめておく

リポジトリに _includes/ というフォルダを作り、そこに MathJax の読み込みとオプション設定をまとめて htmlファイルとして保存しておきます。

バージョン2

バージョン2 用には以下のような mathjax-v2.html を用意します(設定内容はあくまで例です)。

mathjax-v2.html
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    tex2jax: {
      inlineMath: [['$','$'], ['\\(','\\)']],
      processEscapes: true
    },
    CommonHTML: { matchFontHeight: false },
    displayAlign: "left",
    displayIndent: "2em",
    TeX: {
      equationNumbers: { autoNumber: "AMS" },
    }
  });
</script>
<script async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.6/MathJax.js?config=TeX-AMS_CHTML"></script>

バージョン3

続いてバージョン3ですが、こちらは以下のような mathjax-v3.html を用意します。MathJax v3 のオプション設定は、バージョン2から大幅に変わりましたが、こちらに変換ツールが用意されています。あとはドキュメントを読む感じでしょうか。

以下は自動生成された設定スクリプトを、さらに改変したものです。

mathjax-v3.html
<script>
    MathJax = {
      tex: {
        inlineMath: [['$','$'], ['\\(','\\)']],
        processEscapes: true,
        tags: "ams",
        autoload: {
          color: [],
          colorV2: ['color']
        },
        packages: {'[+]': ['noerrors']}
      },
      chtml: {
        matchFontHeight: false,
        displayAlign: "left",
        displayIndent: "2em"
      },
      options: {
        renderActions: {
          /* add a new named action to render <script type="math/tex"> */
          find_script_mathtex: [10, function (doc) {
            for (const node of document.querySelectorAll('script[type^="math/tex"]')) {
              const display = !!node.type.match(/; *mode=display/);
              const math = new doc.options.MathItem(node.textContent, doc.inputJax[0], display);
              const text = document.createTextNode('');
              node.parentNode.replaceChild(text, node);
              math.start = {node: text, delim: '', n: 0};
              math.end = {node: text, delim: '', n: 0};
              doc.math.push(math);
            }
          }, '']
        }
      },
      loader: {
        load: ['[tex]/noerrors']
      }
    };
</script>
<script async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js" id="MathJax-script"></script>

MathJax の読み込み時に async を入れました。ignoreHtmlClassprocessHtmlClass もデフォルト値なので削除。optionsrenderActions が非常に重要ですが、これは後で説明します。

それぞれのオプションの意味は、以下のページに詳細な説明があります。

2. _includesに用意したhtmlを読み込むよう設定する

Github のヘルプにある「Customizing your theme's HTML layout」を参考に、_layouts/default.html だけ自前のリポジトリに用意してオーバライドします。

  1. 使用している Github Pages のテーマを確認する。

  2. 以下のページから使用テーマに対応するリポジトリを見つける。

  3. 2のリポジトリをたどって _layouts/default.html をコピーする(rawで表示するとコピーしやすい)。

  4. 自分のリポジトリに _layouts/default.html を新規作成し、3の内容を貼り付ける。

  5. 4 で作成した default.html の <head>...</head> の中に {% include mathjax-v3.html %} を追加する。(バージョン2ならば mathjax-v2.htmlを指定)

    default.html
    ...
        {% include mathjax-v3.html %}
    </head>
    ...
    

あとは適当に数式を書いたMarkdownファイルを用意しておき,push すると(少し待てば)数式が表示されるようになります。

補足: バージョン3での renderActions の指定について

options に renderActions を指定しています。これがないと、$$...$$ で囲った数式が表示されません。理由は次の通りです。

<script type="math/tex"> の形式を出力するプログラムは他にもあるだろうから、今後もう少し簡単に設定できるようになることを期待・・・

24
17
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?