Добавить математические уравнения в презентации PowerPoint на Python
Обзор
В PowerPoint вы можете написать математическое уравнение или формулу и отобразить её в презентации. Доступно множество математических символов, которые можно добавить к тексту или уравнениям. Конструктор математических уравнений используется для создания сложных формул, таких как:
- Математическая дробь
- Математический радикал
- Математическая функция
- Пределы и логарифмические функции
- N-арные операции
- Матрица
- Большие операторы
- Функции sin, cos
Для добавления математического уравнения в PowerPoint используется меню Insert -> Equation:

Это создаст математический текст в XML, который будет отображён в PowerPoint следующим образом:

PowerPoint поддерживает широкий набор математических символов для создания уравнений. Однако генерация сложных уравнений часто не даёт отшлифованный, профессиональный результат. Поэтому пользователи, часто создающие математические презентации, обращаются к сторонним решениям для получения более эстетичных формул.
Используя Aspose.Slides API, вы можете работать с математическими уравнениями в презентациях PowerPoint программно на Python. Создавать новые математические выражения или редактировать уже созданные. Частичная поддержка экспорта математических структур в виде изображений.
Как создать математическое уравнение
Математические элементы используются для построения любой математической конструкции, независимо от уровня вложенности. Линейная коллекция этих элементов образует математический блок, представленный классом MathBlock. Класс MathBlock представляет отдельное математическое выражение, формулу или уравнение. Класс MathPortion используется для хранения математического текста (отличного от обычного класса Portion), а класс MathParagraph позволяет работать с набором объектов MathBlock. Эти классы необходимы для работы с математическими уравнениями PowerPoint через Aspose.Slides API.
Посмотрим, как создать следующее математическое уравнение с помощью Aspose.Slides API:

Чтобы добавить математическое выражение на слайд, сначала добавьте фигуру, в которой будет размещён математический текст:
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)
После создания фигуры она уже содержит один абзац с математической частью по умолчанию. Класс MathPortion представляет часть, содержащую математический текст. Чтобы получить доступ к математическому содержимому внутри MathPortion, обратитесь к переменной MathParagraph:
math_paragraph = math_shape.text_frame.paragraphs[0].portions[0].math_paragraph
Класс MathParagraph позволяет читать, добавлять, редактировать и удалять математические блоки (MathBlock), которые состоят из комбинации математических элементов. Например, создать дробь и поместить её в презентацию:
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")))
Операции класса IMathElement реализованы во всех типах элементов, включая класс MathBlock.
Ниже приведён полный пример исходного кода:
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)
Типы математических элементов
Математические выражения состоят из последовательностей математических элементов. Математический блок представляет такую последовательность, а аргументы этих элементов образуют вложенную древовидную структуру.
Существует множество типов математических элементов, которые можно использовать для построения математического блока. Каждый из этих элементов может быть вложен в другой, образуя древовидную структуру. Самый простой тип элемента – тот, который не содержит других математических текстовых элементов.
Каждый тип математического элемента реализует класс IMathElement, позволяя использовать общий набор математических операций для разных типов элементов.
Класс MathematicalText
Класс MathematicalText представляет математический текст — базовый элемент всех математических конструкций. Математический текст может представлять операнды и операции, переменные или любой другой линейный текст.
Пример: 𝑎=𝑏+𝑐
Класс MathFraction
Класс MathFraction задаёт объект дроби, состоящий из числителя и знаменателя, разделённых чертой дроби. Черта может быть горизонтальной или диагональной в зависимости от свойств дроби. Объект дроби также используется для представления функции стека, где один элемент помещается над другим без черты дроби.
Пример:

Класс MathRadical
Класс MathRadical задаёт радикал (математический корень), состоящий из основания и необязательной степени.
Пример:

Класс MathFunction
Класс MathFunction задаёт функцию от аргумента. Он содержит свойства, такие как name, представляющее имя функции, и base, представляющее аргумент функции.
Пример:

