Добавить математические уравнения в презентации PowerPoint на Python

Обзор

В PowerPoint вы можете написать математическое уравнение или формулу и отобразить её в своей презентации. Доступны различные математические символы, которые можно добавлять в текст или уравнения. Конструктор математических уравнений используется для создания сложных формул, таких как:

  • Математическая дробь
  • Математический радикал
  • Математическая функция
  • Пределы и логарифмические функции
  • N-арные операции
  • Матрица
  • Большие операторы
  • Функции sin, cos

Для добавления математического уравнения в PowerPoint используется меню Insert -> Equation:

todo:image_alt_text

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

todo:image_alt_text

PowerPoint поддерживает широкий набор математических символов для создания уравнений. Однако генерация сложных математических уравнений в PowerPoint часто не дает отполированного, профессионального результата. Поэтому пользователи, часто создающие математические презентации, часто обращаются к сторонним решениям для получения более красивых формул.

Используя Aspose.Slides API, вы можете работать с математическими уравнениями в презентациях PowerPoint программно на Python. Создавайте новые математические выражения или редактируйте уже созданные. Частичная поддержка доступна для экспорта математических структур в виде изображений.

Как создать математическое уравнение

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

Посмотрим, как можно создать следующее математическое уравнение с помощью Aspose.Slides API:

todo:image_alt_text

Чтобы добавить математическое выражение на слайд, сначала добавьте форму, которая будет содержать математический текст:

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 представляет долю, содержащую математический текст. Чтобы получить доступ к содержимому математической доли, обратитесь к переменной 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 задаёт объект дроби, состоящий из числителя и знаменателя, разделённых чертой дроби. Черта может быть горизонтальной или диагональной, в зависимости от свойств дроби. Объект дроби также используется для представления функции «стек», при которой один элемент размещается над другим без черты дроби.

Пример:

todo:image_alt_text

Класс MathRadical

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

Пример:

todo:image_alt_text

Класс MathFunction

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

Пример:

todo:image_alt_text

Класс MathNaryOperator

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

Этот класс не включает простые операторы, такие как сложение, вычитание и т.п. Они представлены единственным текстовым элементом MathematicalText.

Пример:

todo:image_alt_text

Класс MathLimit

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

todo:image_alt_text

создаётся комбинацией элементов MathFunction и MathLimit:

function_name = math.MathLimit(math.MathematicalText("lim"), math.MathematicalText("𝑥→∞"))
math_function = math.MathFunction(function_name, math.MathematicalText("𝑥"))

Классы MathSubscriptElement, MathSuperscriptElement, MathRightSubSuperscriptElement, MathLeftSubSuperscriptElement

Эти классы задают нижний или верхний индекс. Вы можете одновременно установить нижний и верхний индексы слева или справа от аргумента, но одиночный нижний или верхний индекс поддерживается только справа. Класс MathSubscriptElement также может использоваться для задания математической степени числа.

Пример:

todo:image_alt_text

Класс MathMatrix

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

Пример:

todo:image_alt_text

Класс MathArray

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

Пример:

todo:image_alt_text

Форматирование математических элементов

  • Класс MathBorderBox — рисует прямоугольную или альтернативную рамку вокруг IMathElement.

Пример:

todo:image_alt_text

  • Класс MathBox — задаёт логическое обрамление (упаковку) математического элемента. Объект в рамке может выступать как эмулятор оператора — с точкой выравнивания или без неё — выступать в роли разрыва строки или группироваться, чтобы предотвратить разрывы внутри. Например, оператор «==» следует поместить в рамку, чтобы избежать разрывов.

  • Класс MathDelimiter — задаёт объект ограничителя, который состоит из открывающих и закрывающих символов (например, скобок, фигурных скобок, квадратных скобок или вертикальных черт) и одного или более математических элементов внутри, разделённых указанным символом. Примеры: (𝑥2); [𝑥2|𝑦2].

Пример:

todo:image_alt_text

  • Класс MathAccent — задаёт функцию акцента, состоящую из основания и комбинирующего диакритического знака.

Пример: 𝑎́.

  • Класс MathBar — задаёт функцию черты, состоящую из базового аргумента и надчерты или подчерты.

Пример:

todo:image_alt_text

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

Пример:

todo:image_alt_text

Математические операции

Каждый математический элемент и каждое математическое выражение (через MathBlock) реализуют интерфейс IMathElement. Это позволяет выполнять операции над существующей структурой и формировать более сложные математические выражения. Все операции имеют два набора параметров: либо [IMathElement], либо строковые аргументы. Экземпляры класса MathematicalText неявно создаются из указанных строк, когда используются строковые аргументы. Ниже перечислены доступные в Aspose.Slides математические операции.

Метод Join

Эти методы соединяют математический элемент и образуют математический блок. Например:

element1 = math.MathematicalText("x")
element2 = math.MathematicalText("y")
block = element1.join(element2)

Метод Divide

Эти методы создают дробь указанного типа с заданным числителем и знаменателем. Например:

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

Эти методы берут указанную функцию, используя текущий экземпляр как аргумент. Вы можете:

  • задать строку как имя функции, например “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

Эти методы задают нижний и верхний индексы. Вы можете установить оба индекса одновременно слева или справа от аргумента; однако одиночный нижний или верхний индекс поддерживается только справа. Superscript также может использоваться для задания степени числа.

Пример:

script = math.MathematicalText("y").set_sub_superscript_on_the_left("2x", "3z")

Метод Radical

Эти методы задают математический корень указанной степени на основе переданного аргумента.

Пример:

radical = math.MathematicalText("x").radical("3")

Методы SetUpperLimit и SetLowerLimit

Эти методы задают верхний или нижний предел, где «верхний» и «нижний» указывают положение аргумента относительно основания.

Рассмотрим выражение:

todo:image_alt_text

Такие выражения можно создать комбинацией классов MathFunction и MathLimit, а также операций интерфейса IMathElement, как показано ниже:

math_expression = math.MathematicalText("lim").set_lower_limit("x→∞").function("x")

Методы Nary и Integral

Оба метода — 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?

Чтобы добавить математическое уравнение, нужно создать объект add_math_shape — математическую форму, которая автоматически содержит математическую долю. Затем получите MathParagraph из MathPortion и добавьте в него объекты MathBlock.

Можно ли создавать сложные вложенные математические выражения?

Да, Aspose.Slides позволяет создавать сложные математические выражения посредством вложения MathBlock. Каждый математический элемент позволяет применять операции (Join, Divide, Enclose и т.д.) для комбинирования элементов в более сложные структуры.

Как обновить или изменить уже существующее математическое уравнение?

Чтобы обновить уравнение, необходимо получить доступ к существующему MathBlock через MathParagraph. Затем, используя такие методы, как Join, Divide, Enclose и другие, можно изменить отдельные элементы уравнения. После редактирования сохраните презентацию, чтобы применить изменения.