在 Python 中从演示文稿导出数学公式

介绍

Aspose.Slides for Python via .NET 允许您从演示文稿中导出数学公式。例如,您可能需要从特定幻灯片中提取公式,并在其他程序或平台中重新使用它们。

导出数学公式为 LaTeX

Aspose.Slides 可以直接将 PowerPoint 数学公式转换为 LaTeX;不需要中间的 MathML 文件或外部转换器。数学公式存储在文本框中,形式为 MathPortion。使用 MathPortion.math_paragraph 获取 MathParagraph,然后调用 MathParagraph.to_latex。该方法返回一个字符串,您可以保存、显示、发送到其他应用程序或进一步处理。

下面的示例会检查每个幻灯片上的所有文本框,查找所有数学段落,并将每个公式写入单独的 .tex 文件:

import aspose.slides as slides

with slides.Presentation("equations.pptx") as presentation:
    for slide_number, slide in enumerate(presentation.slides, start=1):
        equation_number = 1
        text_frames = slides.util.SlideUtil.get_all_text_boxes(slide)

        for text_frame in text_frames:
            for paragraph in text_frame.paragraphs:
                for portion in paragraph.portions:
                    if not isinstance(portion, slides.mathtext.MathPortion):
                        continue

                    math_paragraph = portion.math_paragraph
                    latex_path = f"slide_{slide_number}_equation_{equation_number}.tex"

                    latex_text = math_paragraph.to_latex()
                    with open(latex_path, "w", encoding="utf-8") as latex_file:
                        latex_file.write(latex_text)
                    equation_number += 1

SlideUtil.get_all_text_boxes 返回在幻灯片上找到的所有文本框。MathPortion 类型检查将真正可编辑的公式与普通文本和图像区分开来。

LaTeX 引擎和文档模板并不都支持相同的命令、宏包或 Unicode 字符。请使用您应用程序所使用的 LaTeX 引擎测试返回的字符串。如果某个符号或 Office Math 元素在该环境中没有合适的表示,请在返回的字符串中将其替换为项目特定的命令,或跳过该公式并记录问题以供审查。

将数学公式保存为 MathML

尽管人类可以轻松编写 LaTeX,MathML 通常由应用程序自动生成。由于 MathML 基于 XML,程序可以可靠地读取和解析它,因此它在许多领域被广泛用作输出和打印格式。

下面的示例代码展示了如何将演示文稿中的数学公式导出为 MathML:

import aspose.slides as slides
import aspose.slides.mathtext as math

with slides.Presentation() as presentation:
    slide = presentation.slides[0]

    auto_shape = slide.shapes.add_math_shape(0, 0, 500, 50)
    math_paragraph = auto_shape.text_frame.paragraphs[0].portions[0].math_paragraph

    math_paragraph.add(
        math.MathematicalText("a").
            set_superscript("2").
            join("+").
            join(math.MathematicalText("b").set_superscript("2")).
            join("=").
            join(math.MathematicalText("c").set_superscript("2")))

    with open("mathml.xml", "wb") as file_stream:
        math_paragraph.write_as_math_ml(file_stream)

常见问题

到底是导出到 MathML 的段落还是单个公式块?

您可以将整个数学段落(MathParagraph)或单个块(MathBlock)导出为 MathML。这两种类型都提供了写入 MathML 的方法。

如何判断幻灯片上的对象是数学公式而不是普通文本或图像?

公式存在于 MathPortion 中并拥有一个 MathParagraph。没有 [MathParagraph] 的图像和普通文本段落不是可导出的公式。

演示文稿中的 MathML 来源是什么——它是 PowerPoint 特有的还是标准?

导出目标是标准的 MathML(XML)。Aspose 使用 Presentation MathML——标准的呈现子集,它在各种应用和 Web 中被广泛使用。

是否支持导出表格、SmartArt、组合等内部的公式?

是的,如果这些对象包含带有 MathParagraph 的文本段落(即真实的 PowerPoint 公式),则会被导出。如果公式以图像形式嵌入,则不会导出。

导出为 MathML 会修改原始演示文稿吗?

不会。将公式写入 MathML 只是对其内容的序列化,不会修改演示文稿文件。