Exportar ecuaciones matemáticas de presentaciones en Python

Introducción

Aspose.Slides le permite exportar ecuaciones matemáticas desde presentaciones. Por ejemplo, puede necesitar extraer las ecuaciones matemáticas de las diapositivas (de una presentación específica) y utilizarlas en otro programa o plataforma.

Exportar ecuaciones matemáticas a LaTeX

Aspose.Slides puede convertir una ecuación matemática de PowerPoint directamente a LaTeX; no se requiere un archivo intermedio de MathML ni un conversor externo. Una ecuación matemática se almacena en un marco de texto como una MathPortion. Use MathPortion.getMathParagraph para obtener un MathParagraph, y luego llame a MathParagraph.toLatex. El método devuelve una cadena que puede guardar, mostrar, enviar a otra aplicación o procesar más adelante.

El siguiente ejemplo examina cada marco de texto en cada diapositiva, encuentra todas las porciones matemáticas y escribe cada ecuación en un archivo .tex separado:

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 devuelve todos los marcos de texto encontrados en una diapositiva. La comprobación de tipo MathPortion separa las ecuaciones editables genuinas del texto e imágenes ordinarias.

Los motores LaTeX y las plantillas de documentos no soportan todos los mismos comandos, paquetes o caracteres Unicode. Pruebe la cadena devuelta con el motor LaTeX usado por su aplicación. Si un símbolo o elemento de Office Math no tiene una representación adecuada en ese entorno, reemplácelo en la cadena devuelta con un comando específico del proyecto o omita la ecuación y registre el problema para su revisión.

Guardar ecuaciones matemáticas como MathML

Aunque las personas pueden escribir código fácilmente para algunos formatos de ecuaciones, como LaTeX, MathML es más difícil de escribir a mano porque está diseñado para ser generado automáticamente por aplicaciones. Los programas pueden leer y analizar MathML fácilmente porque está basado en XML, por lo que MathML se usa comúnmente como formato de salida e impresión en muchos campos.

Este fragmento de código muestra cómo exportar una ecuación matemática de una presentación a 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()

Preguntas frecuentes

¿Qué se exporta exactamente a MathML: un párrafo o un bloque de fórmula individual?

Puede exportar ya sea un párrafo matemático completo (MathParagraph) o un bloque individual (MathBlock) a MathML. Ambos tipos proporcionan un método para escribir a MathML.

¿Cómo puedo saber si un objeto en una diapositiva es una fórmula matemática y no texto normal o una imagen?

Una fórmula reside en una MathPortion y tiene un MathParagraph. Las imágenes y los fragmentos de texto normales sin un MathParagraph no son fórmulas exportables.

¿De dónde proviene el MathML en una presentación, es específico de PowerPoint o es un estándar?

La exportación apunta a MathML estándar (XML). Aspose utiliza Presentation MathML, el subconjunto de presentación del estándar, que está ampliamente usado en aplicaciones y en la web.

¿Se admite la exportación de fórmulas dentro de tablas, SmartArt, grupos, etc.?

Sí, si esos objetos contienen fragmentos de texto con un MathParagraph (es decir, fórmulas reales de PowerPoint), se exportan. Si una fórmula está incrustada como imagen, no lo es.

¿La exportación a MathML modifica la presentación original?

No. Escribir MathML es una serialización del contenido de la fórmula; no modifica el archivo de la presentación.