MathMLのmfencedで集合の外延表記をつくる
先日にひきつづき、MathMLと戯れています。
今回は以下のMathML数式組版入門という書籍を読んでいます。以前に技術書展で現地購入したので、かなり前ですね。次に東京で現地開催されるのはいつの日になるんでしょうか。ただ、書名で検索するとまるまる内容が出てきます。他にまとまった情報もあるかもしれませんが、しっかりまとまっていると思うので必要な方はご覧いただければと思います。著者の方、ありがとうございます。
https://www.antenna.co.jp/AHF/ahf_publication/MathML/mathml-guide.pdf
さて、昨日はようやく使い始めたんですが、mfenced
というタグがあって少し気に入りました。
例えば上のような式があった場合に、最初は素直にカッコ文字を使って
<math display="block"> <mo>∃</mo> <mi>x</mi> <mo>(</mo> <mi>x</mi> <mo>=</mo> <mi>x</mi> <mo>)</mo> <mtext>.</mtext> </math>
のように書いていたんですが、これはmfenced
を使って書き換えられます。
<math display="block"> <mo>∃</mo> <mi>x</mi> <mfenced> <mrow> <mi>x</mi> <mo>=</mo> <mi>x</mi> </mrow> </mfenced> <mtext>.</mtext> </math>
明示的にカッコは使っていないわけですが、これで自動的にmfenced
の部分がカッコで囲まれます。構造化もされるので見やすい、個人的にはこちらの方が好みです。さらに、レンダリングの結果も微妙に変わります。差が分かりますか?ひらきカッコの前のスペースが少し広くなります。
さて、このmfenced
、もう一つ機能があります。それは区切り文字を挿入できるということ。
<math display="block"> <mfenced> <mi>x</mi> <mi>y</mi> <mi>z</mi> </mfenced> </math>
上記のように書くと、間にカンマも挿入されます。タプルが書き放題です。
さらに、open
close
属性を使えば、このカッコは自由な文字に変更することもできます。
<math display="block"> <mfenced open="{" close="}"> <mi>x</mi> <mi>y</mi> <mi>z</mi> </mfenced> </math>
うん。わかりやすい。人力で書くときにはしんどいですが、プログラミングから生成するのはこっちの方がやっぱりいいですよね。これで何か動くものを作ろうとしているので、さらに調べます。