Класс MathNaryOperator
Класс MathNaryOperator задаёт N‑арный математический объект, например суммирование или интеграл. Он состоит из оператора, основания (или операнда) и необязательных верхних и нижних пределов. Примерами N‑арных операторов являются суммирование, объединение, пересечение и интеграл.
Этот класс не включает простые операторы, такие как сложение или вычитание; они представляются отдельным текстовым элементом MathematicalText.
Пример:

Класс MathLimit
Класс MathLimit создаёт верхний или нижний предел. Он задаёт объект предела, состоящий из текста на базовой линии и уменьшенного текста, размещённого непосредственно выше или ниже её. Элемент не включает слово «lim», но позволяет разместить текст сверху или снизу выражения. Таким образом выражение

создаётся комбинацией элементов MathFunction и MathLimit:
function_name = math.MathLimit(math.MathematicalText("lim"), math.MathematicalText("𝑥→∞"))
math_function = math.MathFunction(function_name, math.MathematicalText("𝑥"))
Классы MathSubscriptElement, MathSuperscriptElement, MathRightSubSuperscriptElement, MathLeftSubSuperscriptElement
- MathSubscriptElement
- MathSuperscriptElement
- MathRightSubSuperscriptElement
- MathLeftSubSuperscriptElement
Эти классы задают нижний или верхний индекс. Можно одновременно задавать и нижний, и верхний индекс слева или справа от аргумента, однако одиночный индекс поддерживается только справа. Класс MathSubscriptElement также может использоваться для указания степени числа.
Пример:

Класс MathMatrix
Класс MathMatrix задаёт объект матрицы, состоящий из дочерних элементов, расположенных в одной или нескольких строках и столбцах. Важно отметить, что у матриц нет встроенных разделителей. Чтобы заключить матрицу в скобки, используйте объект разделителя MathDelimiter. Для создания пробелов в матрице можно передавать пустые аргументы.
Пример:

Класс MathArray
Класс MathArray задаёт вертикальный массив уравнений или любых математических объектов.
Пример:

Форматирование математических элементов
- Класс MathBorderBox — рисует прямоугольную (или альтернативную) рамку вокруг IMathElement.
Пример:

-
Класс MathBox — задаёт логическую упаковку (boxing) математического элемента. Упакованный объект может выступать в роли имитатора оператора — с точкой выравнивания или без неё, функционировать как разрыв строки или быть сгруппированным, чтобы предотвратить переносы внутри. Например, оператор «==» следует упаковать, чтобы избежать разрывов строки.
-
Класс MathDelimiter — задаёт объект-разделитель, состоящий из открывающего и закрывающего символов (скобки, фигурные скобки, квадратные скобки, вертикальная черта) и одного или нескольких математических элементов внутри, разделённых указанным символом. Примеры: (𝑥₂); [𝑥₂|𝑦₂].
Пример:

- Класс MathAccent — задаёт акцент, состоящий из основания и комбинирующего диакритического знака.
Пример: 𝑎́.
- Класс MathBar — задаёт черту над или под элементом.
Пример:

- Класс MathGroupingCharacter — задаёт символ группировки, размещаемый над или под выражением, обычно для выделения взаимосвязей элементов.
Пример:

