Office2007の新しい数式エディタ

更新日: 2006/09/23

目次


はじめに

Microsoft Word 2007 では、数式編集機能が根本的に刷新されています。すなわち、従来は、Wordのオブジェクト挿入「Microsoft数式」を指定して数式編集を行っていました。これは、デザインサイエンス社のOEMによる数式編集機能でしたが、Word 2007ではまったく新しい数式エディタが導入されます。これについて「PDF千夜一夜」の2006年9月17日から21日にかけて紹介しました。ここにその記事をまとめてみました。

この新しい数式エディタはTeXの数式組版を引き継ぎ、さらに発展させたものと考えられます。実際に使用してみますと、大変使いやすく、今後の数式編集・組版に大きなインパクトを与えるように思います。

Murray Sargent、Office2007の新しい数式エディタを開発

マイクロソフトのMurray Sargentが新しいブログ「Math in Office」をはじめています。

Murray Sargent: Math in Office

この人がマイクロソフトに入社したのは1992年になっています。私の記憶では、入社の前、大学の先生時代、David Weiseと共同でSSTデバッガを開発し、その縁で、夏休みにマイクロソフトのコンサルタントとして働いていた時、ガーデン・パーティの最中に、Windowsのプロテクト・モードのきっかけとなるアイデアを出したそうです。その頃、MicrosoftはWindowsの開発で640KBのメモリの壁を破ることができずに、苦しんでいたのですが、この壁を破るきっかけが彼のアイデアだそうです。

これによって、Windows3.0のエンハンスト・モードが可能となり、さらには、Windows95へとつながって、Microsoft Windowsの大成功への道を開いたことになります。その時のエピソードが、確か、Andrew Schulmanの「Unauthorized Windows 95」に載っていました。(昔の本を置いてある書庫が遠隔地なので確認できないのですが)。

レーザの研究者(22年間大学でレーザを研究)でレーザについての本を出す傍ら、パソコンのH/Wなどのアーキテクチャについての本も執筆しています。

The Personal Computer from the Inside Out 
The Programmer's Guide to Low-level
PC Hardware and Software

Murray Sargent III, Richard L.Shoemaker
Addison-Wesley Publishing Company
ISBN 0-201-62646-2
Copyright 1995

きっと、天才なんでしょうね。マイクロソフトにはこういう天才がごろごろしているそうです。(もっとも最近の天才はGoogleを目指すようですから、だんだん変わるかも。)

彼は、その後、Microsoftに入社して、RichEditの開発を担当。最近は、Officeで高品質な数式の編集と表示に関わる開発をしています。Unicodeコンソーシアムでプレーン・テキストによって数式を表現する方法について発表していたので、注目していましたが、いよいよ、その成果がOffice2007の新しい数式エディタとして登場するようです。

Word2007のβ版で、「Alt」キーと「+」キーを同時に押すと、新しい数式エディタが起動します。
20060917.PNG

ブログでは、この新しい数式エディタについての啓蒙活動をもくろんでいるようです。これから、Murray Sargentの提案する新しい数式編集についてもう少しレポートしてみたいと思います。

数式の表示方法: 組み立て形式と直線形式

Office 2007の新しい数式エディタでは、数式の表記モードに、組み立て形式直線形式の2種類があります。

簡単なところで、二項展開を表す等式の組み立て形式と直線形式は次のようになります。

20060918.PNG

数式エディタで数式を入力していく時は、直線形式になりますが、数式を最後まで入力し終えて、スペースを入力しますと、自動的に組み立て形式に変わります。

TeXをご存知の方にとっては、直線形式というのは、TeXに似ていると思うに違いありません。TeXでは二項展開の等式を次のように表します。

 (a+b)^n = \sum_{k=0}^n {n \choose k}a^k b^{n-k}

※私は、TeXを実際に使ったことが一度もありませんが、多分、こうじゃないかと思います。間違っていましたらご指摘ください。

TeXの式との違いは、次の4点です。

・\sumが、∑ (U+2211:N-ARY SUMMATION) となっている
・\chooseが、¦ (U+00A6:BROKEN BAR)となっている
・▒ (U+2592:MEDIUM SHADE)が結合子として使われている。
・画面に表示されない{ }の代わりに( )が使われている。

