Математические уравнения PowerPoint
Обзор
В PowerPoint возможно написать математическое уравнение или формулу и отобразить их в презентации. Для этого в PowerPoint представлены различные математические символы, которые могут быть добавлены в текст или уравнение. Для этого используется конструктор математических уравнений в PowerPoint, который помогает создавать сложные формулы, такие как:
- Математическая дробь
- Математический радикал
- Математическая функция
- Пределы и логарифмические функции
- N-арные операции
- Матрица
- Большие операторы
- Функции синуса и косинуса
Чтобы добавить математическое уравнение в PowerPoint, используется меню Вставка -> Уравнение:
Это создаст математический текст в XML, который может быть отображён в PowerPoint следующим образом:
PowerPoint поддерживает множество математических символов для создания математических уравнений. Однако создание сложных математических уравнений в PowerPoint часто не приводит к хорошему и профессиональному результату. Пользователи, которым часто нужно создавать математические презентации, обращаются к использованию сторонних решений для создания привлекательных математических формул.
Используя Aspose.Slide API, вы можете программно работать с математическими уравнениями в презентациях PowerPoint на Python. Создавать новые математические выражения или редактировать ранее созданные. Экспорт математических структур в изображения также частично поддерживается.
Как создать математическое уравнение
Математические элементы используются для построения любых математических конструкций с любым уровнем вложенности. Линейная коллекция математических элементов образует математический блок, представляемый классом MathBlock. Класс MathBlock по сути является отдельным математическим выражением, формулой или уравнением. MathPortion - это математическая порция, используемая для хранения математического текста (не путать с Portion). MathParagraph позволяет манипулировать набором математических блоков. Указанные выше классы являются ключевыми для работы с математическими уравнениями PowerPoint с помощью Aspose.Slides API.
Давайте посмотрим, как мы можем создать следующее математическое уравнение через Aspose.Slides API:
Чтобы добавить математическое выражение на слайд, сначала добавьте фигуру, которая будет содержать математический текст:
import aspose.slides as slides
import aspose.slides.mathtext as math
with slides.Presentation() as pres:
mathShape = pres.slides[0].shapes.add_math_shape(0, 0, 720, 150)
После создания фигура будет уже содержать один параграф с математической порцией по умолчанию. Класс MathPortion - это порция, которая содержит математический текст внутри. Чтобы получить доступ к математическому содержимому внутри MathPortion, обратитесь к переменной MathParagraph:
mathParagraph = mathShape.text_frame.paragraphs[0].portions[0].math_paragraph
Класс MathParagraph позволяет читать, добавлять, редактировать и удалять математические блоки (MathBlock), состоящие из комбинации математических элементов. Например, создайте дробь и разместите её в презентации:
fraction = math.MathematicalText("x").divide("y")
mathParagraph.add(math.MathBlock(fraction))
Каждый математический элемент представлен некоторым классом, который реализует интерфейс IMathElement. Этот интерфейс предоставляет множество методов для лёгкого создания математических выражений. Вы можете создать довольно сложное математическое выражение одной строкой кода. Например, теорема Пифагора будет выглядеть так:
mathBlock = (
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 pres:
mathShape = pres.slides[0].shapes.add_math_shape(0, 0, 720, 150)
mathParagraph = mathShape.text_frame.paragraphs[0].portions[0].math_paragraph
fraction = math.MathematicalText("x").divide("y")
mathParagraph.add(math.MathBlock(fraction))
mathBlock = (
math.MathematicalText("c").set_superscript("2").
join("=").
join(math.MathematicalText("a").set_superscript("2")).
join("+").
join(math.MathematicalText("b").set_superscript("2")))
mathParagraph.add(mathBlock)
pres.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 элементов следующим образом:
funcName = math.MathLimit(math.MathematicalText("lim"), math.MathematicalText("𝑥→∞"))
mathFunc = math.MathFunction(funcName, math.MathematicalText("𝑥"))
MathSubscriptElement, MathSuperscriptElement, MathRightSubSuperscriptElement, MathLeftSubSuperscriptElement классы
- MathSubscriptElement
- MathSuperscriptElement
- MathRightSubSuperscriptElement
- MathLeftSubSuperscriptElement
Следующие классы определяют нижний индекс или верхний индекс. Вы можете установить подстрочный и надстрочный индексы одновременно слева или справа от аргумента, но одиночный подстрочный или надстрочный индекс поддерживается только с правой стороны. Класс MathSubscriptElement также может использоваться для установки математической степени числа.
Пример:
Класс MathMatrix
Класс MathMatrix определяет объект матрицы, состоящий из дочерних элементов, расположенных в одном или нескольких рядах и столбцах. Важно отметить, что матрицы не имеют встроенных разделителей. Чтобы разместить матрицу в скобках, необходимо использовать объект-разделитель - IMathDelimiter. Пустые аргументы могут быть использованы для создания пробелов в матрицах.
Пример:
Класс MathArray
Класс MathArray определяет вертикальный массив уравнений или любых математических объектов.
Пример:
Форматирование математических элементов
-
Класс MathBorderBox: рисует прямоугольную или другую границу вокруг IMathElement.
Пример:
-
Класс MathBox определяет логическую упаковку (упаковку) математического элемента. Например, упакованный объект может служить эмулятором оператора с или без точки выравнивания, служить точкой разрыва строки или быть сгруппирован таким образом, чтобы не допускать разрывов строк внутри. Например, оператор “==” должен быть упакован, чтобы предотвратить разрывы строк.
-
Класс MathDelimiter определяет объект-разделитель, состоящий из открывающих и закрывающих символов (таких как скобки, фигурные скобки, квадратные скобки и вертикальные черты) и одного или нескольких математических элементов внутри, разделённых заданным символом. Примеры: (𝑥2); [𝑥2|𝑦2].
Пример:
-
Класс 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
Включает элемент в указанные символы, такие как скобки или другой символ как обрамление.
# Включает математический элемент в скобки
MathDelimiter enclose()
# Включает этот элемент в указанные символы, такие как скобки или другие символы как обрамление
MathDelimiter enclose(char beginningCharacter, char endingCharacter)
Например:
delimiter = math.MathematicalText("x").enclose('[', ']')
delimiter2 = math.MathematicalText("elem1").join("elem2").enclose()
Метод Function
Берёт функцию аргумента, используя текущий объект в качестве имени функции.
Например:
func = math.MathematicalText("sin").function("x")
Метод AsArgumentOfFunction
- AsArgumentOfFunction(String)
- AsArgumentOfFunction(IMathElement)
- AsArgumentOfFunction(MathFunctionsOfOneArgument)
- AsArgumentOfFunction(MathFunctionsOfTwoArguments, IMathElement)
- AsArgumentOfFunction(MathFunctionsOfTwoArguments, String)
Берёт заданную функцию, используя текущий экземпляр в качестве аргумента. Вы можете:
- указать строку в качестве имени функции, например “cos”.
- выбрать одно из предопределенных значений перечислений MathFunctionsOfOneArgument или MathFunctionsOfTwoArguments, например MathFunctionsOfOneArgument.ArcSin.
- выбрать экземпляр IMathElement.
Например:
funcName = math.MathLimit(math.MathematicalText("lim"), math.MathematicalText("𝑛→∞"))
func1 = math.MathematicalText("2x").as_argument_of_function(funcName)
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
- SetSubscript(String)
- SetSubscript(IMathElement)
- SetSuperscript(String)
- SetSuperscript(IMathElement)
- SetSubSuperscriptOnTheRight(String, String)
- SetSubSuperscriptOnTheRight(IMathElement, IMathElement)
- SetSubSuperscriptOnTheLeft(String, String)
- SetSubSuperscriptOnTheLeft(IMathElement, IMathElement)
Устанавливает подстрочный и надстрочный индекс. Вы можете установить подстрочный и надстрочный индекс одновременно слева или справа от аргумента, но одиночный подстрочный или надстрочный индекс поддерживается только с правой стороны. Указатель Superscript также может использоваться для установки математической степени числа.
Пример:
script = math.MathematicalText("y").set_sub_superscript_on_the_left("2x", "3z")
Метод Radical
Определяет математический корень заданной степени из указанного аргумента.
Пример:
radical = math.MathematicalText("x").radical("3")
Методы SetUpperLimit и SetLowerLimit
Устанавливает верхний или нижний предел. Здесь верхний и нижний пределы просто указывают на расположение аргумента относительно основания.
Рассмотрим выражение:
Такие выражения могут быть созданы с помощью комбинации классов MathFunction и MathLimit, а также операций IMathElement следующим образом:
mathExpression = 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-арный оператор, представленный типом INaryOperator. В методе Nary перечисление MathNaryOperatorTypes указывает тип оператора: сумма, объединение и т.д., не включая интегралы. В методе Integral есть специализированная операция Integral с перечислением типов интегралов MathIntegralTypes.
Пример:
baseArg = math.MathematicalText("x").join(math.MathematicalText("dx").to_box())
integral = baseArg.integral(math.MathIntegralTypes.SIMPLE, "0", "1")
Метод ToMathArray
ToMathArray помещает элементы в вертикальный массив. Если эта операция вызывается для экземпляра MathBlock, все дочерние элементы будут помещены в возвращаемый массив.
Пример:
arrayFunction = math.MathematicalText("x").join("y").to_math_array()
Операции форматирования: Accent, Overbar, Underbar, Group, ToBorderBox, ToBox
- Метод Accent устанавливает акцентный знак (символ на верхней части элемента).
- Методы Overbar и Underbar устанавливают полосу сверху или снизу.
- Метод Group помещает в группу с использованием символа группировки, такого как нижняя фигурная скобка или другой.
- Метод ToBorderBox помещает в рамку.
- Метод ToBox помещает в невизуальную коробку (логическую группировку).
Примеры:
accent = math.MathematicalText("x").accent(chr(0x0303))
bar = math.MathematicalText("x").overbar()
groupChr = math.MathematicalText("x").join("y").join("z").group(chr(0x23E1),
math.MathTopBotPositions.BOTTOM,
math.MathTopBotPositions.TOP)
borderBox = math.MathematicalText("x+y+z").to_border_box()
boxedOperator = math.MathematicalText(":=").to_box()