【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

MS Officeの数式をTeXに変換

Microsoft Officeで数式を書くのに慣れてTeX形式で入力するのが苦痛になって来たので、変換プログラムを作りました。Windows専用です。

【注】自分の必要とする範囲しか実装していません。変換部は200行程度で不足があればその都度手直しすることを想定しているため、ソースのみの配布とします。

実行方法

以下の2つをインストールします。

F#スクリプトは直接実行できるため、Visual Studioやビルド作業は不要です。mml2tex.fsx をダブルクリックすると、どのアプリで開くか選択肢が出て来るので、以下にある fsi.exe を指定すれば起動します。

  • (64bit OS) C:\Program Files (x86)\Microsoft SDKs\F#\4.0\Framework\v4.0\fsi.exe
  • (32bit OS) C:\Program Files\Microsoft SDKs\F#\4.0\Framework\v4.0\fsi.exe

使い方

Officeで数式部分だけを選択してコピーします。ExcelPowerPointでは行末の改行が入らないよう注意してください(Wordでは問題ありません)。このプログラムの画面上部の [Convert from Clipboard] ボタンを押すと変換されます。動作イメージは以下のツイートを参照してください。

オプションとして、MimeTeXによるプレビュー機能を使用するにはMimeTeX.dllが必要です。以下から入手してください。

サンプル

サンプルのWordファイルです。

これをTeXに変換して [tex:...] の中に記述したものを示します。デフォルトではMimeTeX向けのコードを出力しますが、はてなブログMathJaxを使っているため、変換時に右上のMathJaxにチェックを入れてください。(積分などの大型記号で挙動が異なるため)


\begin{aligned}
& \frac{1}{2} \\
& \frac{d}{dt}\left(\frac{\partial L}{\partial \dot{q}}\right)-\frac{\partial L}{\partial q}=0 \\
& \left\{\begin{matrix}\dot{p}=-\frac{\partial H}{\partial q}\\\dot{q}=\frac{\partial H}{\partial p}\end{matrix}\right. \\
& H\left(f\right)={\nabla}^2f=\left[\begin{matrix}\frac{{\partial}^2f}{\partial x_1^2}&\frac{{\partial}^2f}{\partial x_1\partial x_2}&\cdots &\frac{{\partial}^2f}{\partial x_1\partial x_n}\\\frac{{\partial}^2f}{\partial x_2\partial x_1}&\frac{{\partial}^2f}{\partial x_2^2}&\cdots &\frac{{\partial}^2f}{\partial x_2\partial x_n}\\\vdots &\vdots &\ddots &\vdots \\\frac{{\partial}^2f}{\partial x_n\partial x_1}&\frac{{\partial}^2f}{\partial x_n\partial x_2}&\cdots &\frac{{\partial}^2f}{\partial x_n^2}\end{matrix}\right] \\
& \delta S=\underbrace{{\left[\frac{\partial L}{\partial \dot{q}}\delta q\right]}_{t_1}^{t_2}}_{{=0}}+{\int}_{t_1}^{t_2}\left(\frac{\partial L}{\partial q}-\frac{d}{dt}\frac{\partial L}{\partial \dot{q}}\right)\delta qdt
\end{aligned}

【注】Markdown記法で数式が崩れるのを防ぐため <div> タグの中に記述しています。詳細は以下の記事を参照してください。

関連ツイート

【注】以下は開発者向けの情報です。今回のツールを使用するのには不要です。

OfficeからMathMLを取得する方法です。

開発着手時のツイートです。

開発中はMimeTeXで動作確認していましたが、MathJaxとは癖が違うため細かい部分で苦労しました。