Diary over Finite Fields

515ひかるの日記と雑文

MathJax のインライン数式記法をはてなブログの数式記法へ変換を試みる話

はてなブログで数式を書くには,

[tex:{ /* LaTeX コマンド */}]

と書けば良いはずである. 少なくとも, はてな記法あるいは Markdown 記法で記事を書いているならこの方法のはず.*1 例えば, 簡単な数式 {\sum_{n=0}^\infty a_n} は,

[tex:{\sum_{n=0}^\infty a_n}]

などと書くと表示されるはずであるが, これがはてな記法を使っているときは大丈夫なんだけど, Markdown 記法を使っているときは

[tex:{\sum\_{n=0}\^\infty a\_n}]

のように _^ をエスケープしないといけない. 他にもクセが色々存在した気がするけど, 言いたいことはただひとつ,

面倒くさい.

面倒だから一時期 MathJax を読み込ませていたのだが, スマートフォンでは見えなかったり色々と問題があったので, はてなの公式の記法にのっとって数式を書きたい.

なので, MathJax で書いた $$ で囲んだものをはてなブログでも使えるように, つまり [tex:{}] で囲むように編集するスクリプトを書いてみようと思った.

github.com

まぁこんな感じ. だいたい 数式環境は equation もしくは align にしか対応していないし, かなり不備はござりましょうが承知の上.

実は一番ハマったのは, バックスラッシュを置換するところだったりする.*2

容易に不具合が見つかるだろうと思うが, はてなブログでそこまで難しい数式は僕は書かないので, 僕としてはとりあえずはいいかという感じになっている. はてな記法への変換とかにも対応してみたいとか考えているが, 実行に移すかは不明.

とりあえず導入した機能

  • $..$[tex:{..}] に置換する.
  • \begin{equation|align}[tex:{\begin{equation|align} に置換する.
  • \end{equation|align}\end{equation|align}}] に置換する.
  • 改行を表す \\\\\ に置換する.
  • _\_, ^\^ に置換する. ただし, 現状だと Markdown で使う __hogehoge__ などの構文も置換してしまう可能性がある.

数式の部分だけ小分けにすればまだ使えるかもしれないがそれじゃ自動化の意味がないよねって感じだ.

テスト

たとえばこんな Markdown を変換しよう: test.md として

__実数列__のつくる級数 $\displaystyle\sum_{n=1}^\infty a_n$ が収束するとは, 部分和の列 $\displaystyle S_N = \sum_{n=1}^N a_n$ の極限 $\displaystyle\lim_{n \to \infty}S_n$ がある実数 $\alpha$ に収束することを言う.

\begin{align}
a + b = c \\
c - b = a
\end{align}

__こんにちは.__

__こんばんわ__

\begin{equation}
\int f d \mu = F
\end{equation}

を用意する. これを先ほどのプログラムで変換しますと: $ hateblo-latex-converter test.md

\_\_実数列\_\_のつくる級数 [tex:{\displaystyle\sum\_{n=1}\^\infty a\_n}] が収束するとは, 部分和の列 [tex:{\displaystyle S\_N = \sum\_{n=1}\^N a\_n}] の極限 [tex:{\displaystyle\lim\_{n \to \infty}S\_n}] がある実数 [tex:{\alpha}] に収束することを言う.
[tex:{\begin{align}
a\_1 + a\_2 =a\_3c \\\
c - b = a
\end{align}}]

__こんにちは.__

__こんばんわ__

[tex:{\begin{equation}
\int\_a\^b f(x) dx = F(b) - F(a)
\end{equation}}]

と変換できます. (\_\_実数列\_\_ となってしまいますが, ちょっとこの問題解決する方法はパッとは思いつかない. 原因はわかっている.)これを現在 Markdown 記法で編集しているこの記事に貼り付けてみると, 以下:

実数列のつくる級数 {\displaystyle\sum_{n=1}^\infty a_n} が収束するとは, 部分和の列 {\displaystyle S_N = \sum_{n=1}^N a_n} の極限 {\displaystyle\lim_{n \to \infty}S_n} がある実数 {\alpha} に収束することを言う.

{\begin{align}
a_1 + a_2 =a_3c \\
c - b = a
\end{align}}

こんにちは.

こんばんわ

{\begin{equation}
\int_a^b f(x) dx = F(b) - F(a)
\end{equation}}

無事成功. やったぜ.*3

これで Markdown で書いた数式*4をはてなブログに移すのが簡単になりそう, な気がする.

7/18 追記

タイトルを変えました.

*1:みたまま編集機能は長いこと使っていないのでわからない.

*2:未だに原理がよくわかっていない.もしわかったら記事を書こうかと思う.

*3:なんか改行が一部消えていたり, 不要なエスケープがされていたりする部分は手動で消しました. 俺は寝たかったんだ許せ......

*4:色々と制限はあるが