
Word ドキュメントへの数式のプログラムによる挿入は、科学文書ジェネレーター、学術報告システム、教育プラットフォーム、エンジニアリング自動化ツールを開発する開発者にとって不可欠な機能です。研究論文、技術文書、数学ワークシートを生成する際に、数式挿入の自動化は効率性と一貫性を大幅に向上させます。
しかし、Microsoft Word で手動で数式をフォーマットするのは時間がかかり、ゼロから数式レンダリングエンジンを構築するのは非常に複雑です。開発者は、LaTeX や MathML などの標準的な数式形式をサポートしながら、Word に数式を追加する信頼性の高い方法を必要としています。
Spire.Doc for Python を使用すると、開発者はわかりやすい API を介して LaTeX および MathML コードから Word ドキュメントに数式を直接挿入できます。本記事では、Python で Word 数式を作成する方法を示し、数式の挿入、LaTeX・MathML・Office MathML(OMML)間の変換、さまざまな数式形式へのエクスポートを行います。
クイックナビゲーション
- Word ドキュメントの数式について
- Spire.Doc for Python のインストール
- Python で LaTeX から Word に数式を挿入
- Python で MathML 数式を Word ドキュメントに追加
- Word 数式を LaTeX や MathML に変換
- 数式を画像としてレンダリング
- よくある落とし穴
- まとめ
- FAQ
1. Word ドキュメントの数式について
Microsoft Word は、数式の内部形式として Office Math Markup Language(OMML) を使用しています。OMML は XML ベースの構造で、Word ドキュメント内の数式のレイアウト、記号、分数、行列、その他の数式要素を制御します。ただし、OMML を直接作成または編集するのは、ほとんどの開発者にとって面倒な作業です。
実際のアプリケーションでは、数学コンテンツはより一般的に LaTeX または MathML で記述されます。
- LaTeX は、簡潔な構文と強力な数式組版機能により、学界や科学出版で広く使用されています。
- MathML は、Web および教育システムの数学コンテンツ向けに設計された XML ベースの標準です。
プログラムで編集可能な Word 数式を生成するには、これらの形式と Word のネイティブ数式オブジェクトの間で変換を行う必要があります。
Spire.Doc for Python を選ぶ理由
Spire.Doc for Python は、OfficeMath クラスを通じて数式処理のネイティブサポートを提供します。OMML を手動で生成したり、画像ベースの回避策に頼ったりすることなく、LaTeX や MathML コードから編集可能な Word 数式を直接作成できます。
主な機能:
| 機能 | サポート状況 |
|---|---|
| LaTeX から数式を挿入 | ✓ |
| MathML から数式を挿入 | ✓ |
| Word 数式を LaTeX にエクスポート | ✓ |
| Word 数式を MathML にエクスポート | ✓ |
| ネイティブ OMML コンテンツにアクセス | ✓ |
| 数式を画像としてレンダリング | ✓ |
これらの機能は、学術レポート生成、教育プラットフォーム、MathML から Word への変換ワークフロー、LaTeX 公開パイプライン、その他数式を含む自動文書生成シナリオで特に役立ちます。
2. Spire.Doc for Python のインストール
pip を介して Spire.Doc for Python をインストールします。
pip install spire.doc
Python スクリプトで必要なクラスをインポートします。
from spire.doc import *
または、Spire.Doc for Python のダウンロードページ から手動でライブラリをインストールすることもできます。
3. Python で LaTeX から Word に数式を挿入
LaTeX は、学術および科学文書で数式を記述するために最も広く使用されている形式です。Spire.Doc for Python を使用すると、LaTeX 式をネイティブの Word 数式オブジェクトに変換し、これらの数式を DOCX ファイルに直接挿入できます。
次の例では、OfficeMath クラスを使用して複数の LaTeX 数式を Word ドキュメントに挿入する方法を示します。
from spire.doc import *
def insert_latex_equations():
# 新しい Word ドキュメントを作成
doc = Document()
section = doc.AddSection()
# タイトル段落を追加
title_para = section.AddParagraph()
title_para.AppendText("LaTeX からの数式").CharacterFormat.FontName = "Yu Gothic UI"
title_para.Format.HorizontalAlignment = HorizontalAlignment.Left
# 挿入する LaTeX 数式を定義
latex_equations = [
r"x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}", # 二次方程式の解の公式
r"e^{i\pi} + 1 = 0", # オイラーの等式
r"\int_0^\infty e^{-x} \, dx = 1", # 定積分
# 総和公式
r"\sum_{i=1}^{n} i = \frac{n(n+1)}{2}",
r"\sum_{i=1}^{n} i = \frac{n(n+1)}{2}", # 総和公式
r"A = \begin{pmatrix} 1 & 2 \\ 3 & 4 \end{pmatrix}", # 行列
r"P(A \mid B) = \frac{P(B \mid A)P(A)}{P(B)}", # 確率公式
r"\sin^2\theta + \cos^2\theta = 1", # 三角関数の恒等式
]
# 各 LaTeX 数式を個別の段落として挿入
for latex_code in latex_equations:
# LaTeX コードから OfficeMath オブジェクトを作成
office_math = OfficeMath(doc)
office_math.FromLatexMathCode(latex_code)
# 数式を新しい段落に追加
para = section.AddParagraph()
para.Items.Add(office_math)
# ドキュメントを保存
doc.SaveToFile("latex_equations.docx", FileFormat.Docx2019)
doc.Close()
print("LaTeX 数式の挿入が完了しました!")
if __name__ == "__main__":
insert_latex_equations()
次のスクリーンショットは、LaTeX コードから変換された数式を含む生成された Word ドキュメントを示しています。

