Añadir ecuaciones matemáticas a presentaciones de PowerPoint en Python
Visión general
En PowerPoint, puedes escribir una ecuación o fórmula matemática y mostrarla en tu presentación. Hay disponibles varios símbolos matemáticos que se pueden añadir al texto o a las ecuaciones. El constructor de ecuaciones matemáticas se usa para crear fórmulas complejas como:
- Fracción matemática
- Radical matemático
- Función matemática
- Límites y funciones logarítmicas
- Operaciones N-arias
- Matriz
- Operadores grandes
- Funciones seno, coseno
Para añadir una ecuación matemática en PowerPoint, se utiliza el menú Insertar → Ecuación:

Esto creará un texto matemático en XML que puede mostrarse en PowerPoint de la siguiente manera:

PowerPoint admite una amplia gama de símbolos matemáticos para crear ecuaciones. Sin embargo, generar ecuaciones matemáticas complejas en PowerPoint a menudo no produce un resultado pulido y profesional. Como resultado, los usuarios que crean frecuentemente presentaciones matemáticas suelen recurrir a soluciones de terceros para obtener fórmulas de mejor aspecto.
Usando la Aspose.Slides API, puedes trabajar con ecuaciones matemáticas en presentaciones de PowerPoint programáticamente en Python. Crea nuevas expresiones matemáticas o edita las creadas previamente. Existe soporte parcial para exportar estructuras matemáticas como imágenes.
Cómo crear una ecuación matemática
Los elementos matemáticos se usan para construir cualquier construcción matemática, sin importar el nivel de anidamiento. Una colección lineal de estos elementos forma un bloque matemático, representado por la clase MathBlock. La clase MathBlock representa una expresión, fórmula o ecuación matemática independiente. MathPortion se usa para contener texto matemático (distinto de la clase regular Portion), mientras que MathParagraph permite manipular un conjunto de objetos MathBlock. Estas clases son esenciales para trabajar con ecuaciones matemáticas de PowerPoint mediante la API de Aspose.Slides.
Veamos cómo crear la siguiente ecuación matemática usando la API de Aspose.Slides:

Para añadir una expresión matemática a la diapositiva, primero agrega una forma que contendrá el texto matemático:
import aspose.slides as slides
import aspose.slides.mathtext as math
with slides.Presentation() as presentation:
math_shape = presentation.slides[0].shapes.add_math_shape(0, 0, 720, 150)
Después de crear la forma, ya contiene un párrafo con una porción matemática por defecto. La clase MathPortion representa una porción que contiene texto matemático. Para acceder al contenido matemático dentro de una MathPortion, consulta la variable MathParagraph:
math_paragraph = math_shape.text_frame.paragraphs[0].portions[0].math_paragraph
La clase MathParagraph te permite leer, añadir, editar y eliminar bloques matemáticos (MathBlock), que consisten en combinaciones de elementos matemáticos. Por ejemplo, crea una fracción y colócala en la presentación:
fraction = math.MathematicalText("x").divide("y")
math_paragraph.add(math.MathBlock(fraction))
math_block = (
math.MathematicalText("c").set_superscript("2").
join("=").
join(math.MathematicalText("a").set_superscript("2")).
join("+").
join(math.MathematicalText("b").set_superscript("2")))
Las operaciones de la interfaz IMathElement están implementadas en cada tipo de elemento, incluida la clase MathBlock.
A continuación se muestra el código completo de ejemplo:
import aspose.slides as slides
import aspose.slides.mathtext as math
with slides.Presentation() as presentation:
math_shape = presentation.slides[0].shapes.add_math_shape(0, 0, 720, 150)
math_paragraph = math_shape.text_frame.paragraphs[0].portions[0].math_paragraph
fraction = math.MathematicalText("x").divide("y")
math_paragraph.add(math.MathBlock(fraction))
math_block = (
math.MathematicalText("c").set_superscript("2").
join("=").
join(math.MathematicalText("a").set_superscript("2")).
join("+").
join(math.MathematicalText("b").set_superscript("2")))
math_paragraph.add(math_block)
presentation.save("math.pptx", slides.export.SaveFormat.PPTX)
Tipos de elementos matemáticos
Las expresiones matemáticas se componen de secuencias de elementos matemáticos. Un bloque matemático representa dicha secuencia, y los argumentos de estos elementos forman una estructura anidada tipo árbol.
Existen muchos tipos de elementos matemáticos que pueden usarse para construir un bloque matemático. Cada uno de estos elementos puede agregarse dentro de otro, formando una estructura arbórea. El tipo más sencillo es aquel que no contiene otros elementos de texto matemático.
Cada tipo de elemento matemático implementa la interfaz IMathElement, lo que permite usar un conjunto común de operaciones matemáticas sobre diferentes tipos de elementos.
Clase MathematicalText
La clase MathematicalText representa un texto matemático, el elemento subyacente de todas las construcciones matemáticas. El texto matemático puede representar operandos y operadores, variables o cualquier otro texto lineal.
Ejemplo: 𝑎=𝑏+𝑐
Clase MathFraction
La clase MathFraction especifica un objeto fracción compuesto por numerador y denominador separados por una barra de fracción. La barra puede ser horizontal o diagonal, según las propiedades de la fracción. El mismo objeto también se usa para representar la función de pila, que coloca un elemento encima de otro sin barra de fracción.
Ejemplo:

