Rokiのチラ裏

学生による学習のログ

markdown から数式のみを取り出して PNG として出力し該当箇所をパスで置換

なんだか簡単な使い捨てスクリプト程度にしようと思っていたものの, 微妙にしっかり作ってしまったのでその記録. この記事の執筆時現在, このログのように, gitbook でのビルドが失敗することがある. 発生する条件としては, 文中に大量の数式があり, それを mathjax プラグインによってレンダリングしようとすると起こるようで, 元々の問題源は gitbook が利用する mozilla 発の nunjucks によるものとされていたようだが, その修正のマージ後も未だ治ってはいない*1. 元からこの問題を認知していれば良かったものの, コンテンツ内に数式が増えてきてから発生したので対応も出来ず, 今さら gitbook からなにか他のものに移行するわけにもいかず, とりあえず応急処置として, 特定のディレクトリツリーを再帰的に検査し, markdown テキストから独自のブロックで囲まれた数式のみを取り込み(このファイルのように```mr```mrendで囲んでいる), 該当部分を PNG へ出力し, さらに画像のパスに自動で置き換えるようにした. 数式が書き加えられると, 随時それを PNG にしてそのパスで置換するようにしているので, 数式を画像にしたことによって, 作業間で特別な手間を感じずには済んでいるものの, やはり画像の読み込みは重いので, そのうち自前でホストするなど、移行を考えざるをえない状況になっている.
特に gitbook の PDF 出力機能では SVG がサポートされていないために, 出力を PNG 形式で行っている. また, gitbook IO によるプラグイン, gitbook-mathjax は目次から mathjax によって変換される数式を含んだコンテンツを開くと正常にプラグインが読み込まれず, 結果として再読み込みを行う必要があるなどの問題がある. はっきり言って, 今から数式を多分に含むような文書を gitbook によって管理することは, このような理由から全くもってお勧めできない.
今回の実装では Typescript を利用したわけだが(tumblr クライアントの開発を含めて今回で 2 回目の利用), 今更ながら全体的に関数型言語っぽく書けるリスト処理に少し感動した.