主要な API メソッド
- Document – セクションや段落を作成するために使用される Word ドキュメントコンテナを表します
- OfficeMath – Word ドキュメント内の数式オブジェクトを表します
- FromLatexMathCode() – LaTeX 数式コードを Word がネイティブにレンダリングできる Office Math オブジェクトに変換します
- Items.Add() – OfficeMath オブジェクトを段落のコンテンツコレクションに追加します
- SaveToFile() – FileFormat.Docx2019 を使用して DOCX 形式でドキュメントをディスクに保存します
このアプローチは、分数、積分、行列、ギリシャ文字、その他の数式演算子などの複雑な LaTeX 構造をサポートし、ネイティブの Word 数式フォーマットを保持します。
インライン数式の追加
スタンドアロンの数式に加えて、テキスト段落内にインライン数式を挿入することもできます。これは、文章や説明の中に数式を埋め込む場合に役立ちます。
from spire.doc import *
def insert_inline_equation():
# 新しい Word ドキュメントを作成
doc = Document()
section = doc.AddSection()
# 導入テキストを追加
para = section.AddParagraph()
para.AppendText("二次方程式の解の公式は次のように表されます。").CharacterFormat.FontName = "Yu Gothic UI"
# インライン数式を挿入
office_math = OfficeMath(doc)
office_math.FromLatexMathCode(r"x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}")
para.Items.Add(office_math)
para.AppendText("ただし、a ≠ 0 とします。").CharacterFormat.FontName = "Yu Gothic UI"
# ドキュメントを保存
doc.SaveToFile("inline_equation.docx", FileFormat.Docx2019)
doc.Close()
if __name__ == "__main__":
insert_inline_equation()
挿入された数式はテキスト内にインラインで表示されます。