Clase MathRadical
La clase MathRadical especifica la función radical (raíz matemática), compuesta por una base y un grado opcional.
Ejemplo:

Clase MathFunction
La clase MathFunction especifica una función de un argumento. Contiene propiedades como name, que representa el nombre de la función, y base, que representa el argumento de la función.
Ejemplo:

Clase MathNaryOperator
La clase MathNaryOperator especifica un objeto matemático N-ario, como una sumatoria o una integral. Consta de un operador, una base (u operando) y límites superior e inferior opcionales. Ejemplos de operadores N-arios son Sumatoria, Unión, Intersección e Integral.
Esta clase no incluye operadores simples como suma, resta, etc. Estos se representan mediante un único texto MathematicalText.
Ejemplo:

Clase MathLimit
La clase MathLimit crea el límite superior o inferior. Especifica el objeto límite, compuesto por texto en la línea base y texto de menor tamaño inmediatamente encima o debajo de él. Este elemento no incluye la palabra “lim”, pero permite colocar texto en la parte superior o inferior de la expresión. Así, la expresión

se crea combinando los elementos MathFunction y MathLimit de la siguiente manera:
function_name = math.MathLimit(math.MathematicalText("lim"), math.MathematicalText("𝑥→∞"))
math_function = math.MathFunction(function_name, math.MathematicalText("𝑥"))
Clases MathSubscriptElement, MathSuperscriptElement, MathRightSubSuperscriptElement, MathLeftSubSuperscriptElement
- MathSubscriptElement
- MathSuperscriptElement
- MathRightSubSuperscriptElement
- MathLeftSubSuperscriptElement
Estas clases especifican un índice inferior o superior. Puedes establecer simultáneamente subíndice y superíndice del lado izquierdo o derecho de un argumento, pero solo un subíndice o superíndice aislado se admite del lado derecho. La clase MathSubscriptElement también puede usarse para establecer el grado matemático de un número.
Ejemplo:

Clase MathMatrix
La clase MathMatrix especifica el objeto Matriz, que consiste en elementos hijos organizados en una o más filas y columnas. Es importante notar que las matrices no poseen delimitadores incorporados. Para encerrar la matriz entre corchetes, usa el objeto delimitador MathDelimiter. Los argumentos nulos pueden usarse para crear huecos en las matrices.
Ejemplo:

Clase MathArray
La clase MathArray especifica una matriz vertical de ecuaciones o cualquier objeto matemático.
Ejemplo:

Formato de elementos matemáticos
- Clase MathBorderBox: Dibuja un borde rectangular o alternativo alrededor del IMathElement.
Ejemplo:

-
Clase MathBox: Especifica el empaquetado lógico de un elemento matemático. Un objeto en caja puede servir como emulador de operador—con o sin punto de alineación—funcionar como salto de línea o agruparse para evitar quiebres de línea dentro. Por ejemplo, el operador “==” debería estar en caja para impedir quiebres.
-
Clase MathDelimiter: Especifica el objeto delimitador, que consta de caracteres de apertura y cierre (como paréntesis, llaves, corchetes o barras verticales) y uno o más elementos matemáticos dentro, separados por un carácter especificado. Ejemplos: (𝑥2); [𝑥2|𝑦2].
Ejemplo:

