]> 古いOperaでMathML
MathMLトップへ
MathML利用環境を整えるへ

古いOperaでMathML

描画エンジンとしてPrestoエンジンを搭載したバージョン12.17(2014年4月15配布)以前のOperaはMathMLを利用できます. 残念ながら, 描画エンジンが変わったことで最新のOperaはMathMLに対応していないようです.

また, バージョン10.60(2010年7月1日配布)より前の古いOperaでは, &gt;(>)&lt;(<)のような長く使われてきたものを除いて, 実体参照が利用できません. そのため, 次のように対応する必要があります. なお, この方法はあくまで当時, 強引に表示させる手法であり, 現在では適切でないので推奨されません.

1 &gE;等の実体参照

Operaは, &gE;といった実体参照を利用できませんが, &#x2267;といった文字参照を利用できます. このため, ≧を表示したい場合, 文字参照を利用してリスト1のように書くことで表示できます.

<math xmlns="http://www.w3.org/1998/Math/MathML">
  <mi>a</mi>
  <mo>&#x2267;</mo>
  <mn>3</mn>
</math>
リスト1 ≧を文字参照で表示する
a 3
図1 ≧を文字参照で表示する場合の表示例

また, 文書型宣言(<!DOCTYPE 〜 >の中で, 文字参照を利用して, &gE;を定義することで, リスト2のように書いて表示することもできます.

<!DOCTYPE html PUBLIC
  "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN"
  "http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd" [
  <!ENTITY gE "&#x2267;">
]>

〜 中略 〜

<math xmlns="http://www.w3.org/1998/Math/MathML">
  <mi>a</mi>
  <mo>&gE;</mo>
  <mn>3</mn>
</math>
リスト2 ≧を文字参照で表示する(文書型宣言)
a 3
図2 ≧を文字参照で表示する場合(文書型宣言)の表示例

この方法を用いる場合, <math>以下は, FireFoxで表示する場合のMathMLのコードといっしょになります. なお, 数学記号と実体参照と文字参照の関係は, XML Entity Definitions for Characters(W3C勧告)で見ることができます.

2 &InvisibleTimes;と&ApplyFunction;

&InvisibleTimes;と&ApplyFunction;に対応する文字参照は, それぞれ&#x2062;と&#x2061;ですが, これに対応する文字がうまく表示できません(Windows Xpの環境では対応するフォントが見つからないため文字化けします). そのため, 1 &gE;等の実体参照と同じようには表示できません.

ちなみに, &InvisibleTimes;と&ApplyFunction;に対応する文字は, 実質的に表示されない文字です. これらの実体参照は, 掛け算や関数を表すために用いられ, 表示には, ほとんど関係しません(ただし, これらの実体参照の箇所では改行されない等, 表示のルールが存在しています).

そこで, 少々乱暴なやり方になりますが, 1つの方法として, これらの実体参照を書かないという方法が考えられます(リスト3). また, 文書型宣言の中で長さ0の文字列に対応させるという方法も考えられます(リスト4).

<math xmlns="http://www.w3.org/1998/Math/MathML">
  <mi>f</mi>
  <mo></mo>
  <mfenced>
    <mrow>
      <mi>x</mi>
    </mrow>
  </mfenced>
  <mo>=</mo>
  <mi>a</mi>
  <mo></mo>
  <mi>x</mi>
  <mo>+</mo>
  <mi>b</mi>
</math>
リスト3 実体参照を書かない
f x = a x + b
図3 実体参照を書かない場合の表示例
<!DOCTYPE html PUBLIC
  "-//W3C//DTD XHTML 1.1 plus MathML 2.0//EN"
  "http://www.w3.org/TR/MathML2/dtd/xhtml-math11-f.dtd" [
  <!ENTITY InvisibleTimes "">
  <!ENTITY ApplyFunction "">
]>

〜 中略 〜

<math xmlns="http://www.w3.org/1998/Math/MathML">
  <mi>f</mi>
  <mo>&ApplyFunction;</mo>
  <mfenced>
    <mrow>
      <mi>x</mi>
    </mrow>
  </mfenced>
  <mo>=</mo>
  <mi>a</mi>
  <mo>&InvisibleTimes;</mo>
  <mi>x</mi>
  <mo>+</mo>
  <mi>b</mi>
</math>
リスト4 実体参照を長さ0の文字列に対応させる
f x = a x + b
図4 実体参照を長さ0の文字列に対応させる場合の表示例

このように古いOperaは, 実体参照が十分に利用できないため, MathMLを表示するために, 一手間かける必要があります. しかし, 一般的なMathML対応ブラウザであるFireFoxと比べて劣っているということではありません. 逆にmspaceを利用して改行するといったFireFoxでは対応していない表現を表示することもできます.

<math xmlns="http://www.w3.org/1998/Math/MathML">
  <mi>a</mi>
  <mo>+</mo>
  <mi>b</mi>
  <mspace linebreak="newline"/>
  <mi>a</mi>
  <mo>-</mo>
  <mi>b</mi>
</math>
リスト5 mspaceを利用して改行する
a + b a - b
図5 mspaceを利用して改行する場合の表示例

以上, 古いOperaでMathMLを利用する方法を説明させていただきました. 一部のコードに筆者独断による少々強引な表現があることをご理解したうえでご利用下さい .