このアプローチにより、教育資料、研究論文、技術文書などで、数式を通常のテキストコンテンツに直接埋め込むことができます。
数式を書式付きテキスト、見出し、表、その他の構造化ドキュメント要素と組み合わせる必要がある場合は、Python で構造化 Word ドキュメントを作成する方法 のチュートリアルも参照してください。
4. Python で MathML 数式を Word ドキュメントに追加
MathML(Mathematical Markup Language)は、Web およびデジタルドキュメントで数式を表すための XML ベースの標準です。オンライン教育プラットフォーム、科学データベース、コンテンツ管理システムで一般的に使用されています。次の例は、Spire.Doc for Python を使用して MathML を Word 数式に変換する方法を示しています。
from spire.doc import *
def insert_mathml_equations():
# 新しい Word ドキュメントを作成
doc = Document()
section = doc.AddSection()
# タイトル段落を追加
title_para = section.AddParagraph()
title_para.AppendText("MathML からの数式").CharacterFormat.FontName = "Yu Gothic UI"
# 挿入する MathML 数式を定義
mathml_equations = [
# オイラーの等式
r'<math xmlns="http://www.w3.org/1998/Math/MathML">'
r'<msup><mi>e</mi><mrow><mi>i</mi><mi>π</mi></mrow></msup>'
r'<mo>+</mo><mn>1</mn><mo>=</mo><mn>0</mn>'
r'</math>',
# ピタゴラスの定理
r'<math xmlns="http://www.w3.org/1998/Math/MathML">'
r'<msup><mi>a</mi><mn>2</mn></msup>'
r'<mo>+</mo>'
r'<msup><mi>b</mi><mn>2</mn></msup>'
r'<mo>=</mo>'
r'<msup><mi>c</mi><mn>2</mn></msup>'
r'</math>',
# 分数式
r'<math xmlns="http://www.w3.org/1998/Math/MathML">'
r'<mfrac>'
r'<mrow><mi>x</mi><mo>+</mo><mi>y</mi></mrow>'
r'<mrow><mi>z</mi><mo>−</mo><mn>1</mn></mrow>'
r'</mfrac>'
r'</math>',
# 積分方程式
r'<math xmlns="http://www.w3.org/1998/Math/MathML">'
r'<msubsup><mo>∫</mo><mn>0</mn><mn>1</mn></msubsup>'
r'<msup><mi>x</mi><mn>2</mn></msup>'
r'<mi>d</mi><mi>x</mi>'
r'<mo>=</mo>'
r'<mfrac><mn>1</mn><mn>3</mn></mfrac>'
r'</math>'
]
# 各 MathML 数式を個別の段落として挿入
for mathml_code in mathml_equations:
# MathML コードから OfficeMath オブジェクトを作成
office_math = OfficeMath(doc)
office_math.FromMathMLCode(mathml_code)
# 数式を新しい段落に追加
para = section.AddParagraph()
para.Items.Add(office_math)
# ドキュメントを保存
doc.SaveToFile("mathml_equations.docx", FileFormat.Docx2019)
doc.Close()
print("MathML 数式の挿入が完了しました!")
if __name__ == "__main__":
insert_mathml_equations()
次のスクリーンショットは、MathML コードから変換された数式を含む生成された Word ドキュメントを示しています。

主要な API メソッド
- FromMathMLCode() – MathML マークアップを解析し、ネイティブの Word 数式オブジェクトに変換します。
MathML サポートは、XML ベースの教育コンテンツ、Web ベースの数式システム、STEM 学習プラットフォームで特に役立ちます。これらのプラットフォームでは数式が MathML 形式で保存されます。
1 つのドキュメントで LaTeX と MathML を組み合わせる
LaTeX と MathML の両方の数式を同じドキュメント内で混在させることができ、コンテンツソースの柔軟性が向上します。
from spire.doc import *
def insert_mixed_equations():
# 新しい Word ドキュメントを作成
doc = Document()
section = doc.AddSection()
# LaTeX 数式を挿入
latex_para = section.AddParagraph()
latex_math = OfficeMath(doc)
latex_math.FromLatexMathCode(r"E = mc^2")
latex_para.Items.Add(latex_math)
# MathML 数式を挿入
mathml_para = section.AddParagraph()
mathml_math = OfficeMath(doc)
mathml_math.FromMathMLCode(
r'<math xmlns="http://www.w3.org/1998/Math/MathML">'
r'<mi>F</mi><mo>=</mo><mi>m</mi><mi>a</mi>'
r'</math>'
)
mathml_para.Items.Add(mathml_math)
# ドキュメントを保存
doc.SaveToFile("mixed_equations.docx", FileFormat.Docx2019)
doc.Close()
if __name__ == "__main__":
insert_mixed_equations()
このアプローチは、LaTeX ベースの公開システムや MathML ベースの Web アプリケーションなど、異なるソースから数式コンテンツを取得する場合に役立ちます。
数式コンテンツが Web ページや HTML ベースのシステムから取得される場合は、Python で HTML コンテンツを Word ドキュメントに変換する方法 のチュートリアルも参照してください。
5. Word 数式を LaTeX、MathML、OMML に変換
Word ドキュメントへの数式挿入に加え、Spire.Doc for Python は Word 数式を複数の数式マークアップ形式にエクスポートすることもサポートしています。これは、Word、LaTeX 公開システム、Web ベースの MathML プラットフォーム、カスタム XML ワークフロー間の相互運用性に役立ちます。
次の例は、Word ドキュメントから数式を抽出し、LaTeX、MathML、Office MathML(OMML)としてエクスポートする方法を示しています。
from spire.doc import *
def export_equation_formats():
# 数式を含む Word ドキュメントを読み込む
doc = Document()
doc.LoadFromFile("equations.docx")
# 最初のセクションにアクセス
section = doc.Sections[0]
para = section.Paragraphs[0]
# OfficeMath オブジェクトを検索
for i in range(len(para.ChildObjects)):
item = para.ChildObjects[i]
if isinstance(item, OfficeMath):
# LaTeX にエクスポート
latex_code = item.ToLaTexMathCode()
print("LaTeX:")
print(latex_code)
print()
# MathML にエクスポート
mathml_code = item.ToMathMLCode()
print("MathML:")
print(mathml_code)
print()
# Office MathML(OMML)にエクスポート
omml_code = item.ToOfficeMathMLCode()
print("OMML:")
print(omml_code)
# 出力をファイルに保存
with open("equation.tex", "w", encoding="utf-8") as f:
f.write(latex_code)
with open("equation.xml", "w", encoding="utf-8") as f:
f.write(mathml_code)
with open("equation.omml", "w", encoding="utf-8") as f:
f.write(omml_code)
break
doc.Close()
if __name__ == "__main__":
export_equation_formats()
次のスクリーンショットは、Python コンソールに出力されたエクスポートされた数式形式を示しています。

