ASCIIMath を使う

2018-04-10

ASCIIMathML から ASCIIMath へ

MathML より、また TeX よりタイプ数が少ない数式記法に ASCIIMathML という処理系があった。JavaScript で数式を解析し、自前でレンダリングまで行なっていた。

これが過去形となっているのは、JavaScript で書かれた当初の処理系はメンテナンスがされていないため、 もう ASCIIMathML は使われていないからである。

しかし、数式記法のみは他のレンダリング系でも適用可能である。幸いなことに、TeX や MathML でのレンダリングで定評のある MathJax が、 ASCIIMathML の数式記法も解釈するようになっている。 現在では、ASCIIMathML の(レンダリング部分は除いた)数式記法のみを指すときに ASCIIMath と (ML を省いて)称する。

ASCIIMath がレンダリング部分を MathJax にゆだねたことで、 ASCIIMath がほとんどのブラウザで表示できるようになった。 実際の ASCIIMath の記法と表示は、MathJax のページを参照されたい。

ASCIIMath 記法の MathJax と ASCIIMathML オリジナルレンダリングとの違い

乗算記号

乗算記号は ASCIIMath=MathJax では times のみ使える。ASCIIMathML オリジナルでは times のほか XX でも可能である。

カスタマイズ

MathJax で ASCIIMath 記法を使うとき、基本的にカスタマイズはできないと思った方がよい。 少なくとも日本語では、その情報が手に入らない。英語でも難しい。 ASCIIMath でカスタマイズをしようなどという悪だくみは起こさずに、カスタマイズは TeX 記法で行いなさい、というのが MathJax の希望だろう。

一方 ASCIIMathML では、asciimath.newcommand などを使うことで容易にカスタマイズできる。 また、自前でダウンロードした ASCIIMathML.js を直接変更することも可能である。

ASCIIMath でできないこと

もちろん、ASCIIMath でできないことは多くある。

太文字のイタリック

一番困るのが、太文字(ボールド)のイタリックが表記できないことだ。 ベクトルなどで太字にすることはよくある。

ギリシャ文字のイタリック

ついで困るのがギリシャ文字のイタリックが表記できないことだ。ガンマ関数などは、イタリックにしたい。


事例の対比:基本編

文字入力表現説明備考
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 gt b`a gt b`不等号
a ge b`a ge b`等号つき不等号
a lt b`a lt b`不等号
a le b`a le 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)` 3乗根、n乗根
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_(i=1)^20k_i`sum_(i=1)^20k_i`
prod_(i=1)^20k_i`prod_(i=1)^20k_i`
{::}_(\ n)C_r`{::}_(\ n)C_r`組み合わせの数ダミーの囲みを作ってその右側として表した文字を左側添字とする
{::}^(\ t)A`{::}^(\ t)A`行列の転置同上
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`無限大
abs(-x)`abs(-x)`絶対値
norm(x-y)`norm(x-y)`ノルム
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 階微分
|\ |`| |`半角スペース
|quad|`|quad|`半角 * 2 スペース
a times b`a times b`乗算ASCIIMathML 用の a XX b は不可
a -: b`a -: b`除算MathJax 用の a div b も使える

事例の対比:応用編

下記は、基本編以外の記号である。

文字入力表現説明備考
bbbA bbbB bbbD bbbE bbbH`bbbA bbbB bbbD bbbE bbbH`二度打ち体(黒板太字)どのアルファベット大文字でも可能
CC NN QQ RR ZZ`CC NN QQ RR ZZ`二度打ち体(黒板太字)二度打ち体が可能な大文字は左記に限られる
ccB ccC ccE ccF ccH ccI ccL ccM ccR`ccB ccE ccF ccH ccI ccL ccM ccR`カリグラフ体(スクリプト体)
frC frH frI frR frZ`frC frH frI frR frZ`フラクトゥール
dotA dota`dotA dota`(時間に関する)一階微分
ddotA ddota`ddotA ddota`(時間に関する)二階微分
-=`-=`定義; (図形の)合同; (剰余の) 合同
@`@`写像
ldots cdots vdots ddots`ldots cdots vdots ddots`などなどl, c, v, d はそれぞれ low, center, vertical, diagonal と思えばよい
A^(**)`A^(**)`双対空間
A^("**")`A^("**")`第二双対空間*** は星型アスタリスク `***` になる。

基本編や応用編に出ていない記号類は、http://www1.chapman.edu/~jipsen/mathml/asciimathsyntax.html を参照されたい。