Matematika egyenletek exportálása prezentációkból Pythonban

Bevezetés

Az Aspose.Slides lehetővé teszi, hogy matematikai egyenleteket exportáljon a bemutatókból. Például előfordulhat, hogy ki szeretné nyerni a diákról (egy adott prezentációból) a matematikai egyenleteket, és egy másik programban vagy platformon használja őket.

Matematikai egyenletek exportálása LaTeX-be

Az Aspose.Slides képes a PowerPoint matematikai egyenletet közvetlenül LaTeX-be konvertálni; köztes MathML-fájlra és külső konverterre nincs szükség. A matematikai egyenlet egy szövegkeretben egy MathPortionként van tárolva. Az MathPortion.getMathParagraph segítségével kaphat egy MathParagraph-t, majd hívja meg a MathParagraph.toLatex metódust. A metódus egy karakterláncot ad vissza, amelyet elmenthet, megjeleníthet, egy másik alkalmazásnak elküldhet vagy tovább feldolgozhat.

A következő példa minden szövegkeretet vizsgál minden dián, megtalálja az összes matematikai részt, és minden egyenletet egy külön .tex fájlba ír:

from pathlib import Path

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import MathPortion, Presentation, SlideUtil

presentation = Presentation("equations.pptx")
try:
    slide_count = presentation.getSlides().size()
    for slide_index in range(slide_count):
        slide = presentation.getSlides().get_Item(slide_index)
        slide_number = slide_index + 1
        equation_number = 1
        text_frames = SlideUtil.getAllTextBoxes(slide)

        for text_frame in text_frames:
            for paragraph in text_frame.getParagraphs():
                for portion in paragraph.getPortions():
                    if not isinstance(portion, MathPortion):
                        continue

                    math_paragraph = portion.getMathParagraph()
                    latex_file_name = f"slide_{slide_number}_equation_{equation_number}.tex"
                    latex_text = math_paragraph.toLatex()
                    latex_path = Path(latex_file_name)
                    latex_path.write_text(str(latex_text), encoding="utf-8")
                    equation_number += 1
finally:
    presentation.dispose()

SlideUtil.getAllTextBoxes visszaadja az egy dián található összes szövegkeretet. A MathPortion típusellenőrzés elválasztja a valódi szerkeszthető egyenleteket a szokásos szövegtől és képektől.

A LaTeX-motorok és dokumentumsablonok nem mind támogatják ugyanazokat a parancsokat, csomagokat vagy Unicode karaktereket. Tesztelje a visszaadott karakterláncot a alkalmazásában használt LaTeX-motorral. Ha egy szimbólumnak vagy Office Math elemnek nincs megfelelő ábrázolása az adott környezetben, cserélje le a visszaadott karakterláncban egy projekt‑specifikus parancsra, vagy hagyja ki az egyenletet, és rögzítse a problémát felülvizsgálatra.

Matematikai egyenletek mentése MathML-ként

Míg egyes egyenletformátumokhoz, például a LaTeX‑hez, könnyen lehet kézzel kódot írni, a MathML nehezebb kézzel megírni, mivel azt automatikusan generálni tervezték alkalmazások által. A programok könnyen beolvashatják és feldolgozhatják a MathML‑t, mivel XML‑alapú, ezért a MathML gyakran használt kimeneti és nyomtatási formátum sok területen.

Ez a mintakód megmutatja, hogyan exportálhat egy matematikai egyenletet egy prezentációból MathML‑be:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import MathematicalText, Presentation
from java.io import FileOutputStream

presentation = Presentation()
try:
    math_shape = presentation.getSlides().get_Item(0).getShapes().addMathShape(0, 0, 500, 50)
    math_portion = math_shape.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0)
    math_paragraph = math_portion.getMathParagraph()

    a_squared = MathematicalText("a").setSuperscript("2")
    b_squared = MathematicalText("b").setSuperscript("2")
    c_squared = MathematicalText("c").setSuperscript("2")
    equation = a_squared.join("+").join(b_squared).join("=").join(c_squared)
    math_paragraph.add(equation)

    stream = FileOutputStream("mathml.xml")
    try:
        math_paragraph.writeAsMathMl(stream)
    finally:
        stream.close()
finally:
    presentation.dispose()

GYIK

Mi pontosan exportálódik MathML‑be – egy bekezdés vagy egy egyedi képletblokk?
Exportálhatja az egész matematikai bekezdést (MathParagraph) vagy egy egyedi blokkot (MathBlock) MathML‑be. Mindkét típus rendelkezik egy metódussal a MathML‑be íráshoz.

Hogyan tudom megállapítani, hogy egy dián lévő objektum matematikai képlet‑e a szokásos szöveg vagy kép helyett?
Egy képlet egy MathPortion‑ben él, és rendelkezik egy MathParagraph‑vel. Képek és a szokásos szövegrészek, amelyek nem tartalmaznak [MathParagraph]‑t, nem exportálható képletek.

Honnan származik a MathML egy prezentációban – PowerPoint‑specifikus vagy szabványos?
Az export a szabványos MathML‑re (XML) irányul. Az Aspose a Presentation MathML‑t használja – a szabvány bemutató részhalmazát –, amelyet széles körben használnak alkalmazások és a web.

Támogatott‑e a képletek exportálása táblázatok, SmartArt, csoportok stb. belsejéből?
Igen, ha azok az objektumok szövegrészeket tartalmaznak egy [MathParagraph]‑val (azaz valódi PowerPoint képleteket), akkor exportálódnak. Ha egy képlet képként van beágyazva, akkor nem.

Módosítja az export MathML‑be az eredeti prezentációt?
Nem. A MathML írása a képlet tartalmának sorosítása; nem módosítja a prezentációfájlt.