Математические операции
Каждый математический элемент и каждое математическое выражение (через MathBlock) реализует класс IMathElement. Это позволяет выполнять операции над существующей структурой и формировать более сложные математические выражения. Все операции имеют два набора параметров: либо [IMathElement], либо строковые аргументы. При использовании строковых аргументов экземпляры класса MathematicalText создаются неявно из указанных строк. Ниже перечислены доступные в Aspose.Slides математические операции.
Метод Join
Эти методы соединяют математический элемент и формируют математический блок. Пример:
element1 = math.MathematicalText("x")
element2 = math.MathematicalText("y")
block = element1.join(element2)
Метод Divide
- divide(String)
- divide(IMathElement)
- divide(String, MathFractionTypes)
- divide(IMathElement, MathFractionTypes)
Эти методы создают дробь указанного типа с числителем и заданным знаменателем. Пример:
numerator = math.MathematicalText("x")
fraction = numerator.divide("y", math.MathFractionTypes.LINEAR)
Метод Enclose
Эти методы помещают элемент в заданные символы, например скобки или другие ограничительные символы. Пример:
delimiter = math.MathematicalText("x").enclose('[', ']')
delimiter2 = math.MathematicalText("elem1").join("elem2").enclose()
Метод Function
Эти методы принимают функцию от аргумента, используя текущий объект как имя функции. Пример:
function = math.MathematicalText("sin").function("x")
Метод 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)
Эти методы берут указанную функцию, используя текущий экземпляр как аргумент. Вы можете:
- задать строку как имя функции, например «cos»;
- выбрать одно из предопределённых значений перечислений MathFunctionsOfOneArgument или MathFunctionsOfTwoArguments, например
MathFunctionsOfOneArgument.ARC_SIN; - передать экземпляр IMathElement.
Пример:
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")
Методы 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)
Эти методы задают нижний и верхний индексы. Можно задавать оба одновременно слева или справа от аргумента; однако одиночный индекс поддерживается только справа. Superscript также может использоваться для указания степени числа.
Пример:
script = math.MathematicalText("y").set_sub_superscript_on_the_left("2x", "3z")
Метод Radical
Эти методы задают математический корень заданной степени на основе указанного аргумента.
Пример:
radical = math.MathematicalText("x").radical("3")
Методы SetUpperLimit и SetLowerLimit
- set_upper_limit(String)
- set_upper_limit(IMathElement)
- set_lower_limit(String)
- set_lower_limit(IMathElement)
Эти методы задают верхний или нижний предел, где «upper» и «lower» указывают расположение аргумента относительно основания.
Рассмотрим выражение:

Подобные выражения можно создать комбинацией классов MathFunction и MathLimit, используя операции класса IMathElement:
math_expression = math.MathematicalText("lim").set_lower_limit("x→∞").function("x")
Методы Nary и 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)
Оба метода, nary и integral, создают и возвращают N‑арный оператор типа MathNaryOperator. В методе nary перечисление MathNaryOperatorTypes задаёт тип оператора — например, суммирование или объединение, без интегралов. В методе integral предоставляется специализированная операция для интегралов, использующая перечисление MathIntegralTypes.
Пример:
base_arg = math.MathematicalText("x").join(math.MathematicalText("dx").to_box())
integral = base_arg.integral(math.MathIntegralTypes.SIMPLE, "0", "1")
Метод ToMathArray
to_math_array помещает элементы в вертикальный массив. Если вызвать эту операцию у экземпляра MathBlock, все его дочерние элементы будут размещены в возвращаемом массиве.
Пример:
array_function = math.MathematicalText("x").join("y").to_math_array()
Операции форматирования: Accent, Overbar, Underbar, Group, ToBorderBox, ToBox
- Метод accent — ставит акцент (символ над элементом).
- Методы overbar и underbar — ставят линию сверху или снизу.
- Метод group — помещает в группу, используя символ группировки, например нижнюю фигурную скобку или иной.
- Метод to_border_box — помещает в рамочный блок.
- Метод to_box — помещает в невизуальный блок (логическая группировка).
Примеры:
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
Как добавить математическое уравнение на слайд PowerPoint?
Для добавления уравнения необходимо создать объект математической фигуры, который автоматически содержит математическую часть. Затем получите MathParagraph из MathPortion и добавьте в него объекты MathBlock.
Можно ли создавать сложные вложенные математические выражения?
Да, Aspose.Slides позволяет создавать сложные математические выражения, вкладывая MathBlock друг в друга. Каждый математический элемент поддерживает операции (Join, Divide, Enclose и др.) для комбинирования в более сложные структуры.
Как обновить или изменить существующее математическое уравнение?
Чтобы обновить уравнение, необходимо получить доступ к существующему MathBlock через MathParagraph. Затем, используя методы Join, Divide, Enclose и другие, можно изменить отдельные элементы уравнения. После редактирования сохраните презентацию, чтобы применить изменения.