MathJax を使う |
作成日:2013-11-24 最終更新日: |
最近この数年はASCIIMathMLを使い続けてきたのだが、 LaTeX や MathML を使った場合に比べて数式が美しくないと思っていた。 いっぽう、Web での数式表現は MathJax がいいということは聞いていたが、 LaTeX や MathML での表現でしか使えないと思い込んでいて、ろくに調べずにいた。 ところが今日、MathJax でも ASCIIMathML の表記法が使えるとわかり、試してみた。 すなわち、MathJax は LaTeX や MathML だけでなく、 ASCIIMathML の表記も理解してMathJax 固有の表示をすることができる。
ASCIIMathML は自前で js ファイルを持ってきたが、 MathJax はリモートにあるサーバを使うのがよさそうだ。 これには、<head> と </head> の間で、次の行を書けばよい。
<script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=AM_HTMLorMML"></script>
ASCIIMathML と同じように簡単な表現で式が書ける。以下、対比してみよう。 なお、文字入力の事例は、福井高専の MathMLマニュアル (toshichan.be.fukui-nct.ac.jp)から、 4章の MathML Tips 集による。 ただし、文字入力で前後につけるバッククォーテーションは省略している。
なお、MathJax は、Mozilla/Firefox 系 や Opera, Safari, Google Chrome のブラウザで表示できたことを確認した。 Internet Explorer でも使えるが、 MathML を理解させるためのアドオンである MathPlayer はかえってじゃまになるので、 もしブラウザにインストールしているのであれば無効にしなければならない。
| 文字入力 | 表現 | 説明 |
|---|---|---|
| a+b+3 | `a+b-3` | 加法、減法 |
| a b | `a b` | 乗法 |
| 1/2+1/x-x/3 | `1/2+1/x-x/3` | 除法 |
| (a+b)-3 | `(a+b)-3` | カッコ |
| (x-1)/3+1/(a+b)-(x+3)/(x-c) | `(x-1)/3+1/(a+b)-(x+3)/(x-c)` | 分数と式 |
| x^2-3^x | `x^2-3^x` | べき乗 |
| sqrt(x)+sqrt(2) | `sqrt(x)+sqrt(2)` | 根号 |
| a=b | `a=b` | 等号 |
| a>b | `a>b` | 不等号 |
| a>=b | `a>=b` | 等号つき不等号 |
| a<b | `a < b` | 不等号 |
| a<=b | `a<=b` | 等号つき不等号 |
| f(x) | `f(x)` | 関数 |
| x^(y-1/3) | `x^(y-1/3)` | |
| root(3)(x)+root(a)(3) | `root(3)(x)+root(a)(3)` | |
| sin(x+3) | `sin(x+3)` | |
| pi | `pi` | |
| log_3(x) | `log_3(x)` | |
| log_e(x)+e^x | `log_e(x)+e^x` | |
| sin^-1(x) | `sin^-1(x)` | |
| sum_(k=1)^20k_i | `sum_(k=1)^20k_i` | |
| {::}_(\ n)C_r | `{::}_(\ n)C_r` | |
| vec v | `vec v` | |
| (a_x,a_y+b_y) | `(a_x,a_y+b_y) ` | |
| ((x,3),(1,y)) | `((x,3),(1,y)) ` | 行列 |
| |(x,3),(1,y)| | `|(x,3),(1,y)| ` | 行列式 |
| dy/dx | `dy/dx` | 微分 |
| intf(x)dx | `intf(x)dx` | 不定積分 |
| int_0^1f(x)dx | `int_0^1f(x)dx` | 定積分 |
| int_1^oo1/x^2dx | `int_1^oo1/x^2dx` | 無限大 |
| |-x| | `|-x|` | 絶対値 |
| lim_(x->0)sin(x) | `lim_(x->0)sin(x)` | 極限 |
| 4+3i | `4+3i` | 虚数 |
| (delz)/(delx) | `(delz)/(delx)` | 偏微分 |
| (d^2y)/dx^2 | `(d^2y)/dx^2` | 2 階微分 |
下記は、基本編以外の記号である。
| 文字入力 | 表現 | 説明 |
|---|---|---|
| bbA bba | `bbA bba` | 太字。 |
| bbbC bbbN bbbQ bbbR bbbZ | `bbbC bbbN bbbQ bbbR bbbZ` | 二度打ち体 |
| ccA ccB ccC ccE ccF ccH ccI ccL ccM ccR | `ccA ccB ccE ccF ccH ccI ccL ccM ccR` | カリグラフ体(スクリプト体) |
| frA frB frC frH frI frR frZ | `frA frB frC frH frI frR frZ` | フラクトゥール |
| ttA tta | `ttA tta` | テレタイプ |
| dotA dota | `dotA dota` | (時間に関する)一階微分 |
| ddotA ddota | `ddotA ddota` | (時間に関する)二階微分 |
| |__x__| | `|__x__|` | 床関数。実数 `x` に対する `x` 以下の最大の整数 |
| |~x~| | `|~x~|` | 天井関数。実数 `x` に対する `x` 以上の最小の整数 |
| nn | `nn` | 集合の交わり |
| nnn | `nnn` | 集合の交わり。(`sum` のように添字集合とともに用いる) |
| uu | `uu` | 集合の結び |
| uuu | `uuu` | 集合の結び。(`sum` のように添字集合とともに用いる) |
| sub | `sub` | `A sub B` は A は B に含まれる |
| sup | `sup` | `A sup B` は A は B を含む |
せっかくなので、ASCIIMathML 記法と MathJax による表示によって数学の一証明を記述してみる。 題材は、`pi` が無理数であるという証明である。この証明は、 大阪理工大学(現:近畿大学)の学生であった岩本義和(湯上義和)氏による。 これを真鍋和弘氏(札幌篠路高校)が、http://www7a.biglobe.ne.jp/~watmas/dosukyo/circle-reports/irrationalnumberbyManabe.pdf にてこの証明を紹介している。これを多少追記して記述してみる。
`pi` は無理数である。
`pi^2` が無理数ならば、`pi` は無理数である。
`pi` が有理数ならば、`pi^2` は有理数である(仮に `pi = a/b` という形の有理数ならば、`pi^2 = (a^2)/(b^2)` という形の有理数になる)。この対偶をとれば、補題1が得られる。
次の関数 `f(x)`
`f(x) = x^n (1-x)^n / (n!) , n in NN`
は、次の3つの性質を満たす。
任意の正の実数 `c` に対し、十分大きな整数 `n` をとれば、`(c^n) / (n!)` はいくらでも小さくすることができる。
正の整数 `m` を `m > 2c` となるようにとる。すると `c / m < 1 / 2` であるから、 `n` を `m` より大きい整数とすれば、
| `(c^n) / (n!)` | ` = (c * c * * * c) / (1 * 2 * * * m) * (c / (m + 1)) * (c / (m + 2)) * * * c/n` |
| ` < (c^m) / (m!) * c/m * c/m * * * c/m` | |
| ` < (c^m)/(m!) * 1/2 * 1/2 * * * 1/2 ` | |
| ` = (c^m)/(m!) * (1/2)^(n-m)` |
ここで、`n` を大きくすれば `(1/2)^(n-m)` はいくらでも小さくすることができる。
`pi^2` が有理数と仮定すれば、正の整数 a, b によって `pi^2 = a / b` とおける。補題 2 の関数から、 新しい関数 `F(x)` をつぎのように作る。
`F(x) = b^(n)[pi^(2n)f(x) - pi^(2n-2)f^((2))(x) + pi^(2n-4)f^((4))(x) - ... + (-1)^(n)f^((2n))(x)]`
このとき、各行を展開すると `F(0)` は整数であることがわかる。なぜなら、[] 内を展開すると、 第1項は `b^(n)pi^(2n)f(0) = b^n (a/b)^n f(0) = a^n f(0)` となり、`f(0)` は補題2のiiiで整数となるからである。以下、第2項、第3項も同様にして展開し、 すべての項が整数であるから、`F(0)` は整数である。同様に、`F(1)` も整数である。さて、 `F(x)` の x に関する 2 回微分は
`(d^2)/(dx^2) F(x) = b^(n)[pi^(2n-2)f(x) - pi^(2n-4)f^((2))(x) + pi^(2n-6)f^((4))(x) - ... + (-1)^(n-1)f^((2n))(x)]`
となる(なお、`f(x)` は `x` の `2n` 次式だから、`f^((2n+2)) = 0` である) 。これと `F(x)` の元の式から
`(d^2)/(dx^2) F(x) = F^(′′)(x)= -pi^2F(x)+b^n pi^(2n+2) f(x)`
となる。また、
| `d/(dx)[F^(')(x)sin pi x - pi F(x) cos pi x]` | `=[F^('')(x)+ pi^2F(x)] sin pi x` |
| `=b^n pi^(2n+2)f(x) sin pi x` | |
| `=pi^2 a^2 f(x) sin pi x` |
となるので
| `alpha = pi int_0^1 a^n f(x) sin pi x dx` | ` = [1/pi F^'(x) sin pi x - F(x) cos pi x]_0^1 ` |
| ` = F(0) + F(1)` |
は整数となる。一方、補題2の ii より、
` 0 < pi int_0^1 a^n f(x) sin pi x dx < (pi a^n)/ (n!)`
となる。したがって、十分大きな n に対して、
`0 < alpha < (pi a^n)/(n!) < 1`
となる(補題3も参照)。`alpha` は整数であったからこれは矛盾である。 よって `pi^2` は無理数であり、補題1より `pi` もまた無理数である。■
解析学の紹介の次は代数学といきたいが、現代日本人の業績は知らない。 江戸時代の和算家、 関孝和が導いた結果を応用数理学会誌の読後感として書いたので、 そちらを参照されたい。
まりんきょ学問所 > コンピュータの部屋 > マーク付け言語手習い > MathJax を使う