MathMLクリップボードビューア
ワードや数式入力パネル、Microsoft Mathematics が、数式をMathMLでクリップボードに入れてくれます。
このプログラムは、クリップボードの内容を表示します。
このプログラムを作った最大の理由は、数式入力パネルからMathMLの文字列が取得できなかったことです。数式入力パネルからの入力は、ワードには数式として貼り付けられます(左図)が、メモ帳のようなテキストエディタには張り付けることはできません。
ワードからは、数式をコピーして、メモ帳に貼り付けることができます。この場合、数式のビジュアルが張り付けられるわけではなく、MathML記述のテキストが張り付けられます。
このプログラムを使うと、数式入力パネルから、メモ帳などのテキストエディタにMathML記述のテキストを張り付けることができます。
ワードなど、たいていのアプリケーションがText形式でクリップボードにMathMLを格納しているのに、数式入力パネルはテキスト形式を格納していません。もともと、MathMLはテキストなのでテキストだと印を付けるだけで、テキストエディタに貼りつけられるようになります。
インストール
ダウンロードした圧縮ファイルを解凍すると、MathMLClipboardViewer.exe ができます。
これをエクスプローラからダブルクリックするなどして実行してください。
操作、および設定
このプログラムは、クリップボードを監視しています。
数式入力パネルに数式を書いて、挿入ボタンを押すと、自動的にクリップボードの内容が表示されます。
-
「Textに自動変換」をチャックすると、クリップボードのデータをText形式に変換します。
-
以降、「Textに自動変換」がチャックされている間は、自動的に変換が行われます。
-
Text形式に変換されたクリップボードから、メモ帳などに、「編集」「貼り付け」や、右ボタンメニューの「貼り付け」、CTRL+V、CTRL+Insert などの操作で張り付けることができます。

XML形式の表示
このプログラムは、クリップボードの内容がXMLだと認識すると、左図のようなツリービューによる表示を行います。
このXMLの解析は、XMLを表示していない状態でも、クリップボードの内容が変更されるたびに行われます。XML形式として不正な場合、最下段の枠にエラーが表示されます。
クリップボードの内容がXMLかどうかは、最初の空白でない文字が '<' かどうかで判断しているので、XMLでないものを解析してエラーを表示することもあります。
参考に
ワードで数式をコピー
ワードから数式をコピーする場合、常にMathML形式になるわけではありません。
コピー形式には、「MathML」 と 「行形式」の一方を選択することになります。
この設定は、数式オプションで行います。「挿入」「数式」として表示されるバーのツールの横の小さなマークをクリックすると表示されます。
ワードに貼り付ける場合は、設定によらず、どちらの形式も可能です。
文字実体参照
ワードに、MathML記述の文字列を張り付けた場合、認識できない箇所があると、数式ではなく、テキストとして貼り付けられます。
このようになる原因で気が付いたのは、文字の実体参照が記述できないと言うことです。
実体参照は、ω のように書いて、1文字を表す方法です。omega がUnicodeのいくつを示すかは、DTDでの宣言に依存しています。MathMLのDTDは複数あり、それぞれ異なった宣言になっています。
ワードは、このDTDを読み込んでいるわけではないので、認識できなくても不思議はありません。
入力の方法としては、IMEパッドなどからビジュアルに入力すれば実体参照を記述する必要はありません。また、ワードや数式入力パネル、Microsoft Mathematics が、実体参照を生成することもないようです。
この問題の本質は、Unicodeの完備なフォントが存在しないことにあると思います。実際に表示される字形は、ブラウザが実行される環境の問題であり、文書の作成側では制御できません。フォントファミリを切り替えて表示すると言う発想を取る限り問題はなくなりません。
「マークアップとフォント」を参照。
注意
-
このプログラムは、起動している間、「Textに自動変換」がチェックされていれば、クリップボードが変更されるたびに、クリップボードを書き換える動作をします。
必要ないときは終了してください。
-
MathML形式のオブジェクトがクリップボードに入れられたとき、Text形式を伴っていなければ、Text形式を追加します。
プログラミング上は、単に追加することはできず、新たなオブジェクトを作成し、クリップボード上のオブジェクトを上書きします。
したがって、クリップボード上のオブジェクトから新たなオブジェクトへ内容をコピーしてから、Text形式を追加することが必要になります。
実際には、"MathML"オブジェクトと"MathML Presentation"オブジェクトだけをコピーしているので、その他の形式を同時にクリップボードにセットするアプリケーションがあると、その情報は失われてしまいます。
|