このように直線形式とはTeXの数式表記のUnicode版になっていると言っても過言ではないようです。

Murry Sargentによる「Unicode Nearly Plain-Text Encoding of Mathmatics」がUnicodeテクニカル・ノートとして公開されていますが、これは、Unicodeを活用したTeXの数式表記の提案と考えても良いと思います。

※参考資料
Unicode Technical Note #28:Unicode Nearly Plain-Text Encoding of Mathematics
本文:Unicode Nearly Plain-Text Encoding of Mathmatics (PDF)

Unicodeの数学記号、Office2007の数学記号の入力方式

昨日は、Murray Sargent の直線形式は、TeXの数式表記をUnicodeで表したものと言いました。

Knuth先生が、TeXの概念を考え、最初のPlain TeXがリリースされたのは、1980年頃、Asciiコードしか考えられなかった時代です。このため、TeXでは、数式につかうギリシャ文字や、演算子、その他の記号類を「\」とラテンアルファベットの組合せでキーワードとして定めています。これで数学記号の代わりに使います。

ところが、現在、Unicode4.0には数式につかうための記号が2000種類も盛り込まれています。従って、TeXでキーワードとして決めている数学記号をUnicodeで表すのは、自然な進化といえるでしょう。

但し、何千もある文字を入力しようとすると、日本語の漢字を入力するのと同じようにIMEを使ってできるようにする工夫が必要になります。

Word2007の数式エディタでは、数学記号をキーワードで入力できるようになっています。キーワード、文字の字形とUnicodeコード番号の一覧表が「Unicode Nearly Plain-Text Encoding of Mathematics」の付録Bにあります。付録Bには264種類の記号が掲載されています。

これらのキーワードはユーザが定義して追加することもできます。

数式エディタで、キーワードを入力して空白をいれると自然にグリフに変わります。
例えば、平方根のキーワードは、sqrtです。平方根を入力するには、次のように、\(英語版ではバックスラッシュ)に続いて、キーワードを入力します。
20060919-1.PNG

続いて空白を入力すると、記号に変わります。
20060919-2.PNG

このようにキーワードを使って入力するのが一つの方法です。しかし、264種類のキーワードでは、Unicodeで使える数学記号の種類と比べて少な過ぎて、足りないのではないかという心配があります。

そのためかどうか、数式エディタでは、Unicodeの16進コード番号を直接入力することもできます。先ほどのルート記号のUnicodeコード番号はU+221Aです。そこで、次のようにコード番号を入力して、
20060919-3.PNG

「Alt」キー+「x」キーを押しますと、記号に変わります。
20060919-2.PNG

この他に、主要な数式記号については、従来の数式エディタと同様にWYSIWYG入力もできます。これらの方法で、数式の入力は、従来と比べてかなり簡単になるのではないかと思います。

数式組版と数学フォントの必要性

数式組版は、文字組版の中ではとても難しいもののひとつです。

昨日の話題にしましたように数学記号の種類が多いこともそのひとつですが、それ以外に、様々な難しさがあります。

1.数式の中でイタリック体や二重線文字の使い分け
20060920-1.PNG
数式では、変数は多くの場合イタリック体で表します。微分記号は、上の図のⅆ (U+2146 DOUBLE-STRUCK ITALLIC SMALL-D)のように二重線のイタリック体で特別の意味を持たせた文字を使うことがあります。Unicode4.0には、U+2145~U+2149に二重線イタリックの数学記号が定義されています。

2.下付き、上付きを多用します。しかも、多重の上付き、下付きを使うこともあります。
20060920-3.PNG

3.積分記号のような斜めの記号に対して、上限、下限をつける時は、単純に文字のベースラインを上、下に調整するのみでなく、左右の位置調整も行う必要があります。(1の例を参照)

4.括弧類などのフェンス類や積分記号などは内部の式の高さに応じて、高さを調整する必要があります。
20060920-2.PNG
アウトライン・フォントでは、計算によって高さを調整するのは簡単にできます。しかし、ただ括弧を大きくしたり小さくしたりするだけではあまり綺麗になりません。やはりサイズ毎に専用のグリフが必要でしょう。

