概要
gatsby-remark-katex と katex を入れれば数式が書けるという説明があるのだけど、見事にハマったので原因と対処法を紹介します。
追記(2021-06-15)
不具合は gatsby-remark-katex 5.4.1 で解決した模様 Change Log
数式を表示する方法
改めてやり方を復習しておくと、こんな感じ。
プラグインのインストール
$ npm install gatsby-remark-katex katex
gatsby-config.js
plugins: [
{
resolve: `gatsby-transformer-remark`,
options: {
plugins: [
`gatsby-remark-katex`,
],
},
},
],
ブログ記事のテンプレート blog-post.js
import 'katex/dist/katex.min.css';
記事での数式の書き方
$a^2 + b^2 = c^2$
特段難しくなさそうなのだけど。。。
トラブル
数式が全く変換されずに $a^2 + b^2 = c^2$
とそのまま出力されてしまう!!
関連パッケージのバージョンは以下の通り。
- gatsby-remark-katex: 5.2.0
- gatsby-transformer-remark: 3.2.0
- katex: 0.12.0
- gatsby: 3.5.0
- react: 17.0.2
原因
不具合報告 upgrading to gatsby-remark-katex v5.0.0 and/or gatsby-transformer-remark v4.0.0 breaks katex math equation · Issue #30865 · gatsbyjs/gatsby によると、gatsby-remark-katex の実装不備が原因、もう少し詳しく言えば remark-math の利用手続きが正しくない らしい。
gatsby-remark-katex 5 は remark-math 4 (remark 13 ベース) に依存しているのだけど、remark 13 の大規模改定の影響を受けて remark-math 4 の利用方法が大幅に変更 されたようだ。remark-math の readme では、unified と rehype を利用して
- remark-parse
- remark-math
- remark-rehype
- rehype-katex
- rehype-stringify
という順番で適用する実装方法が案内されている。ところが最新の gatsby-remark-katex 5.2.0 でも、実装が古いままになっている。
対処法
対処法は2つ
- 対処法 1: gatsby-remark-katex 5 系を使わない
- 対処法 2: unified と rehype-parse を使うように gatsby-remark-katex を修正(詳細は上記の不具合報告を参照)
ここは保守的に、手間がかからない対処法 1 で行くことにした。
$ npm install gatsby-remark-katex@~4
これで無事に数式が表示できるようになった!
まとめ
とりあえず、喜びのラマヌジャンの!
バージョンアップには日頃から気をつけよう。
そして gatsby-remark-katex が早く修正される事を願う。