- Clase MathAccent: Especifica la función de acento, compuesta por una base y una marca diacrítica combinada.
Ejemplo: 𝑎́.
- Clase MathBar: Especifica la función barra, compuesta por un argumento base y una barra superior o inferior.
Ejemplo:

- Clase MathGroupingCharacter: Especifica un símbolo de agrupación colocado encima o debajo de una expresión, típicamente para resaltar relaciones entre elementos.
Ejemplo:

Operaciones matemáticas
Cada elemento matemático y cada expresión matemática (mediante MathBlock) implementa la interfaz IMathElement. Esto permite realizar operaciones sobre la estructura existente y formar expresiones más complejas. Todas las operaciones tienen dos conjuntos de parámetros: ya sea IMathElement o argumentos de tipo cadena. Las instancias de la clase MathematicalText se crean implícitamente a partir de cadenas especificadas cuando se usan argumentos de cadena. Las operaciones matemáticas disponibles en Aspose.Slides se enumeran a continuación.
Método Join
Estos métodos unen un elemento matemático y forman un bloque matemático. Por ejemplo:
element1 = math.MathematicalText("x")
element2 = math.MathematicalText("y")
block = element1.join(element2)
Método Divide
- divide(String)
- divide(IMathElement)
- divide(String, MathFractionTypes)
- divide(IMathElement, MathFractionTypes)
Estos métodos crean una fracción del tipo especificado con numerador y denominador indicados. Por ejemplo:
numerator = math.MathematicalText("x")
fraction = numerator.divide("y", math.MathFractionTypes.LINEAR)
Método Enclose
Estos métodos encierran el elemento entre caracteres especificados, como paréntesis u otros caracteres de marco. Por ejemplo:
delimiter = math.MathematicalText("x").enclose('[', ']')
delimiter2 = math.MathematicalText("elem1").join("elem2").enclose()
Método Function
Estos métodos aplican una función a un argumento usando el objeto actual como nombre de la función. Por ejemplo:
function = math.MathematicalText("sin").function("x")
Método AsArgumentOfFunction
- as_argument_of_function(String)
- as_argument_of_function(IMathElement)
- as_argument_of_function(MathFunctionsOfOneArgument)
- as_argument_of_function(MathFunctionsOfTwoArguments, IMathElement)
- as_argument_of_function(MathFunctionsOfTwoArguments, String)
Estos métodos usan la instancia actual como argumento de la función especificada. Puedes:
- especificar una cadena como nombre de la función, por ejemplo “cos”;
- seleccionar uno de los valores predefinidos de las enumeraciones MathFunctionsOfOneArgument o MathFunctionsOfTwoArguments, por ejemplo
MathFunctionsOfOneArgument.ARC_SIN; - pasar la instancia de IMathElement.
Por ejemplo:
function_name = math.MathLimit(math.MathematicalText("lim"), math.MathematicalText("𝑛→∞"))
func1 = math.MathematicalText("2x").as_argument_of_function(function_name)
func2 = math.MathematicalText("x").as_argument_of_function("sin")
func3 = math.MathematicalText("x").as_argument_of_function(math.MathFunctionsOfOneArgument.SIN)
func4 = math.MathematicalText("x").as_argument_of_function(math.MathFunctionsOfTwoArguments.LOG, "3")
Métodos SetSubscript, SetSuperscript, SetSubSuperscriptOnTheRight, SetSubSuperscriptOnTheLeft
- set_subscript(String)
- set_subscript(IMathElement)
- set_superscript(String)
- set_superscript(IMathElement)
- set_sub_superscript_on_the_right(String, String)
- set_sub_superscript_on_the_right(IMathElement, IMathElement)
- set_sub_superscript_on_the_left(String, String)
- set_sub_superscript_on_the_left(IMathElement, IMathElement)
Estos métodos establecen subíndice y superíndice. Puedes establecer ambos simultáneamente en el lado izquierdo o derecho del argumento; sin embargo, un subíndice o superíndice individual solo se admite del lado derecho. El Superscript también puede usarse para establecer el grado matemático de un número.
Ejemplo:
script = math.MathematicalText("y").set_sub_superscript_on_the_left("2x", "3z")
Método Radical
Estos métodos especifican la raíz matemática del grado dado según el argumento indicado.
Ejemplo:
radical = math.MathematicalText("x").radical("3")
Métodos SetUpperLimit y SetLowerLimit
- set_upper_limit(String)
- set_upper_limit(IMathElement)
- set_lower_limit(String)
- set_lower_limit(IMathElement)
Estos métodos reciben un límite superior o inferior, donde “upper” y “lower” indican la posición del argumento respecto a la base.
Consideremos la expresión:

