数式編集機能が根本的に刷新されています。従来は、Wordのオブジェクト挿入「Microsoft数式」を指定して数式編集を行っていました。2007ではまったく新しい数式エディタが導入されます。これについて「PDF千夜一夜」の2006年9月17日から21日にかけて紹介しました。ここにその記事をまとめてみました。この新しい数式エディタはTeXの数式組版を引き継ぎ、さらに発展させたものと考えられます。実際に使用してみますと、大変使いやすく、今後の数式編集・組版に大きなインパクトを与えるように思います。Office」をはじめています。Officeこの人がマイクロソフトに入社したのは1992年になっています。Weiseと共同でSSTデバッガを開発し、その縁で、夏休みにマイクロソフトのコンサルタントとして働いていた時、ガーデン・パーティの最中に、Windowsのプロテクト・モードのきっかけとなるアイデアを出したそうです。その頃、MicrosoftはWindowsの開発で640KBのメモリの壁を破ることができずに、苦しんでいたのですが、この壁を破るきっかけが彼のアイデアだそうです。Windowsの大成功への道を開いたことになります。95」に載っていました。(昔の本を置いてある書庫が遠隔地なので確認できないのですが)。レーザの研究者(22年間大学でレーザを研究)でレーザについての本を出す傍ら、パソコンのH/Wなどのアーキテクチャについての本も執筆しています。1995きっと、天才なんでしょうね。マイクロソフトにはこういう天才がごろごろしているそうです。(もっとも最近の天才はGoogleを目指すようですから、だんだん変わるかも。)彼は、その後、Microsoftに入社して、RichEditの開発を担当。最近は、Officeで高品質な数式の編集と表示に関わる開発をしています。Unicodeコンソーシアムでプレーン・テキストによって数式を表現する方法について発表していたので、注目していましたが、いよいよ、その成果がOffice2007の新しい数式エディタとして登場するようです。Word2007のβ版で、「Alt」キーと「+」キーを同時に押すと、新しい数式エディタが起動します。ブログでは、この新しい数式エディタについての啓蒙活動をもくろんでいるようです。Sargentの提案する新しい数式編集についてもう少しレポートしてみたいと思います。2007の新しい数式エディタでは、数式の表記モードに、組み立て形式と直線形式の2種類があります。簡単なところで、二項展開を表す等式の組み立て形式と直線形式は次のようになります。数式エディタで数式を入力していく時は、直線形式になりますが、数式を最後まで入力し終えて、スペースを入力しますと、自動的に組み立て形式に変わります。TeXをご存知の方にとっては、直線形式というのは、TeXに似ていると思うに違いありません。TeXでは二項展開の等式を次のように表します。b^{n-k}※私は、TeXを実際に使ったことが一度もありませんが、多分、こうじゃないかと思います。間違っていましたらご指摘ください。TeXの式との違いは、次の4点です。SHADE)が結合子として使われている。このように直線形式とはTeXの数式表記のUnicode版になっていると言っても過言ではないようです。Mathmatics」がUnicodeテクニカル・ノートとして公開されていますが、これは、Unicodeを活用したTeXの数式表記の提案と考えても良いと思います。直線形式は、TeXの数式表記をUnicodeで表したものと言いました。TeXがリリースされたのは、1980年頃、Asciiコードしか考えられなかった時代です。このため、TeXでは、数式につかうギリシャ文字や、演算子、その他の記号類を「\」とラテンアルファベットの組合せでキーワードとして定めています。これで数学記号の代わりに使います。ところが、現在、Unicode4.0には数式につかうための記号が2000種類も盛り込まれています。従って、TeXでキーワードとして決めている数学記号をUnicodeで表すのは、自然な進化といえるでしょう。何千もある文字を入力しようとすると、日本語の漢字を入力するのと同じようにIMEを使ってできるようにする工夫が必要になります。Word2007の数式エディタでは、数学記号をキーワードで入力できるようになっています。Mathematics」の付録Bにあります。付録Bには264種類の記号が掲載されています。これらのキーワードはユーザが定義して追加することもできます。数式エディタで、キーワードを入力して空白をいれると自然にグリフに変わります。平方根のキーワードは、sqrtです。平方根を入力するには、次のように、\(英語版ではバックスラッシュ)に続いて、キーワードを入力します。続いて空白を入力すると、記号に変わります。このようにキーワードを使って入力するのが一つの方法です。264種類のキーワードでは、Unicodeで使える数学記号の種類と比べて少な過ぎて、足りないのではないかという心配があります。そのためかどうか、数式エディタでは、Unicodeの16進コード番号を直接入力することもできます。先ほどのルート記号のUnicodeコード番号はU+221Aです。「Alt」キー+「x」キーを押しますと、記号に変わります。この他に、主要な数式記号については、従来の数式エディタと同様にWYSIWYG入力もできます。これらの方法で、数式の入力は、従来と比べてかなり簡単になるのではないかと思います。数式組版は、文字組版の中ではとても難しいもののひとつです。昨日の話題にしましたように数学記号の種類が多いこともそのひとつですが、それ以外に、様々な難しさがあります。1.数式の中でイタリック体や二重線文字の使い分け数式では、変数は多くの場合イタリック体で表します。SMALL-D)のように二重線のイタリック体で特別の意味を持たせた文字を使うことがあります。Unicode4.0には、U+2145~U+2149に二重線イタリックの数学記号が定義されています。2.下付き、上付きを多用します。多重の上付き、下付きを使うこともあります。3.積分記号のような斜めの記号に対して、上限、下限をつける時は、単純に文字のベースラインを上、下に調整するのみでなく、左右の位置調整も行う必要があります。(1の例を参照)4.括弧類などのフェンス類や積分記号などは内部の式の高さに応じて、高さを調整する必要があります。アウトライン・フォントでは、計算によって高さを調整するのは簡単にできます。括弧を大きくしたり小さくしたりするだけではあまり綺麗になりません。サイズ毎に専用のグリフが必要でしょう。5.空白の幅に様々な種類があり、その使い分けが必要です。次の図をご覧ください。数式の左辺a-cと、右辺-cでは、マイナス記号と文字cの間の幅が異なっています。このように同じ文字の組合せでも文脈によってその間の空白の幅を変えることがあります。6.行列の入った式を綺麗に組むには、行列の軸の位置と本文の文字の軸の位置を合わせる必要があります。この場合、等号(=)は、行列の軸線と揃えることになります。上のようなことを簡単に実現するためには数式組版専用フォントが必要でしょう。Mathフォントを開発したようです。フォントのTrueTypeコレクション形式の一部ですが、数学の組版専用のOpenTypeフィーチャ・テーブルを持っているようです。残念ながら、この新しいOpenTypeフィーチャ・テーブルの仕様は文書化されていないとのことです。Office2007数式のXML形式とMathMLとの互換性Office2007数式エディタで作成した数式を保存すると、WordProcessingMLの中の数式は、独自のXML形式で保存されます。XMLの仕様書に定義されていますが、ここでは仮にOMathと呼びます。数式をマークアップするための標準言語としては、W3CのMathML2.0がありますが、OMathはMathMLとはまったく別の仕様となっています。・W3CのMathMLページ・MathML2.0Office2007をインストールすると、Office12フォルダの中にomml2mml.xslというスタイルシートがインストールされますが、このスタイルシートでOMathからMathML2.0に変換することができます。逆にMathML2.0からOMathに変換するには、mm2omml.xslスタイルシートを使用します。簡単な数式でどの程度の互換性があるか、試してみました。ベータ版で作成した数式(PDF):Office2007Math.pdfPDF表示画面のキャプチャ2.Word2007の本文XML文書:document.xml各数式はoMathPara要素の内容となっています。3.次のようにしてdocment.xmlをomml2mml.xslでMathMLに変換します。resMathML.xmlこれで本文の中の数式だけ(oMathParaの内容のみ)がMathMLによるマークアップに変換されます。このままでは表示できませんので、少し修正してHTMLにしたものをブログにアップしました。数式の内容は変更していません。ExplorerとMathPlayer(プラグイン)を使うと表示できます。ご自分で表示できない人のためにIEの画面を下に示します。これを見ますと、どうも、出来上がっているMathML数式に少しエラーがあるようです。(MathPlayerではMathMLにエラーがあると赤枠で囲って表示します。FormatterのMathMLオプションでPDFにしてみました。下の図がPDF表示画面のキャプチャです。FormatterのMathMLオプションで組版した結果は、MathPlayerと同じ表示になっています。Office2007の数式を完全に再現はできていませんね。詳しくは調べていませんが、OMathからMathMLに変換するスタイルシートに不適切な変換をしている箇所があるように思います。数式のマークアップ言語としては、MathML2.0が標準として多くの人に利用されています。MathMLは、直接、マークアップを編集することよりも、数式をWebで利用できるように、また、数式を共通に利用できるようにということを目標としているものです。2007の組版情報を忠実に保存することを目的としているようです。このようにOMathとMathMLでは目的とするところが少し異なっています。XSLスタイルシートをうまく作れば、相互に変換することが可能となりそうです。スタイルシートの完成を望みたいと思います。β版を調べた結果に基づくものです。製品版で変更になる点があるものと思いますのでご注意ください。