らんだむな記憶

blogというものを体験してみようか!的なー

VS Code で MathJax

VS Code はデフォルトで KaTeX をレンダラに使っているらしい。KaTeX についてはよく分かっていないので今回は MathJax を利用したい。

このためには、Markdown Preview Enhanced を使えば良いらしい。KaTeX がデフォルトのレンダラであることは同じだが、MathJax レンダラも使える。インストール後は既存のプレビューボタンに追加して、紛らわしくも同じデザインの・・・プレビューボタンが追加される。

Preferences -> Settings から Markdown-preview-enhanced: Math Rendering Option を見つけて、これを MathJax にすることでレンダラが切り替わる。

次に View -> Command Palette から Markdown Preview Enhanced: Open MathJax Config を起動して設定を追記する。例えば以下のようにすれば良さそうだ:

module.exports = {
  extensions: ['tex2jax.js'],
  jax: ['input/TeX','output/HTML-CSS'],
  messageStyle: 'none',
  tex2jax: {
    processEnvironments: false,
    processEscapes: true
  },
  TeX: {
    macros: {
      C: ["\\mathbb C"],
      Q: ["\\mathbb Q"],
      Z: ["\\mathbb Z"],
      dom: ["\\mathcal{D}"],
      del: ["\\partial"],
      bm: ["\\boldsymbol#1", 1],
      ket: ["\\left|#1\\right\\rangle", 1],
      bra: ["\\left\\langle#1\\right|", 1],
      braket: ["\\left\\langle#1\\right\\rangle", 1],
    },
    extensions: ['AMSmath.js', 'AMSsymbols.js', 'noErrors.js', 'noUndefined.js'],
  },
  'HTML-CSS': { availableFonts: ['TeX'] }
}

理屈はよく分かっていないが、extensions の最後に記載された noUndefined.js がこれをロードした時点で定義されていないコマンドを未定義のものとし、その上で AS IS で表示するように仕向けるようである。よって、ユーザー定義のマクロは extensions の前に置いておいたほうが良さそうに見える。また、他の extension で定義されるコマンドより先行して定義することで自分好みのレンダリングに仕向けることもできる。(例えば、\Z はどれかの extension で定義されているようで、これを上書きしたいなら先行定義すれば良い)

KaTeX のほうがレンダリング速度は速いと感じるのだが、とりあえず仕方がない。

KaTeX のほうの設定は ~/.local/state/mume/katex_config.js を変更して、

module.exports = {
  macros: {
    "\\C": "\\mathbb{C}"
  }
}

などとすれば良さそうだが、最初から幾つか効いているようだが・・・どうなっているのだろう?