WEBにTeXを埋め込む

かつて自宅サーバを立てたのだけど、過労で死去。
自宅サーバに痕跡があります。

それを久々に復活させました。
復活と言っても、まるで別物なのだけど。

モチベーションは、このサイトで数式を気軽に使いたかったからです。
今まで、数式を書く時は結構面倒なプロセスを踏んでいました。

(1)TeXで数式を書く。
(2)dviに変換。
(3)pdfに変換。
(4)スクリーンショットを取ってトリミング。
(5)photoshopでgifに圧縮。
(6)ページに張り付ける。

面倒くさい。
しかも、アップした後に間違いに気付いて、間違ったまま残してある数式もあります。
・・・実は。

そこで、サイトに直接にTeXを書きこめるようなシステムを作ろうと思い立ちました。
Wikipediaなんかにも実装されているような感じで。

色々なサイトを参考にしつつ、4時間くらいで実装。
決して難しいシステムではありません。

10行くらいで書いている人がいたので、それをベースにしました。
QA:mimeTeXもどき
・・・って良く見たら、この書きこみ、美文書作成入門の著者の奥村さんだったんですね。

先に完成した様子を出してみると、

となります。
(これは卒研ですっかり愛着がわいてしまったポアソン方程式)

結果ではなくて過程が大事で、これを書くために自分がやらなければならないことは。
」と書くことだけです。
上の(1)~(6)で言えば、(2)~(5)を自動化したような感じ。

ここで、要求をまとめると。
(1)TeXを画像に変換するのは、最初の一回だけにしたい。
(2)lolipopはTeXの変換をしてくれないので、変換は自宅サーバで行いたい。
(3)自宅サーバじゃ不安定なので、変換した画像ファイルはlolipopに置きたい。
lolipopというのは、このサイトが置かれているレンタルサーバのことです。

それで、これをまとめると?

我ながら意味が分からない。
PHPでプログラムをするときに苦労するのが、文字コードのあたり。
特にエスケープシーケンスの扱いが未だに良く理解できてない。

数式にユニークな番号をふるのは面倒なので、数式からハッシュ値を計算してそれを数式の識別番号とします。
ハッシュ関数はmd5というやつを使います。
もし、既にこの番号が一致する画像データが存在していたら、それを表示するのみです。

そうでなければ、数式をurlencodeして、HTTPで通信できる形式に変換します。
これを自宅サーバに投げ込んで、pngに変換してもらいます。

自宅サーバ側でurldecodeすれば、元の数式が得られます。
ここで、エスケープシーケンスの処理としてstripslashesも必要。
とにかく、得られた数式を元に、再びハッシュ値md5を計算します。
同じアルゴリズムを使うので、同じ値が得られます。

数式をtex形式のファイルに書き込みます。
ファイル名は例によってハッシュ値。
これをlatexしてdviを作り、dvipngしてpngを作ります。

この処理は、PHPからsystemなる関数で行えるんですね。
これは知りませんでした。
これは、linuxができることならだいたいWEBから行えるということで、凄く便利。
他の使い方も模索したい。

とにかく、できたpngを元のサーバから読みだして、それをHTMLに表示させれば終了です。

これで数式を描くのも億劫でない!

コメント

タイトルとURLをコピーしました