Hugo & KaTeX

Sublime TextでTex書類を作成できるのは便利なんだけどhtmlの中に数式を埋め込みたい欲求が出てきた。

 Hugoで利用できる描画ライブラリMathJaxは遅いみたいなのでKaTeXを利用してみることにしました。
 カーンアカデミーが開発しているKaTeXはjs,css,fontファイルで構成されている。  Hugoで利用するためにはフォントフォルダにフォントを入れて、jsフォルダにkatex.js関係を入れて、サイトで使用中のテーマのstaticのcssにkatex.cssなどを入れる。Hugo serverのライブリロードで確認できる。

head.hrml

<!-- KaTeX -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.css" integrity="sha384-wITovz90syo1dJWVh32uuETPVEtGigN07tkttEqPv+uR2SE/mbQcG7ATL28aI9H0" crossorigin="anonymous">
<script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/katex.min.js" integrity="sha384-/y1Nn9+QQAipbNQWU65krzJralCnuOasHncUFXGkdwntGeSvQicrYkiUBwsgUqc1" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.7.1/contrib/auto-render.min.js" integrity="sha384-dq1/gEHSxPZQ7DdrM82ID4YVol9BYyU7GbWlIwnwyPzotpoc57wDw/guX8EaYGPx" crossorigin="anonymous"></script>

footer.html

<script>
  renderMathInElement(document.body,
    {
        delimiters: [
            {left: "$$", right: "$$", display: true},
            {left: "$", right: "$", display: false},
        ]
    }
  );

  var inlineMathArray = document.querySelectorAll("script[type='math/tex']");
  for (var i = 0; i < inlineMathArray.length; i++) {
    var inlineMath = inlineMathArray[i];
    var tex = inlineMath.innerText || inlineMath.textContent;
    var replaced = document.createElement("span");
    replaced.innerHTML = katex.renderToString(tex, {displayMode: false});
    inlineMath.parentNode.replaceChild(replaced, inlineMath);
  }

  var displayMathArray = document.querySelectorAll("script[type='math/tex; mode=display']");
  for (var i = 0; i < displayMathArray.length; i++) {
    var displayMath = displayMathArray[i];
    var tex = displayMath.innerHTML;
    var replaced = document.createElement("span");
    replaced.innerHTML = katex.renderToString(tex.replace(/%.*/g, ''), {displayMode: true});
    displayMath.parentNode.replaceChild(replaced, displayMath);
  }
</script>

index.html

<head>
  {{ partial "head.html" . }}
</head>

ファイルパスは

/themes/your_theme/layouts/partials/head.html
/themes/your_theme/layouts/partials/footer.html
/themes/your_theme/layouts/index.html

 後はLaTexでは図形を描けたけどSVGで簡単に埋め込めないものだろうか..