最近自分がいつまでこの作業を続けられるか,考えることが増えてきました.もちろん,必要とされないなら,なくなってしまっても構わないのですが,作った本人としては,引き継いでくれる人がいたら続けていってほしいという思いはあります.
現時点で,そういう人はいませんが,万一やってもいいよ,という人が出てきたときのために,どんなふうに作っているのかをできるだけ説明しておこうと思います.それと同時に,他の方でMathMLを使ってみたいという方がいらしたら,そうした方への参考になれば,と思います.
以下,MathMLの使い方から,私が気をつけていることまで,問題作成の合間を見て作っていきたいと思います.ただし,これはあくまで私が気をつけていることですので,MathML全般の説明ではありませんし,場合によってはMathMLの本来の記述方法からするとまちがった説明の場合もあります(私自身が誤解してることもあると思いますので).
これ以下の部分はまったく必要なくなったようですね.随分前に変わったらしいのですが,全然しりませんでした.宣言なしで<math>だけで数式が表現できるみたいです.浦島太郎の私.(2021/9/16)
まずは,MathMLのページを作るための準備作業です.
私は現在,xmlファイルで問題のページを作成し,xmlファイルができたところでそれを複製し,MathJaxのタグを加えてhtmlファイルにしています.MathML3のバージョンだとxmlにしなくてもよくなったらしいのですが,過去に作成したxmlファイルとそのリンクをすべてhtmlに変える作業は膨大になるため,変更作業はやっていません.また,xmlをhtmlに変えた時にきちんと表示できるのか,という実証試験もしていません.
ともあれ,まずはxmlファイルにMathMLを記述する準備として,xmlファイルの冒頭でしなくてはならない宣言について説明します.
通常のhtml文書では,「<!DOCTYPE html...」で始めると思いますが,MathMLを使うためには,そのまえ,およびあとに次のように宣言を追加してあります.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
以上の宣言については福井工業高等専門学校の辻野先生のサイトでも説明されているので,そちらも参照してください.ただし,辻野先生の説明では「encoding="Shift-JIS"」になっていますが,私のサイトではUTF-8にしてあります.また,3行目の「plus MathML 2.0」のあとに「plus SVG 1.1/EN」を追加しています.
私が使っている宣言文はMathML 2.0になっていますが,現在MathMLは3です.なおしたほうがいいのでは,と思ってはいるのですが,直すとなると全ファイルをいじることになるのでやってません.
ネットで調べていたら,HTML5になってWebもかなり変わってしまったようです.HTML5だと,MathMLもSVGもとくに宣言しなくてもよくなったみたいですね.浦島太郎的気分です.それから,あいかわらずMathMLが普及していない,とこぼしている方もあるようです.私も同感です.
宣言文にSVGの宣言を入れていますが,実際のところはSVGで図を作るのは試験的にしかやっていません.MathMLの記述はかなり楽になったのですが,SVGの入力はMathML以上に大変で,Illustratorを利用したうえでテキスト部分をMathMLに直す作業は気が遠くなる程手間がかかります.でももし時間の余裕があるならぜひやってみたいことではありますが.
SVGて,何なの?と思われた方もあるかもしれません.SVGとは,W3Cで策定された,インターネット上でベクターグラフィック(画像をドットではなく,関数で描く手法)の画像をあつかうためのデータ規格です.関数で計算して点,線,面を描くので,拡大しても画像があれることがありません.上で述べたように,ADOBEのIllustratorがベースになったものです.というわけで,SVGで作れば,画面の拡大,縮小によってジャギーが出ることがなく,印刷も非常にきれいにできます.表示がどんなものかはSVGテストを参照してください.ページを拡大してもらうと,その威力がわかると思います.
ただ,簡単な図ならいいのですが,少し複雑な画像になるとスクリプトがとても長くなり,メンテナンスも大変になります.もっと使いやすくならないか,と思うのですが.
正直言ってエンコードの知識がほとんどなくて,ユニコードの文字を表示させるためにはUTF-8がいいかな,程度の気持ちで採用したのですが,そうはいっても,当初encoding="UTF-8"にたどり着くにはずいぶん時間がかかったような気がします.ユニコードの一覧表(EntityList)を見てもらうとわかると思いますが,数学で使われる特殊な文字が相当充実しています(足りない文字もありますが).こうした文字を表示させるためにはShift-JISでは無理だと思いました.機種依存文字になっていたり,そもそも文字種が存在しないなどで,ShiftJISではなくユニコードが必須だという結論になりました.
ところが,私がその当時知っていたテキストエディタ(たとえばMac標準のテキストエディットなど)ではエンコーディングでUTF-8に設定できるものがなく,この段階でずいぶん悩みました.
結局,上山さんが作られた「mi」というテキストエディタにたどり着きました.mi は本当に使い勝手のよいテキストエディタです.UTF-8に設定できるのはもちろんですが,キーワード機能を利用して,やりがちな入力ミスをフォントの色で知らせてもらう,とか,HTMLコードの対応する文字列をコマンドJで自動入力する(たとえば,<p>が入力された後でコマンドJを押すと自動で</p>が入力される)機能,コントロールと英文字を押すと登録した文字列を入力できるキーバインド機能,あらかじめ範囲指定をしておくと置換の範囲を特定できる,など,作業効率が格段にアップしました.このサイトがここまで作り続けられたのは mi のおかげだと,大変感謝しています.
ですからMathMLを使ってサイトを作るときは,最低でも対応文字列の入力機能のあるエディタが必須です.それにキーバインド機能があるとさらによいと思います.
なお,私が使っているユニコードの主な実体は次のようなものです.括弧の中が実体参照です.
±(±),×(×),⋅(⋅内積あるいは積),÷(÷),≠(≠斜め線が左から右下のものは表示がきたないのでしかたなくこちらを使うことにしました),<(<),>(>),≦(≦),
≧(≧),∈(∈),∪(∪),∩(∩),
⊂(⊂),⊃(⊃),∧(∧),
∨(∨),≡(≡,合同),
∽(∽,相似),⫽(⫽,平行.形が気に入らないのですが),⊥(⊥,垂直),
°(°),∠(∠),▵(▵),
⋯(⋯規則的に続くことを表す記号),
∑(∑,Σでも同じ文字ですが,これだと後述のようにストレッチができないので∑を使います),
∫(∫),ギリシャ文字(α,β,γ,δ,λ,μ,π,σのなど),
ローマ数字(ⅰ,ⅱ,ⅲ,⋯),
丸付き文字(①,②,③,⋯,ⓐ,⋯)
そのほか各種の矢印→(→),↗(↗)↘,(↗),
⤵(⤵),⤷(⤷)
ここも,現在,最初のタグは<math>に変えてます.(2012/9/16)
宣言でMathMLの準備ができたら,通常のHTMLのように<body>タグの中に文章を入力するわけですが,その文章の中に数式を組み込む場合,その冒頭に
<math xmlns="http://www.w3.org/1998/Math/MathML">
としてから数式の入力をしていきます.これも,現在は<math>だけでいい,となっているようですが,私が作っているページでは毎回xmlns以下も省略せずに記述しています.数式部分が終わったら</math>で閉じます.たとえば
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mi>x</mi>
</math>
と記述すると,「」と表示されます.
と表示するだけのために,ずいぶん長いスクリプトになってますね.これなんかはまだ可愛い方で,例えば2次方程式の解の公式
のスクリプトは
<math
xmlns="http://www.w3.org/1998/Math/MathML">
<mi>x</mi><mo>=</mo>
<mstyle displaystyle="true"><mfrac>
<mrow><mo>-</mo><mi>b</mi><mo>±</mo><msqrt>
<msup><mi>b</mi><mn>2</mn></msup><mo>-</mo>
<mn>4</mn><mo>⁢</mo><mi>a</mi><mo>⁢</mo>
<mi>c</mi></msqrt></mrow><mrow><mn>2</mn>
<mo>⁢</mo><mi>a</mi></mrow></mfrac></mstyle></math>
となります.これを見て何が書かれているのか,すぐにはわからないと思います.この,入力がめんどうなこと,視認性がわることのために,MathMLが人間の入力向きではない,といわれるわけです.
上のスクリプトはタブレーションを入れず,1行に入るだけいれています.画面内で見渡せて,メンテナンスをやりやすくするためです.W3CのMathMLのページのサンプルスクリプトなどをみると
<math xmlns="http://www.w3.org/1998/Math/MathML">
<mi>x</mi>
<mo>=</mo>
<mstyle displaystyle="true">
<mfrac>
<mrow>
<mo>-</mo>
<mi>b</mi>
<mo>±</mo>
<msqrt>
⋯
のように,タブ付けして書かれています.たしかにサンプルとしてはこの方が見やすいのでしょうが,実際の数式でこれをやると延々と改行が続くことになります.見直しや修正をするとき,これでは修正箇所を探すのが大変なので,私のファイルでは上の例文のように40〜70文字程度までは改行せず,タブもつけずに書いて,1画面の中でできるだけ見渡せるようにしました.
mathタグには,displayという属性でblockとinlineというのがあります.それぞれ,文字のごとく,blockは,前後の文章から切り離して式だけを表示するという属性,inlineは文章の途中で式を表示させる属性,だと思うのですが,私は採用していません.どうして使わなくなったかは覚えていないのですが,たぶんどちらでも表示に差がなかったからだと思います.でも,もしかしたら将来影響がでるかもしれませんね⋯
それから,ついでなのでここに書いておきますが,文章中に<math⋯>⋯</math>を入れる場合,スクリプトを改行なしで続けると直前・直後の文字と式の間がやたら詰まって見えます.次をみてください.
「方程式の解は⋯」
そこで,<mspace width=".2em"></mspace>というタグを使うなどして少しだけ間をあける処理をしています.この処理をすると次のようになります.
「方程式 の解は⋯」
このスクリプトは
「方程式<math
xmlns="http://www.w3.org/1998/Math/MathML">
<mspace width=".2em"></mspace><msup><mi>x</mi>
<mn>2</mn></msup><mo>=</mo><mn>1</mn>
<mspace width=".2em"></mspace>
</math>」の解は⋯」
となります.
また,日本文の行の中に式を組み込む際,日本語の文と<math⋯,</math>と日本文の間に改行をいれないように気をつけています.視認性をよくしようとして改行をいれてしまうと,ブラウザが,空白があると解釈してしまうようです.これはMathMLに関してだけの問題ではなく,日本文でも理由なく文章の途中で改行すると変な空きができてしまいますので,どんなに長い文章でも意味のない改行は入れないようにしています.この空きの広さはブラウザに依存してしまうため,必要以上に広がったりせまかったりしますので,安定した見栄えを保つために避けることにしました.もちろん<mspace⋯>でも空白の幅を確実にコントロールできるわけではありませんが,こちらのほうがまだましかな?という感じです.一方MathMLの中ではLaTEXの作法と同様,改行は意味を持たないので,MathMLの中でどれだけ改行しても表示に問題はおきません.
ただ,<:mspace⋯>を使うのは常にというわけではなく,例外があります.また,<:mspace⋯>を使わずに間をあける別の手法を使うこともあります.それから,当たり前ですが,改行して式だけを単独で表示する場合や,行の冒頭の式の場合の冒頭箇所は間を開ける処理はしていません.このあたりのことは,おいおい詳しく述べたいと思います.
<math>と</math>の間にいれる要素ですが,数式で必要とされるものが大量に定められています.どんな要素があるか,包括的に見たい方はMozillaのサイトのMathMLのリファレンスの「MathML要素リファレンス」の項をご参照ください.ここでは,私が使っている要素に限ってあげてみます.
それでもたくさんあります.一つ一つの説明は後ほどしますが,<menclose>,<mfenced>,<mfrac>,<mi>,<multiscripts>(これに付随して<mprescripts/>という要素もあります),<mn>,<mo>,<mover>,<mpadded>(これは,以前センターの選択肢番号を表示するのに使っていましたが現在は使っていませんので,説明も控えます),<mroot>,<mrow>,<mspace>,<msqrt>,<mstyle>,<msub>,<msup>,<mspace>,<msubsup>,<mtable>,<mtd>,<mtr>,<munder>,<munderover>(以上アルファベット順)です.さらに,これらの要素には属性をつけることができます.いろいろな属性がありますが,やはり私が実際に使っている属性にしぼって以後で説明しましょう.また,各要素にはcssでスタイルを追加することもしています.ただ,MathMLに追加されたcssのスタイルはMathJaxでは無視されてしまいます.そんなこともあるので,MathJaxは,まだまだ開発途上という気がします.ことに,できるだけきれいな印刷をしたい,と考えている私にとっては,MathJaxでは満足できません.といっても現在のMathMLでも不満足な点はたくさんあるのですが.そのあたりもその都度説明していきます(<mspace>は上で説明していますが...)
それぞれの要素には子要素として文字や数字,記号を入れることができるものと,他の要素を子要素として入れ子にもつものとがあります(例外は<mprescripts/>で,これは子要素をもちません).ちなみに,数字が入るのが<mn>,変数などの文字が入るのが<mi>,演算子(+や-など)が入るのが<mo>で,これらは他の要素を入れ子にはできません(もちろん他の要素の中に子要素として入ることはできますが),逆に,これ以外の要素は,すぐ内側に数字や文字,演算子を入れることはできません.他のタグを子要素としなくてはならないわけです(なんか,わかりにくい説明ですね...).もしmn,mi,mo以外のタグで数字や英文字をいれると,MathMLでは無理やり表示してくれますが,MathJaxではエラーになってしまいます.
<mn>,<mi>,<mo>はHTMLでの<p>タグのようなもの,それ以外のタグは<div>タグのようなもの,といえばよいでしょうか.
ともあれ,以下にそれぞれのタグの使い方,注意点などを述べてみます.
まず<mn>ですが,これは子要素として数値だけをとるタグです.たとえば
<mn>1</mn>とか<mn>1.5</mn>
とかです.
実際の表示は
とか
となります.<mn>タグは,数値,しかも整数と小数についてだけしか使いません.かなり限定的な利用になります.私のサイトでは<mn>タグには属性を加えたりCSSで修飾を加えることはしていません.
なお,例えば
「次関数」とか「次式」,「さいころのからまでの目」
など,問題文中で多少でも数値に関連する箇所はすべてMathMLにしてあります.これは,式の中の数値の部分と同じ字体にしたいからです.一方問題番号は,数字ではありますがMathMLに入れないようにしました.例えば【1】とか(1)とかです.
次に<mi>ですが,これは文字定数,未知数,変数,関数名などに使うことになっています.関数名ですので,sinやcos,tan,log,limなども入ってきます.それから,虚数単位や自然対数の底,無限記号,後に続くことを表す⋯なども入ります.これをMathMLで表示させると
となります.ご覧のように,デフォルトの状態では<mi>の中が1文字だと斜体になり,2文字以上だと立体(斜体ではないまっすぐな文字)になります.ただし無限記号などは例外で,1文字なのに立体ですが・・・(例外は他にもあります.以下を見てください).虚数単位や自然対数の底については,ユニコードでⅈやⅇといった参照実体が用意されていますが,私のサイトでは使っていません.この2つを実際に表示させると下のようになります.
ブラウザによって表示がいろいろ変わり,大学入試での表記と違う場合があるので,私のサイトでは大学入試や教科書で普通に使われている字体とするため,<mi>i</mi>と<mi>e</mi>にしています(表示は上を見てください).
次に,例えば「点A」(このAはMathMLに入れていないので,違和感があると思います)などというとき,この「A」は数値ではありませんから<mn>にいれるわけにはいきませんが,1文字でも立体で表示させたいところです.そこで<mi>に属性値mathvariant="normal"を入れて<mi>の子要素を立体表示にしています.
<mi mathvariant="normal">A</mi>
これで,<mi>の子要素が1文字であっても立体で表示できます.次のように表示されます.
点
mathvariantの属性値はnormal以外にもいろいろありますが,私が使っているのはこれだけです.
また,次の<mo>にも関連しますが,MathML本来の記述方法では<mi>を使うべきところを,私のサイトでは<mo>を使っているところがあります.いくつかあるのですが,一つは▵や∠を使う場合で,もう一つは∑や∫を使う場合です.順に説明します.
▵は三角形の記号,∠は角を表すための記号です.MathMLによると,いずれも<mi>に入れて使うようです.この2つは単独で使うのではなく,たとえば(三角形)のように,うしろに図形を特定する文字が続く形になります.ですから,本来は「<mi>▵ABC</mi>」とすべきところです.これを実際に表示すると,
とか
となります.ところが,例えば∠Aなどとなったとき,Aだけは斜体にしたい,という状況がおきます.つまり
としたいわけです.ここを,MathMLの本来の記述にしたがって<mi>∠A</mi>とすると
となってしまいます.そんな細かいことどうでもいい,といってしまえばそれまでですが,これが気になるため,▵や∠を独立させ,その際,<mi>に入れるのではなく<mo>に入れてしまいました(私の誤解もあったのですが).結果,今に至る,です.
もう一つの,∑と∫ですが,これはそれぞれシグマ記号と積分記号です.実際の表示は
となります.上は<mi>タグに入れて表示しました.同じものを<mo>タグに入れて表示すると
となります.なんだ,かわらないじゃないか,とお感じだと思います.ちなみに,<mi>で表示している方のシグマは,1文字であるにも関わらず立体になっている点に気づくと思います.これも,特定のキャラクタをブラウザ側で調整してくれているためのようです.
では,なんで<mi>を使わず<mo>にするか,なんですが,次を見てください.
シグマの一般的表現
<munderover><mi>∑<mrow><mi>k</mi>
<mo>=</mo><mn>1</mn></mrow><mi>n</mi>
</munderover>
定積分の一般的表現
<msubsup><mi>∫<;/mi><mn>0</mn>
<mn>1</mn></msubsup>
この例を実際に表示すると次のようになります.
どんなふうに見えていますか?これも,個人的な趣味の問題にはなるのですが,私はシグマやインテグラル記号が小さすぎという気がします.この後ろに分数式などがくる場合を考えると,もう少し大きくなってほしい,と感じました.それで,<mstyle>というタグの中にdisplaystyle="true"という属性値を入れることで大きさのコントロールができるはずだ,と考えました.その場合スクリプトは
シグマが
<mstyle displaystyle="true">
<munderover><mi>∑<mrow><mi>k</mi>
<mo>=</mo><mn>1</mn></mrow><mi>n</mi>
</munderover></mstyle>
定積分が
<mstyle displaystyle="true">
<msubsup><mi>∫<;/mi><mn>0</mn>
<mn>1</mn></msubsup></mstyle>
となり,これを表示すると
となります.どうでしょうか,大きくなっていますか?上の場合は∑と∫を<mi>に入れていますが,もうひとつ,∑,∫を<mo>に入れたものを表示してみます(上のスクリプトの<mi>∑</mi>,<mi>∫</mi>の部分を<mo>∑<mo>,<mo>∫</mo>に書き換えました).次のようになります.
こちらの方はどうでしょう.大きくなっていますか?
じつは,FireFoxのバージョンの違いか,それともMacOSのバージョンの違いかはわからないのですが,私の手元のパソコンだとmiに入れたときにmstyleで大きくなる場合とならない場合がおこっています.miの場合は,mstyleの解釈が私の思い通りにできていないことがあるようです.moに入れた場合は私の環境ではどちらも同じく大きくなっています.MathMLの勧告に従うならばmiにすべきところですが,当面はmoで作っていきます.なお,moというタグですが,これもmnと同じく子要素の表示が立体になるタグです.でもインテグラル記号は立体になっていませんね.これも自動で調整してくれているようです.
すみません.なんだか,本人にもよくわからないことが多くて,説明もわかりづらいと思います.
<mi>には物理単位もいれることになっています.たとえば,
<mrow><mn>30</mn><mo>⁢</mo>
<mi mathvariant="normal" class="MathML-Unit">°</mi></mrow>
ですが,これは
となります.つまりmathvariant="normal" class="MathML-Unit"という属性とCSSで,物理単位であることを表現しています.class指定の class="MathML-Unit"は別にcssの指定はしていませんので,なくてもいいのですが,物理単位であることが明確になるようにしています.
なお,お気づきと思いますが,30と°の間に<mo>⁢</mo>という,先ほどあげた非表示の積の記号が入っています.数値に物理単位をかける,という意味をMathMLで表していることになります.
単位については,
の他,
などがあります.
さらに,<mi>タグについては,私のイレギュラーな使い方として,「A君とB君でゲームをして」とかのA,Bも<mi mathvariant="normal">を使ってMathMLの中に入れています.
<mi mathvariant="normal">A</mi>
などとして,実際に表示すると
「君と君がゲームをして」
という風になります.その際,「A」と「君」の間,「と」と「B」,「B」と「君」の間には,前にお伝えしたように,<mspace width=".2em">を入れて少し空きを作るようにしてあります.
このタグは,上ですでに登場しましたが,本来は演算子(プラス,マイナスや等号,不等号など)に使うもののようです.演算子として実際に使っている主なものをあげると,
+,-,±(±),×(×),⋅(⋅内積あるいは積),÷(÷),=,≠(≠ 斜め線が左から右下のものは表示がきたないのでしかたなくこちらを使うことにしました),<(<),>(>),≦(≦),≧(≧),∈(∈),∪(∪),∩(∩),⊂(⊂),⊃(⊃),∧(∧),∨(∨),≡(≡,合同),∽(∽,相似),⫽(⫽,平行.形が気に入らないのですが),⊥(⊥,垂直)
これ以外に,moに入れて使っている記号は,
→(→),‾(‾,のように上につける線),
さらに,表示はされないのですが,例えばは,xとyの間に⁢(invisibletimes)という参照実体を入れてあります.または,fと(の間に⁡(applyfunction)という参照実体をいれてあります.これは,人間の慣習では省略することになっているが,このままでは式の意味があいまいになってしまうのを防ぐためのようです.これだけであいまいさをなくせるわけではありませんが,私のサイトでは積や関数がでてきたら,表示に影響はないけれどもできるだけ⁢と⁡を入れるようにしています.
とりあえず思いついたものだけでもこれだけあります.気がついたらあとで追加します.上に上げたものはほとんどがユニコードの実体参照で呼び出しています.()内の&つきのものが実体参照です.ユニコードでないとこうした文字が使えず,数式の表現がほとんどできないと思います.
さらに,<mi>のところでも書いた,
(▵),(∠),(∑),
(∫)それから,(′,ダッシュ記号)
があります.
これ以外に<mo>タグに入れている重要なものとして,括弧があります.(,),),{,},[,],|(絶対値記号),が主なものですが,他にもガウス関数の括弧など,何種類かあります.加えて,座標の中の数式の区切りのコンマ「,」も<mo>に入れています.
実は,括弧のためには<mfenced>というタグがあり,この中で,open=" ",close=" ",separators=" "という属性を使うと座標などが表現できることになっています.実際に使ってみます.
<mfenced open="(" close=")" separators=","><mn>1</mn><mn>2</mn><3</mn><mfenced>
とすると,次のように表示されます.
しかし,私は<mfenced>は使っていません.なぜ<mfenced>を使わないかというと,括弧の前後の空きがコントロールできないこと,それから括弧が自動でストレッチ(中の式にあわせて括弧が上下に広がること)され,コントロールができなことがあるためです.その説明のために,まず<mfenced>での表示例をいくつかあげてみます.
続いて,同じものですが<mfenced>を使わす,<mo>で記述した表示例です.
違いが目立つものもありますが,あまり違いがないものがおおいですね.ですが,細かく比べてみましょう.最初の例では,分数を含む座標ですが,<mo>の方は括弧と分数,分数と分数の間のコンマとの空きのコントロールができています.この方がすっきりしているでしょう.2番目の例では,2次式を含む座標です.今度は<mo>は括弧がストレッチしないようにコントロールしています.このために使っているのが,
<mo stretchy="false">
の,strechy="false"という属性で,これでストレッチしないようにしています.3番目の絶対値の例では,最初の例と同様,<mo>の方では絶対値記号の前後に空きをいれています.4番目.5番目の例は,<mo>の方ではストレッチしないようにコントロールしています.
正直言って,ストレッチのコントロールは,ストレッチするかしないかという2択しかできません.本当は,もっと微妙に大きさのコントロールができるといいのですが.これはMathMLの勧告の限界ですね.例えば
は,ブラウザや環境によっては括弧が大きすぎて格好がよくありません.細かくコントロールする方法を取り入れてほしいところです.
<mo>の属性としては,lspace="",rspace=""というものも多用しています.想像がつくと思いますが,lspaceは左側,rspaceは右側に指定した空きを作るものです.この属性は,<mo>に対してだけ指定できるようです.これは,括弧の前後で空きが欲しいとき,<mspace width=".2em"></mspace>よりもスクリプトを短くできるのでそのかわりに使っています.つまり,空きを作る方法としては,<mspace...>と<mo lspace="">,<mo rspace="">の2通りを使っています.<mo>タグに入るものは上にあげたようにたくさんあり,これらにlspace,mspaceタグをつけることができるわけですが,やたらに属性をつけるのはどうかと考えたので,括弧と座標の数式の間に入るコンマ「,」に対してだけこの属性を利用して空きを作ることにしています.例えば,
座標はとなる.または定点である.
これは,「座標は」の後,「となる」の前のMathMLの部分で,括弧があるので,MathMLの先頭にはlspace,末尾にはrspaceを入れてあります.もし空きを作らないと,
座標はとなる.または定点である.
比べてみてください.先の例の方がすこし空きが広いのがわかると思います.どちらでもいいと思う人もあるかもしれませんが.