サポートされるエクスポート形式
| 形式 | 主な用途 | 特徴 |
|---|---|---|
| LaTeX | 学術出版および科学論文 | 学界で広く使用されるコンパクトな構文 |
| MathML | Web ベースの数学コンテンツ | ブラウザおよび教育システム向けに設計された XML ベース形式 |
| OMML | Microsoft Word 統合 | Word と完全に互換性のあるネイティブ Office 数式形式 |
これらのエクスポート機能により、以下のことが容易になります。
- Word 数式を LaTeX 公開ワークフローに変換
- MathML を使用して Web サイトに数式を公開
- Word ドキュメントを XML ベースのシステムと統合
- OMML を使用して Word 数式構造を検査およびデバッグ
6. Office Math 数式を画像としてレンダリング
一部のシナリオでは、プレゼンテーション、Web ページ、または他の非編集可能なコンテキストで使用するために、数式を画像ファイルとしてエクスポートする必要があります。Spire.Doc for Python を使用すると、Office Math 数式をイメージストリームにレンダリングし、画像ファイルとして保存できます。
from spire.doc import *
def render_equation_as_image():
# 数式を含む新しい Word ドキュメントを作成
doc = Document()
section = doc.AddSection()
para = section.AddParagraph()
# 数式を挿入
office_math = OfficeMath(doc)
office_math.FromLatexMathCode(
r"\int_0^\infty e^{-x^2} dx = \frac{\sqrt{\pi}}{2}"
)
para.Items.Add(office_math)
# 数式を画像ストリームとしてレンダリング
image_stream = office_math.SaveImageToStream(ImageType.Bitmap)
# 画像をファイルに保存
with open("equations/equation.png", "wb") as f:
f.write(image_stream.ToArray())
# アンマネージドリソースを解放
image_stream.Dispose()
doc.Close()
print("数式の画像レンダリングが完了しました!")
if __name__ == "__main__":
render_equation_as_image()
次のスクリーンショットは、画像としてレンダリングされた数式を示しています。

