Eksport równań matematycznych z prezentacji w Pythonie

Wprowadzenie

Aspose.Slides umożliwia eksportowanie równań matematycznych z prezentacji. Na przykład, możesz potrzebować wyodrębnić równania matematyczne ze slajdów (z określonej prezentacji) i użyć ich w innym programie lub platformie.

Eksportowanie równań matematycznych do LaTeX

Aspose.Slides może konwertować równanie matematyczne z PowerPointa bezpośrednio do LaTeX; nie jest wymagany pośredni plik MathML ani zewnętrzny konwerter. Równanie matematyczne jest przechowywane w ramce tekstowej jako MathPortion. Użyj MathPortion.getMathParagraph, aby uzyskać MathParagraph, a następnie wywołaj MathParagraph.toLatex. Metoda zwraca łańcuch znaków, który możesz zapisać, wyświetlić, wysłać do innej aplikacji lub dalszej przetworzyć.

Poniższy przykład przegląda każdą ramkę tekstową na każdym slajdzie, znajduje wszystkie fragmenty matematyczne i zapisuje każde równanie do osobnego pliku .tex:

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 zwraca wszystkie ramki tekstowe znalezione na slajdzie. Sprawdzenie typu MathPortion oddziela prawdziwe edytowalne równania od zwykłego tekstu i obrazów.

Silniki LaTeX i szablony dokumentów nie obsługują wszystkich tych samych poleceń, pakietów ani znaków Unicode. Przetestuj zwrócony łańcuch za pomocą silnika LaTeX używanego w Twojej aplikacji. Jeśli symbol lub element Office Math nie ma odpowiedniej reprezentacji w tym środowisku, zastąp go w zwróconym łańcuchu poleceniem specyficznym dla projektu lub pomiń równanie i zanotuj problem do przeglądu.

Zapis równań matematycznych jako MathML

Chociaż programiści mogą łatwo pisać kod dla niektórych formatów równań, takich jak LaTeX, MathML jest trudniejszy do ręcznego pisania, ponieważ jest przeznaczony do automatycznego generowania przez aplikacje. Programy mogą łatwo odczytywać i analizować MathML, ponieważ jest on oparty na XML, więc MathML jest powszechnie używany jako format wyjściowy i drukowania w wielu dziedzinach.

Ten przykładowy kod pokazuje, jak wyeksportować równanie matematyczne z prezentacji do MathML:

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()

Najczęściej zadawane pytania

Co dokładnie jest eksportowane do MathML — cały akapit czy pojedynczy blok formuły?

Możesz wyeksportować zarówno cały akapit matematyczny (MathParagraph) jak i pojedynczy blok (MathBlock). Oba typy udostępniają metodę zapisu do MathML.

Jak mogę rozpoznać, że obiekt na slajdzie jest formułą matematyczną, a nie zwykłym tekstem lub obrazem?

Formuła znajduje się w MathPortion i posiada MathParagraph. Obrazy oraz zwykłe fragmenty tekstu bez MathParagraph nie są eksportowalnymi formułami.

Skąd pochodzi MathML w prezentacji — czy jest specyficzny dla PowerPointa, czy jest standardem?

Eksportowany jest standardowy MathML (XML). Aspose używa Presentation MathML — podzbioru prezentacyjnego standardu, który jest szeroko stosowany w aplikacjach i w sieci.

Czy eksportowanie formuł znajdujących się w tabelach, SmartArt, grupach itp. jest obsługiwane?

Tak, jeśli te obiekty zawierają fragmenty tekstu z MathParagraph (czyli prawdziwe formuły PowerPoint), są one eksportowane. Jeśli formuła jest osadzona jako obraz, nie zostanie wyeksportowana.

Czy eksport do MathML modyfikuje oryginalną prezentację?

Nie. Zapis MathML jest serializacją zawartości formuły; nie modyfikuje pliku prezentacji.