2023年8月2日

昨日のまとめ。

Markdownで書いたファイルをRe:VIEWに変換してPDF化するコードが動かない。ものすごく昔は、RedcarpetがRe:VIEWレンダラを持っていたのでそれを使っていたのだが、途中でなくなったらしい。仕方なくmd2reviewを使ったが、エラーが出る。問題は数式の中にMarkdownの予約シンボルがあるとバグること。

たとえばこんなファイルを食わせてみると、

# test

$$
a_1 + a_2
$$

こうなってしまう。

= test


$$
a@<b>{1 + a}2
$$

_で挟まれた場所を太字にしようとしている。

あとはこんなのが、

# test

$$
a^*+b^*
$$

こうなる。

= test
$$
a^@<b>{+b^}
$$

さらに、改行も処理されてしまう。これが、

$$
\begin{aligned}
a &= 1\\
b &= 2
\end{aligned}
$$

こうなる。

$$
\begin{aligned}
a &= 1\
b &= 2
\end{aligned}
$$

というわけで、問題になりそうな記号類を全てエスケープしてからmd2reviewに食わせて、その後もとに戻す、という処理をしたのだが、makefileが

%.re: ../%/README.md
  ruby pre.rb $^ > $*.pre
  md2review $*.pre > $*.post
  ruby post.rb $*.post > $*.re

という感じになってダサい。おそらくRedcarpetのレンダラを自作するのがまっとうな解決策だが、そこまですべきかなぁ・・・

あれ?手元の環境にはredcarpet/render/reviewがあるぞ?なんでだ?

こんなコードを書いてみる。

require 'redcarpet'
a = $LOADED_FEATURES.dup()
require 'redcarpet/render/review'
b = $LOADED_FEATURES

puts b-a

結果。

/Users/watanabe/.rbenv/versions/3.2.2/lib/ruby/3.2.0/digest/version.rb
/Users/watanabe/.rbenv/versions/3.2.2/lib/ruby/3.2.0/x86_64-darwin22/digest.bundle
/Users/watanabe/.rbenv/versions/3.2.2/lib/ruby/3.2.0/digest/loader.rb
/Users/watanabe/.rbenv/versions/3.2.2/lib/ruby/3.2.0/digest.rb
/Users/watanabe/.rbenv/versions/3.2.2/lib/ruby/3.2.0/x86_64-darwin22/digest/md5.bundle
/Users/watanabe/.rbenv/versions/3.2.2/lib/ruby/gems/3.2.0/gems/md2review-1.12.1/lib/redcarpet/render/review.rb

md2reviewによりレンダラにrender/reviewが追加されている。なるほど。それじゃ、これを使えばいちいちファイルに何度も吐かなくて済むはずか。

ひょっとして、昔からRedcarptはRe:VIEWには対応していなくて、僕がmd2reviewを入れたからメソッドが追加されたのを勘違いしていた?

1on1たくさん。

数理物理成績確定した。わりと理想的な成績分布だったのでは。

とりあえず解析力学のリポジトリ、Redcarpet::Render::ReVIEW.newを使って一括変換する形に修正。ついでにLinterとしてRubocopを入れたが、相変わらずうるさいのでrubocop.ymlに

Metrics:
  Enabled: false

と書いてしまった。それでもまだうるさい。あと、若干動作が遅いのが気になるなぁ。