5.空白の幅に様々な種類があり、その使い分けが必要です。
例えば、次の図をご覧ください。
20060920-4.PNG
数式の左辺a-cと、右辺-cでは、マイナス記号と文字cの間の幅が異なっています。このように同じ文字の組合せでも文脈によってその間の空白の幅を変えることがあります。

6.行列の入った式を綺麗に組むには、行列の軸の位置と本文の文字の軸の位置を合わせる必要があります。20060920-5.PNG
この場合、等号(=)は、行列の軸線と揃えることになります。

上のようなことを簡単に実現するためには数式組版専用フォントが必要でしょう。Office2007の数式エディタでは数式組版のための新しいフォントとしてCambria Mathフォントを開発したようです。Cambria Mathは、Cambria フォントのTrueTypeコレクション形式の一部ですが、数学の組版専用のOpenTypeフィーチャ・テーブルを持っているようです。残念ながら、この新しいOpenTypeフィーチャ・テーブルの仕様は文書化されていないとのことです。

Office2007数式のXML形式とMathMLとの互換性

Office2007数式エディタで作成した数式を保存すると、WordProcessingMLの中の数式は、独自のXML形式で保存されます。この数式XML形式は、Office Open XMLの仕様書に定義されていますが、ここでは仮にOMathと呼びます。

数式をマークアップするための標準言語としては、W3CのMathML2.0がありますが、OMathはMathMLとはまったく別の仕様となっています。
W3CのMathMLページ
MathML2.0

Office2007をインストールすると、Office12フォルダの中にomml2mml.xslというスタイルシートがインストールされますが、このスタイルシートでOMathからMathML2.0に変換することができます。

逆にMathML2.0からOMathに変換するには、mm2omml.xslスタイルシートを使用します。

早速、簡単な数式でどの程度の互換性があるか、試してみました。

1.Word2007 ベータ版で作成した数式(PDF):Office2007Math.pdf
PDF表示画面のキャプチャ
Office2007Math-img-0.PNG

2.Word2007の本文XML文書:document.xml

各数式はoMathPara要素の内容となっています。

3.次のようにしてdocment.xmlをomml2mml.xslでMathMLに変換します。  
 
>MSXSL document.xml omml2mml.xsl -o resMathML.xml

これで本文の中の数式だけ(oMathParaの内容のみ)がMathMLによるマークアップに変換されます。このままでは表示できませんので、少し修正してHTMLにしたものをブログにアップしました。数式の内容は変更していません。

4.resMathML.xmlをHTMLにしたもの:Download file この数式はInternet ExplorerとMathPlayer(プラグイン)を使うと表示できます。ご自分で表示できない人のためにIEの画面を下に示します。

20060921-1.PNG
これを見ますと、どうも、出来上がっているMathML数式に少しエラーがあるようです。(MathPlayerではMathMLにエラーがあると赤枠で囲って表示します。)

さらに、少し整形してXML化し、XSL FormatterMathMLオプションでPDFにしてみました。下の図がPDF表示画面のキャプチャです。

Office2007Math-img-1.PNG

PDF自体はこちらからダウンロードできます:Formatterで作成したPDF

XSL FormatterのMathMLオプションで組版した結果は、MathPlayerと同じ表示になっています。Office2007の数式を完全に再現はできていませんね。詳しくは調べていませんが、OMathからMathMLに変換するスタイルシートに不適切な変換をしている箇所があるように思います。  

数式のマークアップ言語としては、MathML2.0が標準として多くの人に利用されています。MathMLは、直接、マークアップを編集することよりも、数式をWebで利用できるように、また、数式を共通に利用できるようにということを目標としているものです。

これに対して、Office2007のOMathは、数式の交換よりも、Word 2007の組版情報を忠実に保存することを目的としているようです。このようにOMathとMathMLでは目的とするところが少し異なっています。しかし、XSLスタイルシートをうまく作れば、相互に変換することが可能となりそうです。スタイルシートの完成を望みたいと思います。

注意

この文書は、2006年9月現在のMicrosoft Word 2007 β版を調べた結果に基づくものです。製品版で変更になる点があるものと思いますのでご注意ください。


Copyright © 1996-2006 Antenna House, Inc. ALL Right reserved.