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

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

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

Чтобы добавить математическое выражение на слайд, сначала добавьте форму, в которой будет находиться математический текст:
$pres = new Presentation();
try {
$mathShape = $pres->getSlides()->get_Item(0)->getShapes()->addMathShape(0, 0, 720, 150);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
После создания форма уже будет содержать один абзац с математической частью по умолчанию. Класс MathPortion представляет собой часть, содержащую внутри себя математический текст. Чтобы получить доступ к содержимому внутри MathPortion, обратитесь к переменной MathParagraph:
$mathParagraph = $mathShape->getTextFrame()->getParagraphs()->get_Item(0)->getPortions()->get_Item(0)->getMathParagraph();
Типы математических элементов
Математические выражения формируются из последовательностей математических элементов. Последовательность элементов представлена математическим блоком, а аргументы элементов образуют древовидную вложенность.
Существует множество типов математических элементов, которые можно использовать для построения математического блока. Каждый из этих элементов может быть включён (агрегирован) в другой элемент. То есть элементы являются контейнерами для других, образуя древовидную структуру. Наиболее простым типом элемента является тот, который не содержит других элементов математического текста.
Каждый тип математического элемента реализует класс MathElement, позволяющий использовать общий набор математических операций над различными типами элементов.
Класс MathematicalText
Класс MathematicalText представляет собой математический текст — базовый элемент всех математических конструкций. В математическом тексте могут находиться операнды и операторы, переменные и любой другой линейный текст.
Пример: 𝑎=𝑏+𝑐
Класс MathFraction
Класс MathFraction определяет объект дроби, состоящий из числителя и знаменателя, разделённых чертой дроби. Черта может быть горизонтальной или диагональной в зависимости от свойств дроби. Объект дроби также используется для представления функции стека, которая размещает один элемент над другим без черты дроби.
Пример:

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

Класс MathFunction
Класс MathFunction определяет функцию аргумента. Содержит свойства: getName — имя функции и getBase — аргумент функции.
Пример:

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

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

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

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

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

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

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

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

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

Математические операции
Каждый математический элемент и математическое выражение (через MathBlock) наследует класс MathElement. Это позволяет выполнять операции над существующей структурой и формировать более сложные выражения. Все операции принимают два набора параметров: либо MathElement, либо строку. Экземпляры класса MathematicalText неявно создаются из переданных строковых аргументов. Доступные в Aspose.Slides математические операции перечислены ниже.
Метод Join
join(String)join(MathElement)
Объединяет математический элемент, формируя блок MathBlock. Пример:
$element1 = new MathematicalText("x");
$element2 = new MathematicalText("y");
$block = $element1->join($element2);
Метод Divide
divide(String)divide(MathElement)divide(String, MathFractionTypes)divide(MathElement, MathFractionTypes)
Создаёт дробь указанного типа с текущим числителем и заданным знаменателем. Пример:
$numerator = new MathematicalText("x");
$fraction = $numerator->divide("y", MathFractionTypes->Linear);
Метод Enclose
enclose()enclose(Char, Char)
Оборачивает элемент в указанные символы, такие как скобки или иной символ‑рамку.
Пример:
$delimiter = new MathematicalText("x")->enclose('[', ']');
$delimiter2 = new MathematicalText("elem1")->join("elem2")->enclose();
Метод Function
function(String)function(MathElement)
Создаёт функцию от аргумента, используя текущий объект как имя функции.
Пример:
$func = new MathematicalText("sin")->function("x");
Метод AsArgumentOfFunction
asArgumentOfFunction(String)asArgumentOfFunction(MathElement)asArgumentOfFunction(MathFunctionsOfOneArgument)asArgumentOfFunction(MathFunctionsOfTwoArguments, MathElement)asArgumentOfFunction(MathFunctionsOfTwoArguments, String)
Берёт указанный объект функции, используя текущий экземпляр как аргумент. Можно:
- указать строку‑имя функции, например “cos”;
- выбрать одно из предопределённых значений перечислений MathFunctionsOfOneArgument или MathFunctionsOfTwoArguments, например MathFunctionsOfOneArgument::ArcSin;
- передать экземпляр
MathElement.
Пример:
$funcName = new MathLimit(new MathematicalText("lim"), new MathematicalText("𝑛→∞"));
$func1 = new MathematicalText("2x")->asArgumentOfFunction($funcName);
$func2 = new MathematicalText("x")->asArgumentOfFunction("sin");
$func3 = new MathematicalText("x")->asArgumentOfFunction(MathFunctionsOfOneArgument->Sin);
$func4 = new MathematicalText("x")->asArgumentOfFunction(MathFunctionsOfTwoArguments->Log, "3");
Методы SetSubscript, SetSuperscript, SetSubSuperscriptOnTheRight, SetSubSuperscriptOnTheLeft
setSubscript(String)setSubscript(MathElement)setSuperscript(String)setSuperscript(MathElement)setSubSuperscriptOnTheRight(String, String)setSubSuperscriptOnTheRight(MathElement, MathElement)setSubSuperscriptOnTheLeft(String, String)setSubSuperscriptOnTheLeft(MathElement, MathElement)
Устанавливает подстрочник и надстрочник. Можно одновременно задать оба индекса слева или справа, но одиночный подстрочник/надстрочник поддерживается только справа. Superscript также может использоваться для указания степени числа.
Пример:
$script = new MathematicalText("y")->setSubSuperscriptOnTheLeft("2x", "3z");
Метод Radical
radical(String)radical(MathElement)
Задаёт математический корень заданной степени из указанного аргумента.
Пример:
$radical = new MathematicalText("x")->radical("3");
Методы SetUpperLimit и SetLowerLimit
setUpperLimit(String)setUpperLimit(MathElement)setLowerLimit(String)setLowerLimit(MathElement)
Задаёт верхний или нижний предел. Здесь верхний и нижний просто указывают расположение аргумента относительно основания.
Рассмотрим выражение:

Такие выражения можно создать комбинацией классов MathFunction и MathLimit, а также операциями MathElement:
$mathExpression = new MathematicalText("lim")->setLowerLimit("x→∞")->function("x");
Методы Nary и Integral
nary(MathNaryOperatorTypes, MathElement, MathElementnary(MathNaryOperatorTypes, String, String)integral(MathIntegralTypes)integral(MathIntegralTypes, MathElement, MathElement)integral(MathIntegralTypes, String, String)integral(MathIntegralTypes, MathElement, MathElement, MathLimitLocations)integral(MathIntegralTypes, String, String, MathLimitLocations)
Оба метода nary и integral создают и возвращают N‑арный оператор типа MathNaryOperator. В методе nary перечисление MathNaryOperatorTypes задаёт тип оператора: суммирование, объединение и т.д., не включая интегралы. В методе Integral используется специализированная операция Integral с перечислением типов интегралов MathIntegralTypes.
Пример:
$baseArg = new MathematicalText("x")->join(new MathematicalText("dx")->toBox());
$integral = $baseArg->integral(MathIntegralTypes->Simple, "0", "1");
Метод ToMathArray
MathElement.toMathArray помещает элементы в вертикальный массив. При вызове у экземпляра MathBlock все дочерние элементы будут размещены в возвращаемом массиве.
Пример:
$arrayFunction = new MathematicalText("x")->join("y")->toMathArray();
Операции форматирования: Accent, Overbar, Underbar, Group, ToBorderBox, ToBox
- Метод
accentзадаёт акцентный знак (символ над элементом). - Методы
overbarиunderbarзадают черту сверху или снизу. - Метод
groupгруппирует с помощью символа группировки, например нижней фигурной скобки. - Метод
toBorderBoxпомещает элемент в рамку‑коробку. - Метод
toBoxпомещает элемент в нелинейную коробку (логическую группировку).
Примеры:
$accent = new MathematicalText("x")->accent('̃');
$bar = new MathematicalText("x")->overbar();
$groupChr = new MathematicalText("x")->join("y")->join("z")->group('⏡', MathTopBotPositions::Bottom, MathTopBotPositions::Top);
$borderBox = new MathematicalText("x+y+z")->toBorderBox();
$boxedOperator = new MathematicalText(":=")->toBox();
FAQ
Как добавить математическое уравнение на слайд PowerPoint?
Чтобы добавить уравнение, нужно создать объект формы‑математики, в которой автоматически присутствует математическая часть. Затем получить MathParagraph из MathPortion и добавить в него объекты MathBlock.
Можно ли создавать сложные вложенные математические выражения?
Да, Aspose.Slides позволяет создавать сложные выражения, вложивая MathBlock‑и. Каждый математический элемент поддерживает операции (Join, Divide, Enclose и т.д.) для комбинирования в более сложные структуры.
Как обновить или изменить существующее уравнение?
Чтобы обновить уравнение, необходимо получить доступ к существующим MathBlock‑ам через MathParagraph. Затем, используя такие методы, как Join, Divide, Enclose и прочие, можно изменить отдельные элементы уравнения. После редактирования сохраните презентацию, чтобы изменения вступили в силу.