まだ、使い始めたばかりだけどとりあえずできたのでメモ。環境は以下のとおり。
- Debian GNU/Linux squeeze
- Ruby 1.8.7
- Ruby on Rails 2.3.8
- SQLite3 3.6.23.1
実験用プロジェクトの作成
% rails math % cd math % ruby script/generate scaffold equation title:string equation:text
jsMathのダウンロード
jsMath公式から、jsMathとフォントをダウンロードする。今回は以下をダウンロードした。
- jsMath-3.6e.zip
- jsMath-fonts-1.3.zip
これを public/javascriptsにjsMathというディレクトリを作ってそこに置くこととする。
% cd public/javascripts % unzip ~/jsMath-3.6e.zip % mv jsMath-3.6e/ jsMath % unzip ~/jsMath-3.6e.zip
Webブラウザで public/javascripts/jsMath/test/index.html を開いて jsMathがちゃんと動いていたらインストール成功。
jsMathをRuby on Railsから使う
まずは、データベースを作成する。
% rake db:migrate % ruby script/server
http://localhost:3000/equations/ にアクセスしてRuby on Railsがちゃんと動いていることを確認する。
次に、jsMathを呼び出す設定をする。app/views/layouts/equations.html.erb に次のように編集する。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> <title>Equations: <%= controller.action_name %></title> <%= stylesheet_link_tag 'scaffold' %> <%= javascript_include_tag 'jsMath/easy/load.js' %> #変更点 </head> <body> <p style="color: green"><%= notice %></p> <%= yield %> </body> <script> jsMath.ConvertTeX() </script> #変更点 </html>
次にpublic/javascripts/jsMath/easy/load.jsを編集する。以下の項目に関して1(有効にする)、0(向こうにする)を決定する。デフォルトは以下のとおり。
processSlashParens: 1, // process \(...\) in text? processSlashBrackets: 1, // process \[...\] in text? processDoubleDollars: 1, // process $$...$$ in text? processSingleDollars: 0, // process $...$ in text? processLaTeXenvironments: 0, // process \begin{xxx}...\end{xxx} outside math mode? fixEscapedDollars: 0, // convert \$ to $ outside of math mode? doubleDollarsAreInLine: 0, // make $$...$$ be in-line math? allowDisableTag: 1, // allow ID="tex2math_off" to disable tex2math?
LaTeXのmathモード(文中で使える。LaTeXでは、$〜$で囲う)に関する設定は以下のとおり。
- processSlashParens : 文中の \(〜 \)で囲われた部分を数式に読み替える。
- processSingleDollars: 文中の $〜$で囲われた部分を数式に読み替える。
- < span class="math" > 〜 < / span > :HTMLレベルでは、上の囲い記号はこれに変換される。
LaTeXのdisplaymathモード(数式が1行表示される。LaTeXでは、\[〜\]で囲う)に関する設定は以下のとおり。
- processSlashBrackets : 文中の \[〜 \]で囲われた部分を数式に読み替える。
- processDoubleDollars: 文中の $$〜$$で囲われた部分を数式に読み替える。
- < div class="math" > 〜 < / div > :HTMLレベルでは、上の囲い記号はこれに変換される。
とりあえず、デフォルトの設定のままとする。
http://localhost:3000/equations/にアクセスし、データを追加してみる。Titleに
\(a^2\)の奇跡
equationに
\[\sum_0^n \frac{n^3(n+1)}{2}\] \[ \int^1_\kappa \left[\bigl(1-w^2\bigr)\bigl(\kappa^2-w^2\bigr)\right]^{-1/2} dw = \frac{4}{\left(1+\sqrt{\kappa}\,\right)^2} K \left(\left(\frac{1-\sqrt{\kappa}}{1+\sqrt{\kappa}}\right)^{\!\!2}\right) \]
を入力し、showでちゃんと数式が表示されたら成功。
覚書
SQLのエスケープ文字とLaTeXの数式で使う記号が被らないかを調べないとセキュリティホールを作り込んでしまいそう。
- SQLインジェクションに関しては、ActiveRecordのバインド記法を使えば大丈夫そう