以下に、pptx2md2.py のソースコードを解析して作成した、Sphinx(MyST)でビルド可能なMarkdownドキュメントを示します。

# pptx2md2.py ドキュメント

## 1. はじめに

``pptx2md2.py`` は、PowerPointファイル (``.pptx``) からテキスト、数式、および画像を抽出し、Markdown形式のドキュメントに変換するためのPythonスクリプトです。

## 2. 概要

PowerPointファイルからテキスト、数式、図を抽出し、Markdown形式で出力するスクリプトです。

## 3. 詳細説明

このスクリプトは、``python-pptx`` と ``lxml`` ライブラリを使用して、PPTXファイルの内部構造を解析します。
各スライドの内容を、Markdown形式の出力ファイルに変換します。
具体的には、以下の要素を抽出してMarkdownに変換します。

*   スライドのタイトル
*   テキストボックス内のテキスト(箇条書きのレベルと改行を保持)
*   Office Math Markup Language (OMML) で記述された数式(LaTeX形式に変換)
*   スライドに埋め込まれた画像(指定されたディレクトリに保存し、Markdownからリンク)

変換されたMarkdownファイルは、プレゼンテーションのコンテンツを再利用しやすい形で提供します。

## 4. 依存関係

このスクリプトは以下の非標準Pythonライブラリに依存しています。

*   ``python-pptx``: PowerPointファイル (``.pptx``) の読み込みと解析に使用されます。
*   ``lxml``: XML構造(特にOffice Math Markup Language (OMML))の解析に使用されます。

標準ライブラリである ``argparse``, ``os``, ``re`` も使用されています。

## 5. インストール

必要なライブラリは ``pip`` を使用してインストールできます。

