ASCIIMathML

Unua eldono : 2011-12-07
Lasta ŝanĝo :

MathML estas laca

Uzi MathML-n estas laca por mi. ASCIIMathML estas facila

ASCIIMath(asciimath.org)

あとはここに書いてあるように進めばよい。

以前は、下記のリンクがあった。現在、下記のリンクをクリックすると上記にリダイレクトされる。

ASCIIMathML: Math on the web for everyone(www1.chapman.edu)

ここから、最上段の Download をクリックすると、 ASCIIMathML.js (ver 2.0.2) download page という名称のページが表示される (http://mathcs.chapman.edu/~jipsen/mathml/asciimathdownload.html)。 このページで、下記のような行がある。

Here is the script: ASCIIMathML.js (right-click on the link and choose "Save Target As..." " if your browser does not display the JavaScript code)

この通り、ASCIIMathML.js の個所を右クリックして「リンク先を保存...」を選ぶ。 フォルダを指定すれば、この ASCIIMathML.js がダウンロードされる。 このファイルのバージョンは 2.1 であることを確認すること。次の表示があるはずだ。

Version 2.1 Oct 8, 2008, (c) Peter Jipsen http://www.chapman.edu/~jipsen

これより古いバージョンは使わないこと。

なお、表記をまとめたページは下記にある。

Syntax and List of Constants

さて、このファイルを インクルードすれば、簡単な表現で式が書ける。以下、対比してみよう。 なお、文字入力の事例は、福井高専の MathMLマニュアル (toshichan.be.fukui-nct.ac.jp)から、 4章の MathML Tips 集による。 ただし、文字入力で前後につけるバッククォーテーションは省略している。

なお、ASCIIMathML が使えるブラウザは限られる。 Mozilla/Firefox 系は表示がはっきりしている。また Opera (12.14) でも、 多少表示が乱れるが使える。 Google Chrome, Safari などは使えない。たとえば、Opera では、 ASCIIMathML.js をインクルードすると次のメッセージが出る。

To view the ASCIIMathML notation use Internet Explorer 6+MathPlayer or Netscape/Mozilla/Firefox

事例の対比:基本編

文字入力表現説明
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 階微分
|\ |`| |`半角スペース
|quad|`|quad|`半角 * 2 スペース

事例の対比:応用編

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

文字入力表現説明
bbbC bbbN bbbQ bbbR bbbZ`bbbC bbbN bbbQ bbbR bbbZ`二度打ち体
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`(時間に関する)二階微分
-=`-=`定義; (図形の)合同; (剰余の) 合同
|\ |`|\ |`空白
|quad|`|quad|`空白

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

事例の対比:発展編

下記は、基本編、応用編以外の記号で、自分で ASCIIMathML.js に追記させて使う場合の例である。

文字入力表現説明
bbA bba`bbA bba`太字。input:"bb" の定義行で、 atname属性を"mathvariant"に, atval属性を"bold-italic"に変更。
ccA`ccA`カリグラフ体(スクリプト体)
ttA tta
`ttA tta`テレタイプ
frA frB `frA frB` fracture, fraktur
HH PP`HH PP` 黒板太字。"HH" のoutput属性を"\u210D" で、"PP" の output 属性を"\u2119" で表すよう、 ASCIIMathML.js に追加する。
x+-y-+3`x+-y-+3` 複号。 ±はあるが、プラスとマイナスの上下が逆になったものは ASCIIMathml では用意されていない。 これを表示するためには、ASCIIMathml.js にある行{input:"+-", tag:"mo", output:"\u00B1", tex:"pm", ttype:CONST}, のすぐ下に{input:"-+", tag:"mo", output:"\u2213", tex:"mp", ttype:CONST},の行を挿入する。

なぜ ASCIIMathML.js なのか

世の中には、WEB で数式を表示する手法が多くある。たとえば、MathJax とか、mimeTeX とかがある。 MathJax は秋田大学の後藤文彦さんが推薦している。 しかし、私がこれから ASCIIMathML を使う理由は、TeX を知らないからである。 MathJax を使うには TeX を知らなければならない。面倒だ。

では、TeX を覚えればいいではないかという議論があるだろう。それについては、私は覚えないと答える。 理由はないが、あえてあげればめんどくさいのだ。 そんなのは何の理由にもならない。あえていえば、 萩谷昌己さんのエッセイ(hagi.is.s.u-tokyo.ac.jp)を読むと、 萩谷さんは Knuth の TeX をこきおろしている。これをいいことに、私は TeX を覚えないことにした。

では ASCIIMathML.js がそれの代わりになるかといえば、それは怪しい。 しかし、TeX を覚えないと決めたからには ASCIIMathML に殉じるしかない。

ASCIIMathML による証明の一例

せっかくなので、ASCIIMathML によって数学の一証明を記述してみる。 題材は、`pi` が無理数であるという証明である。この証明は、 大阪理工大学(現:近畿大学)の学生であった岩本義和(湯上義和)氏による。 これを真鍋和弘氏(札幌篠路高校)が、http://www7a.biglobe.ne.jp/~watmas/dosukyo/circle-reports/irrationalnumberbyManabe.pdf にてこの証明を紹介している。これを多少追記して記述してみる。

定理1

`pi` は無理数である。

補題1

`pi^2` が無理数ならば、`pi` は無理数である。

証明

`pi` が有理数ならば、`pi^2` は有理数である(仮に `pi = a/b` という形の有理数ならば、`pi^2 = (a^2)/(b^2)` という形の有理数になる)。この対偶をとれば、補題1が得られる。

補題2

次の関数 `f(x)`
`f(x) = x^n (1-x)^n / (n!) , n in NN`
は、次の3つの性質を満たす。

  1. `f(x) = 1/(n!) sum_(m=n)^(2n)c_m x^m` という多項式であり、係数 `c_m` はすべて整数である。
  2. ` 0 < x < 1` に対して `0 < f(x) < 1/(n!)`
  3. `AAk(>=0)` に対して、関数 `f` の `k` 回微分 `f^((k))(x)` を考える。 `x` が 0 と 1 のときの微係数 `f^((k))(0)` と `f^((k))(1)` はいずれも整数である。

証明

  1. `f(x) = x^n (1-x)^n / (n!) = x^n / (n!) (1-x)^n = x^n / (n!) sum_(m=0)^n ({::}_(\ n)C_m(-x)^(n-m)) = 1/(n!) sum_(m=n)^(2n) ((-1)^(m-n){::}_(\ 2n)C_m)x^m `
    ここで、`{::}_(\ n)C_m` は2項係数であるから証明された。
  2. `0 < x < 1` では `x^n < 1 ` かつ ` (1-x)^n < 1` 。よって `f(x)` の式から成り立つ。
  3. `x = 0` のときを考える。`k < n` であれば、`f^((k))(x)` の定数項はないから、`f^((k))(x) = 0`。 `k > 2n` であれば、`f^((k)) = 0` であるから `f^((k))(x) = 0` 。`n < k <= 2n` のときは、1. から `f^((k))(0) = (k!)/(n!) c_k` であるが、`k > n` だから `(k!)/(n!)`は整数。かつ `c_k` は 1. より整数である。したがって、`f^((k))(0)` は整数である。
    `x = 1` のときを考える。`f(x) = f(1-x)` が恒等的に成り立つから、`f^((k))(1-x) = (-1)^kf^((k))(x)` である。 よって、`f^((k))(1) = (-1)^(k)f^((k))(0)` であり、i で証明した `f^((k))(0)` が整数であることと合わせ、 `f^((k))(1)` も整数である。

補題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)` はいくらでも小さくすることができる。

定理1の証明

`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` もまた無理数である。■

解析学の紹介の次は代数学といきたいが、現代日本人の業績は知らない。 江戸時代の和算家、 関孝和が導いた結果を応用数理学会誌の読後感として書いたので、 そちらを参照されたい。

工夫が必要な表現

カッコが対応しない場合

複雑な式を ASCIIMathML で表示するために必要な工夫を紹介する。 交代化演算と呼ばれる処理では[と]の組を使うが、このカッコが同じレベルにないとおかしな表記になる。 そこで、非表示のダミーのカッコである :} と {: を使ってレベルを同じにする。

正誤表記表示
a_(j_1)^([i_1:}) cdots a_(j_r)^({:i_r])`a_(j_1)^([i_1:}) cdots a_(j_r)^({:i_r])`
a_(j_1)^([i_1) cdots a_(j_r)^(i_r])`a_(j_1)^([i_1) cdots a_(j_r)^(i_r])`

なお、ASCIIMathML オリジナルの表示では、[ が ] より大きく表示されるが、 MathJax を経由すれば同じ大きさになる。

集合の条件のバーとノルムのバーが混在する場合

数列空間 `l^2` の定義を次のように書いたとする。

l^2 -= {x={x_n}_(n=1)^oo | sum_(n=1)^oo |x_n| ^2 < +oo }

これを ASCIIMathML で表示すると次のようになる。

`l^2 -= {x={x_n}_(n=1)^oo | sum_(n=1)^oo |x_n| ^2 < +oo }`

ここで問題になるのが縦棒(バー)の大きさだ。 Σの左のバーが集合の「ただし」の条件の意味であるのに対し、右のバーは、その次のバーと組になってノルムを表す。 ところが、ASCIIMathML ではΣの両脇のバーを組としてみなしてしまい、その結果ノルムを表すバーの組が不ぞろいになる。

これを解消する一つの方法は、ノルムを表す項を見えないカッコでくくってしまうことである。

l^2 -= {x={x_n}_(n=1)^oo | sum_(n=1)^oo {:|x_n|:} ^2 < +oo }

表示は次の通り

`l^2 -= {x={x_n}_(n=1)^oo | sum_(n=1)^oo {:|x_n|:} ^2 < +oo }`

今度は、ノルムの両端の大きさは同じになったが、条件を表すバーも合わせて小さくなってしまった。 MathJax の表記であれば、条件のバーは集合を表すカギカッコと同じ大きさになる。 書評のページを参照。

もう一つの方法は、条件を表す項を見えないカッコでくくってしまうことである。 すぐ左にみえないかっこである {: を挿入して条件のバーと対にさせる。

l^2 -= {x={x_n}_(n=1)^oo {:| sum_(n=1)^oo {:|x_n|:} ^2 < +oo }

表示は次のようになり、より自然に見える。

`l^2 -= {x={x_n}_(n=1)^oo {:| sum_(n=1)^oo {:|x_n|:} ^2 < +oo }`

なお、同じようでも見えないかっこを右におく、すなわち |:} としてしまうと次のように表示され、 意図した結果が得られない。

`l^2 -= {x={x_n}_(n=1)^oo |:} sum_(n=1)^oo {:|x_n|:} ^2 < +oo }`

ASCIIMathML で対応できない表現

囲み形式

MathML には、<menclose> という要素がある。 この要素は、ある種の囲みを指示する。 具体的には下記を見てもらいたい。
http://www.w3.org/Math/testsuite/build/main/Presentation/GeneralLayout/menclose/menclose1-full.xhtml
デフォルトでは割算処理の囲みであるが、そのほかにも保険数学で用いられる囲みなど有用な表現がある。 この memclose 要素への翻訳は、ASCIIMathML では対応できない。

ASCIIMathML に追記すれば対応できる表現

太字

太字は bb などで指示することになっているが、私の環境が悪いのか、bb コマンドが効かない。 しかたがないので、bb の定義を変えて、
{input:"bb", tag:"mstyle", atname:"fontweight", atval:"double-struck", output:"mathbb", tex:null, ttype:UNARY, codes:AMbbb},
で定義されている行を
{input:"bb", tag:"mstyle", atname:"mathvariant", atval:"italic-bold", output:"mathbb", tex:null, ttype:UNARY, codes:AMbbb},
に変更している。

なお、bb の代わりに mathbb を使い、下記の通り {input:"mathbb", tag:"mstyle", atname:"mathvariant", atval:"double-struck", output:"mathbb", tex:null, ttype:UNARY, codes:AMbbb},
で定義されている行を
{input:"mathbb", tag:"mstyle", atname:"mathvariant", atval:"italic-bold", output:"mathbb", tex:null, ttype:UNARY, codes:AMbbb},
に変えたこともあった。そうすると、小文字はすべてうまくいくのだが、大文字は文字化けする。 C, N, Q, R, Zは表示されるが、これらはすべて数の集合(複素数、自然数…)を表す書体となる。

フラクトゥール

数学ではよくドイツの文字にあるひげ文字が使われることがある。正確にはフラクトゥール という(フラクタルという表記もある)が、 これがどういうわけか大文字の C, H, I, R, Z に対応するものしか表示されない。 仕方がないので、それ以外のフラクトゥールを表したければ自前で ASCIIMathML.js に書いておくしかない。 たとえば、frB という表記で、B のフラクトゥールを `frB` のように表すならば、 次の行を ASCIIMathML.js に追加する。場所は var AMSymbols の定義のところで行うのが必須で、 AMquote, の行の直後がいいだろう。

{input:"frB",	 tag:"mi", output:"\ud835\udd05", tex:null, ttype:CONST},

なお、B のフラクトゥールが "\ud835\udd05" という表記であることは、 マークアップとエンコード (www5.pf-x.net)で知った。mikeo_410 さんに感謝する。

ラテン文字表記フラクトゥール説明
Audd04`frA`
Budd05`frB`
C-`frC`
Dudd06`frD`
Eudd07`frE`
Fudd08`frF`
Gudd09`frG`
H-`frH`
I-`frI`
Judd0c`frJ`
Kudd0d`frK`
Ludd0e`frL`
Mudd0f`frM`
Nudd10`frN`
Oudd11`frO`
Pudd12`frP`
Qudd13`frQ`
R-`frR`
Sudd15`frS`
Tudd16`frT`
Uudd17`frU`
Vudd18`frV`
Wudd19`frW`
Xudd1a`frX`
Yudd1b`frY`
Z-`frS`

カリグラフ体(スクリプト体)

フラクトゥールのほかに数学では活字上の筆記体も用いられる(ちょっと形容矛盾だ)。 これはカリグラフ体とかスクリプト体とか呼ばれるらしいが、 これもどういうわけか一部の大文字アルファベット、すなわち B (`ccB`)、E (`ccE`)、F(`ccF`) 、H(`ccH`) 、I(`ccI`)、 L(`ccL`)、 M(`ccM`)、R(`ccR`) しかうまく変換できない。 これらの用途を知るため、 http://www3.fctv.ne.jp/~takamu/xml-entity-names-ja/script-ja.html を参考として推測した。

文字入力表現説明
ccB`ccB`ベルヌーイ数数
ccE`ccE`期待値
ccF`ccF`フーリエ変換
ccH`ccH`ハミルトニアン、ヒルベルト変換
ccI`ccI`複素数の虚数部
ccL`ccL`ラグランジアン、ラプラス変換
ccM`ccM`メラン変換、M行列
ccR`ccR`複素数の実数部

これらは u+2100 区にあり、Letterlike Symbols Block ということで、字のような記号がここに収められている。 これら変換できるものは script capital (B|E|F|H|I|L|M|R) のように名前が付けられている。 これら以外のものは、第1面の数学用文字数字記号で表さなければいけない。たとえば、 A の筆記体 `ccA` を ccA と打って表示したい場合は、次の行を加える。

{input:"ccA",	 tag:"mi", output:"\ud835\udc9c", tex:null, ttype:CONST},

多彩なアクセント

字の上に示す記号を仮にアクセントと呼ぶ。用意されているのは、 ハット(hat, 山形)、バー(bar, 平板)、アンダーライン(ul, 下線)、ベクトル(vec、右側)、 ドット(dot, 1点)、ダブルドット(ddot,2点)である。 あるとき、波形を出そうとしたが出ない。次の行を // diacritical marks の段落に追加した。

{input:"\\tilde",	tag:"mover",	output:"~",			ttype:UNARY, acc:true},

下付きを使う

連続和で使われる`Sigma` のほか、連続積で使われる`Pi`、最大最小の `max`、`min` 、 極限を取る `lim` 、集合の和 `uuu` 、集合の積 `nnn` は、 アンダースコア表現を指定すると右下添字ではなく真下につく。 argmax や argmin は、 min や max と同じように対象となる範囲を真下に書くが、ASCIIMathML ではアンダースコア表現では 真下にならず右下になってしまう。真下になるように定義するには、 max や min と同じように定義してしまえばよい。 そのような関数は、 //standard functions のところにあるので、argmin と argmax を追加している。

`1 = max_x (1 - |x|) `
`0 = argmax_x (1 - |x|) `

太字表現をする集合

数学の授業で、太字を表すために文字の一部を二重に書くことがある。 このような字体は活字でも用いられ、二度打ち体、二重線体、オープンフェース、黒板太字、 ブラックボードボールドなどと呼ばれる。 よく使われる黒板太字体には下記がある。

文字入力表現説明
CC`CC`複素数
RR`RR`実数
QQ`QQ`有理数
NN`NN`自然数
ZZ`ZZ`整数

http://www3.fctv.ne.jp/~takamu/xml-entity-names-ja/double-struck-ja.html 上記5例より頻度は落ちるが、H の黒板太字で四元数を、P の黒板太字で素数を、そして E の黒板太字でユークリッド空間を表すことがある。 ただこれら2例は HH や PP 、EE と打ってもそのままでは黒板太字にならないので、 HH や PP 、EE が黒板太字であることを ASCIIMathML.js の input:"CC" の前後で行を追加して output を定義しないといけない。 また、以前の ASCIIMathML.js では ee で自然対数を、ii で虚数単位を現わしていたが、 これも今はデフォルトではない。

カッコ

以下、妙な記号を付け加えているのは、論理学の本「プログラムの基礎理論」に出てくるからである。

http://www3.fctv.ne.jp/~takamu/xml-entity-names-ja/mmlalias-ja.html を参考に、カッコを調べる。

LeftDoubleBracket U+27E6 数学用左二重角がっこ MATHEMATICAL LEFT WHITE SQUARE BRACKET 左二重かっこの区切り記号 left double bracket delimiter lobrk

RightDoubleBracket U+27E7 数学用右二重角がっこ MATHEMATICAL RIGHT WHITE SQUARE BRACKET 右二重かっこの区切り記号 right double bracket delimiter robrk

謎なのは、別名の [l|r]obrk の obrk だが、o が double の意味で、brk が bracket の意味だと思えばいいだろう。

文字入力表現説明
[|`[|`左カッコ
|]`|]`右カッコ

非重複和

http://www3.fctv.ne.jp/~takamu/xml-entity-names-ja/mmlalias-ja.html を参考に、論理記号を調べる。

uplus U+228E U0228E 多重集合の集合和 MULTISET UNION /uplus B: 集合和の中のプラス記号 /uplus B: plus sign in union UnionPlus

文字入力表現説明
u+`u+`非重複和

定義記号

http://www3.fctv.ne.jp/~takamu/xml-entity-names-ja/mmlalias-ja.html を参考に、論理記号を調べる。 ≜ や ≝ は定義を表す。 ASCIIMathML.js には次の2行を入れた。

{input:"d=", tag:"mo", output:"\u225c", tex:"null", ttype:CONST},
{input:"D=", tag:"mo", output:"\u225d", tex:"null", ttype:CONST},

delta equal to U+225C U0225C

文字入力表現説明
d=`d=`定義
D=`D=`定義

公式には、下記のページのように、js ファイル本体を更新する必要はなく、 HTML のページに入れておけばいいようだ。
Extending the symbol table

ヴァイエルシュトラスのペー関数

楕円関数の一種である、ヴァイエルシュトラス(ワイエルシュトラス)のペー関数は、 ℘ と書く。 ASCIIMathML では書き方が定められていないため、Tex の \wp を流用しておく。

文字入力表現説明Unicode
wp`wp`ワイエルシュトラスの `wp` 関数U+2118

Lernejo de Marinkjo > Ĉambro de komputilo > Markup lingvo > ASCIIMathML


MARUYAMA Satosi