Tales expresiones pueden crearse combinando las clases MathFunction y MathLimit, junto con las operaciones de la interfaz IMathElement, de la siguiente forma:
math_expression = math.MathematicalText("lim").set_lower_limit("x→∞").function("x")
Métodos Nary e Integral
- nary(MathNaryOperatorTypes, IMathElement, IMathElement)
- nary(MathNaryOperatorTypes, String, String)
- integral(MathIntegralTypes)
- integral(MathIntegralTypes, IMathElement, IMathElement)
- integral(MathIntegralTypes, String, String)
- integral(MathIntegralTypes, IMathElement, IMathElement, MathLimitLocations)
- integral(MathIntegralTypes, String, String, MathLimitLocations)
Ambos métodos, nary e integral, crean y devuelven el operador N-ario representado por el tipo MathNaryOperator. En el método Nary, la enumeración MathNaryOperatorTypes especifica el tipo de operador—como sumatoria o unión—excluyendo integrales. En el método Integral, se proporciona una operación especializada para integrales mediante la enumeración MathIntegralTypes.
Ejemplo:
base_arg = math.MathematicalText("x").join(math.MathematicalText("dx").to_box())
integral = base_arg.integral(math.MathIntegralTypes.SIMPLE, "0", "1")
Método ToMathArray
to_math_array coloca elementos en una matriz vertical. Si esta operación se llama sobre una instancia de MathBlock, todos sus elementos hijos se colocarán en la matriz resultante.
Ejemplo:
array_function = math.MathematicalText("x").join("y").to_math_array()
Operaciones de formato: Accent, Overbar, Underbar, Group, ToBorderBox, ToBox
- El método accent establece una marca de acento (un carácter sobre el elemento).
- Los métodos overbar y underbar añaden una barra superior o inferior.
- El método group agrupa usando un carácter de agrupación, como una llave curva inferior u otro.
- El método to_border_box coloca el elemento en un borde‑caja.
- El método to_box coloca el elemento en una caja lógica no visual (agrupación lógica).
Ejemplos:
accent = math.MathematicalText("x").accent(chr(0x0303))
bar = math.MathematicalText("x").overbar()
group_chr = math.MathematicalText("x").join("y").join("z").group(chr(0x23E1),
math.MathTopBotPositions.BOTTOM,
math.MathTopBotPositions.TOP)
border_box = math.MathematicalText("x+y+z").to_border_box()
boxed_operator = math.MathematicalText(":=").to_box()
Preguntas frecuentes
¿Cómo puedo añadir una ecuación matemática a una diapositiva de PowerPoint?
Para añadir una ecuación matemática, debes crear un objeto de forma matemática, que incluye automáticamente una porción matemática. Luego, obtienes el MathParagraph desde la MathPortion y añades objetos MathBlock a él.
¿Es posible crear expresiones matemáticas complejas y anidadas?
Sí, Aspose.Slides permite crear expresiones matemáticas complejas anidando MathBlocks. Cada elemento matemático permite aplicar operaciones (Join, Divide, Enclose, etc.) para combinar elementos en estructuras más complejas.
¿Cómo puedo actualizar o modificar una ecuación matemática existente?
Para actualizar una ecuación, debes acceder al MathBlock existente a través del MathParagraph. Luego, usando métodos como Join, Divide, Enclose y otros, puedes modificar los elementos individuales de la ecuación. Después de editar, guarda la presentación para aplicar los cambios.