```bash
pip install python-pptx lxml

6. 使用方法

pptx2md2.py スクリプトは、コマンドラインから実行します。入力するPowerPointファイル、出力するMarkdownファイル、および画像を保存するディレクトリを指定する必要があります。

6.1 基本的な使用例

python pptx2md2.py --input presentation.pptx --output output.md --imagedir presentation_images

このコマンドは、presentation.pptx を読み込み、その内容を output.md というMarkdownファイルに変換します。抽出された画像は presentation_images ディレクトリに保存されます。

6.2 入出力ファイルと画像ディレクトリ

  • 入力ファイル: --input オプションでPowerPointファイル (例: input.pptx) を指定します。

  • 出力ファイル: --output オプションでMarkdownファイル (例: output.md) を指定します。

  • 画像ディレクトリ: --imagedir オプションで画像を保存するディレクトリ名を指定します。このディレクトリが存在しない場合は自動的に作成されます。

7. コマンドライン引数

pptx2md2.py は以下のコマンドライン引数をサポートしています。

  • -i, --input

    • 説明: 入力するPowerPointファイル名です。

    • 必須: はい

    • 型: 文字列

  • -o, --output

    • 説明: 出力するMarkdownファイル名です。

    • 必須: はい

    • 型: 文字列

  • --xml

    • 説明: 数式の元のOMML XMLを出力するかどうかを示すフラグです。このスクリプトの現在の実装では、数式の元のOMML XMLはMarkdown出力には含まれませんが、引数としては定義されています。

    • 必須: いいえ

    • 型: ブール値 (action="store_true")

    • デフォルト: False

  • --imagedir

    • 説明: 画像を保存するディレクトリ名です。

    • 必須: いいえ

    • 型: 文字列

    • デフォルト: images

  • --pause

    • 説明: スクリプト終了時に、ユーザーが ENTER キーを押すまで待機するかどうかを示すフラグです。これは、コマンドプロンプトウィンドウがすぐに閉じるのを防ぐのに役立ちます。

    • 必須: いいえ

    • 型: 整数

    • デフォルト: 0

8. 関数リファレンス

8.1 terminate()

  • 概要: プログラムを終了します。

  • 詳細説明: pause グローバル変数が1に設定されている場合、ユーザーが ENTER キーを押すまで待機してからプログラムを終了します。 これにより、コマンドプロンプトのウィンドウがすぐに閉じられるのを防ぎます。

  • 引数: なし

  • 戻り値:

    • None

8.2 initialize()

  • 概要: コマンドライン引数を解析し、設定を初期化します。

  • 詳細説明: argparse モジュールを使用して、以下のコマンドライン引数を定義および解析します。

    • -i または --input: 入力するPowerPointファイル名 (必須)

    • -o または --output: 出力するMarkdownファイル名 (必須)

    • --xml: 数式の元のOMML XMLを出力するかどうかを示すフラグ

    • --imagedir: 画像を保存するディレクトリ名 (デフォルトは images)

    • --pause: 終了時に待機するかどうかを示すフラグ (デフォルトは 0) 解析された引数は argparse.Namespace オブジェクトとして返されます。

  • 引数: なし

  • 戻り値:

    • argparse.Namespace: 解析されたコマンドライン引数を含むオブジェクト。

8.3 get_slide_title(slide)

  • 概要: スライドからタイトルを抽出します。

  • 詳細説明: 指定された slide オブジェクトにタイトルプレースホルダーが存在する場合、そのテキストコンテンツを返します。 タイトルプレースホルダーが見つからない場合は、「無題のスライド」というデフォルト文字列を返します。 抽出されたテキストは前後の空白が取り除かれます。

  • 引数:

    • slide (pptx.slide.Slide): タイトルを抽出する対象のスライドオブジェクト。

  • 戻り値:

    • str: スライドのタイトル文字列。

8.4 _safe_text_replace_math_unicode(text)

  • 概要: テキスト内のUnicode数式文字を対応するLaTeXコマンドに置換します。

  • 詳細説明: MATH_UNICODE_MAP に定義されているUnicode文字(例: 数学記号、特殊なアルファベットなど)を、 対応するLaTeXコマンドの文字列に置換します。 入力テキストが空の場合は、空文字列をそのまま返します。

  • 引数:

    • text (str): 置換処理を行う入力テキスト。

  • 戻り値:

    • str: Unicode数式文字がLaTeXコマンドに置換されたテキスト。

8.5 _find_first(element, candidates)

  • 概要: 指定された要素の子孫から、候補タグのいずれかに最初に一致する要素を見つけます。

  • 詳細説明: candidates リスト内のタグ名を順番に試行し、element の直下の子要素の中から、 最初に見つかったタグ名の要素を返します。いずれの候補も見つからなかった場合は None を返します。

  • 引数:

    • element (lxml.etree._Element): 検索を開始する親要素。

    • candidates (list[str]): 検索するタグ名のリスト。

  • 戻り値:

    • lxml.etree._Element または None: 最初に見つかった子要素、または見つからなかった場合は None

8.6 _detect_nary_op_char(element)

  • 概要: Nary(多項演算子)要素から演算子文字を検出します。

  • 詳細説明: OMMLのNary要素から、総和記号などの演算子文字を特定します。 まず m:naryPr/m:chr タグの val 属性を探します。 見つからない場合は、要素内の m:t タグ(下付きや上付きの子孫ではないもの)を走査し、 OPERATOR_CHARS に含まれる文字を検出します。

  • 引数:

    • element (lxml.etree._Element): Nary要素。

  • 戻り値:

    • str: 検出された演算子文字、または見つからなかった場合は空文字列。

8.7 omml_to_latex(element)

  • 概要: Office Math Markup Language (OMML) 要素をLaTeX形式に変換します。

  • 詳細説明: OMMLのXML要素を再帰的に走査し、対応するLaTeX表現を生成します。 以下のような主要なOMML構造を扱います。

    • m:f: 分数 (\\frac)

    • m:rad: 根号 (\\sqrt)

    • m:sSup: 上付き文字 (^)

    • m:sSub: 下付き文字 (_)

    • m:sSubSup: 下付き上付き文字 (_, ^)

    • m:d: 区切り文字 (括弧など)

    • m:r: テキストのまとまり

    • m:t: テキストコンテンツ (_safe_text_replace_math_unicodeで処理)

    • m:limLow, m:limUpp: 限界式の下限、上限

    • m:int, m:nary: 積分、多項演算子 (総和、総乗など)

    未知のタグや処理されないタグについては、その子要素を再帰的に処理して結合します。

  • 引数:

    • element (lxml.etree._Element): 変換するOMML要素。

  • 戻り値:

    • str: 変換されたLaTeX文字列。

8.8 split_latex_blocks(s)

  • 概要: LaTeX文字列を改行コード \\\\ で分割し、個別のブロックのリストを生成します。

  • 詳細説明: 入力されたLaTeX文字列を正規表現 r'\\\\' (すなわち \\ という文字列) で分割します。 分割された各パーツは前後の空白が取り除かれ、空文字列ではないものだけがリストに含まれます。 入力文字列が空の場合や、分割後に有効なパーツがない場合は空のリストを返します。

  • 引数:

    • s (str): 分割するLaTeX文字列。

  • 戻り値:

    • list[str]: 分割されたLaTeXブロックのリスト。

8.9 extract_content_to_markdown(input_pptx, output_md, image_dir, include_xml=False)

  • 概要: PowerPointファイルからコンテンツを抽出し、Markdownファイルに変換して保存します。

  • 詳細説明: python-pptx を使用して指定されたPPTXファイルを開き、各スライドを順番に処理します。 各スライドから以下のコンテンツを抽出し、Markdown形式で出力ファイルに書き込みます。

    1. スライドタイトル: Markdownのヘッダーとして追加されます。

    2. テキスト: スライド内のすべての段落 (a:p) を走査し、テキスト、改行 (a:br)、 および数式 (m:oMath, m:oMathPara) を結合して、Markdownの箇条書きとして出力します。 箇条書きのレベルは a:pPr/@lvl 属性に基づいて適切にインデントされます。

    3. 数式: OMML形式の数式を omml_to_latex 関数でLaTeX形式に変換し、 Markdownの数式ブロック ($$ ... $$) として出力します。重複する数式は一度だけ処理されます。

    4. : スライドに埋め込まれた画像を抽出し、指定された image_dir に保存します。 保存された画像はMarkdownの画像リンク (![alt_text](path/to/image.png)) として埋め込まれます。

    処理中にファイル読み込みや画像保存に関するエラーが発生した場合は、コンソールにエラーメッセージが表示されます。

  • 引数:

    • input_pptx (str): 入力するPowerPoint (.pptx) ファイルのパス。

    • output_md (str): 出力するMarkdown (.md) ファイルのパス。

    • image_dir (str): 抽出された画像を保存するディレクトリのパス。存在しない場合は作成されます。

    • include_xml (bool): 数式の元のOMML XMLを出力するかどうかを示すフラグ。(この関数内では現在未使用)

  • 戻り値:

    • None

8.10 main()

  • 概要: スクリプトの主要な実行フローを制御します。

  • 詳細説明: コマンドライン引数を初期化し、入力PowerPointファイルの存在を確認します。 ファイルが存在しない場合はエラーメッセージを表示して終了します。 その後、extract_content_to_markdown 関数を呼び出して、PowerPointからMarkdownへの変換処理を実行します。 終了時に pause フラグが設定されている場合は、ユーザーの入力を待ちます。

  • 引数: なし

  • 戻り値:

    • None

9. 注意事項

  • スクリプトはPowerPointファイル内に埋め込まれたOMML形式の数式をLaTeXに変換しますが、すべての複雑なOMML構造が完璧にLaTeXに変換されることを保証するものではありません。特に、高度なOMMLの機能は正しく変換されない場合があります。

  • 画像抽出は、スライドのリレーションシップに基づいて行われます。一部の特殊な画像形式や埋め込み方法には対応していない可能性があります。

  • PowerPointのテキスト書式(フォント、色、サイズなど)はMarkdownには反映されません。純粋なテキストコンテンツと構造(箇条書きレベル)のみが変換されます。

10. ライセンス

このコードのライセンス情報は、提供されたソースコードからは確認できません。

11. 変更履歴

このコードの変更履歴は、提供されたソースコードからは確認できません。