この機能は、以下の場面で特に役立ちます。
- プレゼンテーションに数式を埋め込む
- Web ページに数式を表示する
- ドキュメントシステム用の静的プレビューを生成する
個々の数式をエクスポートするのではなく、完全な Word ドキュメントを画像としてレンダリングする場合は、Python で Word ドキュメントを画像に変換する方法 のチュートリアルをご覧ください。
7. よくある落とし穴
LaTeX の生文字列リテラル
Python 文字列で LaTeX コードを記述する場合、エスケープシーケンスの解釈を防ぐために常に生文字列(r プレフィックス)を使用してください。
# 正しい: 生文字列を使用
latex_code = r"\int_0^\infty e^{-x} dx"
# 誤り: バックスラッシュがエスケープシーケンスとして解釈される
latex_code = "\int_0^\infty e^{-x} dx"
サポートされない LaTeX コマンド
Word の数式エンジンはすべての LaTeX コマンドをサポートしているわけではありません。一部の高度な LaTeX 構造は正しくレンダリングされない可能性があります。可能な限り標準的な数式表記を使用してください。
# サポート済み: 標準的な数式表記
office_math.FromLatexMathCode(r"\alpha + \beta = \gamma")
# 一部の高度な LaTeX 構造はサポートされていない場合がある
# office_math.FromLatexMathCode(r"\begin{align} ... \end{align}")
MathML 名前空間の要件
MathML コードが正しく解析されるためには、適切な名前空間宣言を含める必要があります。
# 正しい: 名前空間を含める
mathml = r'<math xmlns="http://www.w3.org/1998/Math/MathML"><mi>x</mi></math>'
# 誤り: 名前空間が欠落していると失敗する可能性がある
mathml = r'<math><mi>x</mi></math>'
メモリ管理
特にバッチ操作では、処理後にドキュメントを必ず閉じてリソースを解放してください。
doc = Document()
try:
# 数式を処理
doc.SaveToFile("output.docx", FileFormat.Docx2019)
finally:
doc.Close() # エラーが発生しても確実にクリーンアップ
文字エンコーディング
LaTeX や MathML のエクスポートをファイルに保存する際は、特殊文字のために適切な UTF-8 エンコーディングを使用してください。
with open("equation.tex", "w", encoding="utf-8") as f:
f.write(latex_code)
画像ストリームの破棄
リソースを適切に解放するために、使用後に画像ストリームを必ず破棄してください。
image_stream = office_math.SaveImageToStream(ImageType.Bitmap)
try:
with open("equation.png", "wb") as f:
f.write(image_stream.ToArray())
finally:
image_stream.Dispose()
まとめ
本記事では、Spire.Doc for Python を使用して Python で Word ドキュメントに数式を挿入する方法を実証しました。Spire API を活用することで、開発者は LaTeX および MathML コードから Word 数式を作成し、LaTeX、MathML、Word のネイティブ OMML 形式間で変換し、数式を画像としてレンダリングできます。この機能は、科学文書生成、教育コンテンツ作成、数式公開ワークフローの自動化に不可欠です。
Spire.Doc for Python は、基本的な挿入を超えた包括的な数式処理機能を提供し、LaTeX および MathML から Word のネイティブ OMML 形式への変換、Word 数式を LaTeX、MathML、OMML にエクスポートする機能を含みます。このライブラリは、複雑な数式組版を簡素化しながら、Microsoft Word のネイティブ数式エンジンとの互換性を維持します。
Spire.Doc for Python の全機能を評価したい場合は、30 日間の無料ライセンスを申請できます。
9. FAQ
Python を使用して Word に数式を挿入するにはどうすればよいですか?
Spire.Doc for Python の OfficeMath クラスを使用します。OfficeMath オブジェクトを作成し、FromLatexMathCode() または FromMathMLCode() を呼び出して数式コードを指定し、para.Items.Add(office_math) を使用して段落に追加します。最後に、doc.SaveToFile() を使用してドキュメントを保存します。
Python で Word ドキュメントに LaTeX 数式を追加できますか?
はい。Spire.Doc for Python は、FromLatexMathCode() メソッドを使用して LaTeX コードから数式を挿入することをサポートしています。分数、積分、上付き文字、下付き文字、ギリシャ文字などの標準的な数式表記を Word 互換の数式に変換できます。
Spire.Doc は MathML 数式をサポートしていますか?
はい。FromMathMLCode() メソッドを使用して MathML から Word 数式を作成できます。MathML コンテンツに正しい名前空間宣言が含まれていることを確認してください。
<math xmlns="http://www.w3.org/1998/Math/MathML">
Word 数式を LaTeX や MathML にエクスポートできますか?
はい。Spire.Doc for Python は、ToLaTexMathCode() および ToMathMLCode() メソッドを提供しており、Office Math 数式を LaTeX または MathML 形式にエクスポートできます。これは、コンテンツ移行、保存、または他の数式システムとの統合に役立ちます。
数式を画像としてレンダリングするにはどうすればよいですか?
OfficeMath オブジェクトの SaveImageToStream() メソッドを使用して、数式を画像ストリームとしてレンダリングします。その後、ストリームを画像ファイルとして保存し、プレゼンテーション、Web ページ、またはプレビューシステムで使用できます。






