Añadir ecuaciones matemáticas a presentaciones 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 pueden añadirse al texto o a las ecuaciones. El constructor de ecuaciones matemáticas se utiliza 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 podrá 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. Por ello, los usuarios que crean presentaciones matemáticas con frecuencia suelen recurrir a soluciones de terceros para obtener fórmulas matemáticas con mejor apariencia.
Usando la Aspose.Slides API, puedes trabajar con ecuaciones matemáticas en presentaciones de PowerPoint de forma programática 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 utilizan 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. La clase MathPortion se usa para contener texto matemático (distinto del regular Portion), mientras que MathParagraph permite manipular un conjunto de objetos MathBlock. Estas clases son esenciales para trabajar con ecuaciones matemáticas de PowerPoint a través de la Aspose.Slides API.
Veamos cómo podemos crear la siguiente ecuación matemática utilizando la Aspose.Slides API:

Para añadir una expresión matemática a la diapositiva, primero añade una forma que contenga 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, ésta 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 una combinación 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 clase IMathElement están implementadas en todo tipo de elemento, incluida la clase MathBlock.
A continuación se muestra el ejemplo de código completo:
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 están compuestas por 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 agruparse dentro de otro, formando una estructura tipo árbol. El tipo de elemento más simple es aquel que no contiene ningún otro elemento de texto matemático.
Cada tipo de elemento matemático implementa la clase IMathElement, lo que permite utilizar 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 un numerador y un denominador separados por una barra de fracción. La barra puede ser horizontal o diagonal, según las propiedades de la fracción. El objeto fracción también se usa para representar la función de apilamiento, 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 suma o una integral. Consta de un operador, una base (u operando) y límites superiores e inferiores opcionales. Los operadores n-arios incluyen Suma, Unión, Intersección e Integral.
Esta clase no incluye operadores simples como suma, resta, etc.; esos 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, formado por texto en la línea base y texto reducido justo encima o debajo. 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 subíndice o un superíndice. Puedes establecer simultáneamente subíndice y superíndice en el lado izquierdo o derecho de un argumento, pero un solo subíndice o superíndice solo se admite en el lado derecho. El 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 ordenados en una o más filas y columnas. Es importante notar que las matrices no tienen delimitadores incorporados. Para rodear la matriz con 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 encajado lógico (empaquetado) de un elemento matemático. Un objeto encajado puede servir como emulador de operador—con o sin punto de alineación—funcionar como interrupción de línea o agruparse para evitar saltos de línea dentro. Por ejemplo, el operador “==” debe encajarse para evitar saltos de línea.
-
Clase MathDelimiter: Especifica el objeto delimitador, que consiste en caracteres de apertura y cierre (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 de barra, compuesta por un argumento base y una barra superior o inferior.
Ejemplo:

- Clase MathGroupingCharacter: Especifica un símbolo de agrupación colocado arriba o abajo de una expresión, normalmente para resaltar relaciones entre elementos.
Ejemplo:

Operaciones matemáticas
Cada elemento y cada expresión matemática (mediante MathBlock) implementa la clase IMathElement. Esto permite realizar operaciones sobre la estructura existente y crear expresiones más complejas. Todas las operaciones disponen de 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 las cadenas especificadas cuando se usan argumentos de tipo cadena. A continuación se enumeran las operaciones disponibles en Aspose.Slides.
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 los 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 toman una función de 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 los enumerados MathFunctionsOfOneArgument o MathFunctionsOfTwoArguments, por ejemplo
MathFunctionsOfOneArgument.ARC_SIN; - pasar una 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 único subíndice o superíndice solo se admite en el 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 basándose en 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 establecen un límite superior o inferior, donde “superior” e “inferior” indican la posición del argumento respecto a la base.
Consideremos una expresión:

Tales expresiones pueden crearse combinando las clases MathFunction y MathLimit, junto con las operaciones de la clase IMathElement, como sigue:
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)
Los métodos nary e integral crean y devuelven el operador n-ario representado por el tipo MathNaryOperator. En el método Nary, el enumerado MathNaryOperatorTypes indica el tipo de operador—como suma o unión—excluyendo integrales. En el método Integral, se proporciona una operación especializada para integrales mediante el enumerado 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 colocan una barra en la parte superior o inferior.
- El método group agrupa usando un carácter de agrupación, como una llave inferior u otro.
- El método to_border_box coloca en un borde‑caja.
- El método to_box coloca en una caja 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()
FAQ
¿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 shape de tipo math, que contiene automáticamente una porción matemática. Luego, recuperas el MathParagraph desde el 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, entre otros, puedes modificar los elementos individuales de la ecuación. Después de editar, guarda la presentación para aplicar los cambios.