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

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

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

Чтобы добавить математическое выражение на слайд, сначала добавьте форму, которая будет содержать математический текст:
using (var presentation = new Presentation())
{
var mathShape = presentation.Slides[0].Shapes.AddMathShape(0, 0, 720, 150);
}
После создания формы она уже содержит один абзац с математическим фрагментом по умолчанию. Класс [MathPortion] представляет фрагмент, содержащий математический текст. Чтобы получить доступ к математическому содержимому внутри [MathPortion], обратитесь к переменной [MathParagraph]:
var mathParagraph = (mathShape.TextFrame.Paragraphs[0].Portions[0] as MathPortion).MathParagraph;
Класс [MathParagraph] позволяет читать, добавлять, редактировать и удалять математические блоки ([MathBlock]), которые состоят из комбинации математических элементов. Например, создать дробь и разместить её в презентации:
var fraction = new MathematicalText("x").Divide("y");
mathParagraph.Add(new MathBlock(fraction));
Каждый математический элемент представлен классом, реализующим интерфейс [IMathElement]. Этот интерфейс предоставляет многочисленные методы для простого создания математических выражений, позволяя конструировать достаточно сложные уравнения всего одной строкой кода. Например, теорема Пифагора будет выглядеть так:
var mathBlock = new MathematicalText("c")
.SetSuperscript("2")
.Join("=")
.Join(new MathematicalText("a").SetSuperscript("2"))
.Join("+")
.Join(new MathematicalText("b").SetSuperscript("2"));
Операции интерфейса [IMathElement] реализованы в каждом типе элемента, включая класс [MathBlock].
Ниже приведён полный пример исходного кода:
using (var presentation = new Presentation())
{
var mathShape = presentation.Slides[0].Shapes.AddMathShape(0, 0, 720, 150);
var mathParagraph = (mathShape.TextFrame.Paragraphs[0].Portions[0] as MathPortion).MathParagraph;
var fraction = new MathematicalText("x").Divide("y");
mathParagraph.Add(new MathBlock(fraction));
var mathBlock = new MathematicalText("c")
.SetSuperscript("2")
.Join("=")
.Join(new MathematicalText("a").SetSuperscript("2"))
.Join("+")
.Join(new MathematicalText("b").SetSuperscript("2"));
mathParagraph.Add(mathBlock);
presentation.Save("math.pptx", SaveFormat.Pptx);
}
Типы математических элементов
Математические выражения состоят из последовательностей математических элементов. Математический блок представляет такую последовательность, а аргументы этих элементов образуют вложенную древовидную структуру.
Существует множество типов математических элементов, которые могут использоваться для построения математического блока. Каждый из этих элементов может быть агрегирован внутри другого, образуя древовидную структуру. Самый простой тип элемента — тот, который не содержит других элементов математического текста.
Каждый тип математического элемента реализует интерфейс [IMathElement], позволяя использовать общий набор математических операций над разными типами элементов.
Класс MathematicalText
Класс [MathematicalText] представляет математический текст — базовый элемент всех математических конструкций. Математический текст может представлять операнды и операторы, переменные или любой другой линейный текст.
Example: 𝑎=𝑏+𝑐
Класс MathFraction
Класс [MathFraction] задаёт объект дроби, состоящий из числителя и знаменателя, разделённых чертой дроби. Черта может быть горизонтальной или диагональной, в зависимости от свойств дроби. Объект дроби также используется для представления функции stack, которая размещает один элемент над другим без черты дроби.

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

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

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

Класс MathLimit
Класс [MathLimit] создаёт верхний или нижний предел. Он задаёт объект предела, состоящий из текста на базовой линии и уменьшенного текста сразу выше или ниже её. Этот элемент не включает слово “lim”, но позволяет разместить текст вверху или внизу выражения. Таким образом, выражение создаётся с помощью комбинации элементов [MathFunction] и [MathLimit] следующим образом:
var funcName = new MathLimit(new MathematicalText("lim"), new MathematicalText("𝑥→∞"));
var mathFunc = new MathFunction(funcName, new MathematicalText("𝑥"));
Классы MathSubscriptElement, MathSuperscriptElement, MathRightSubSuperscriptElement, MathLeftSubSuperscriptElement
- MathSubscriptElement
- MathSuperscriptElement
- MathRightSubSuperscriptElement
- MathLeftSubSuperscriptElement
Эти классы задают нижний индекс или верхний индекс. Вы можете одновременно установить и нижний, и верхний индексы слева или справа от аргумента, но отдельный нижний или верхний индекс поддерживается только справа. Класс [MathSubscriptElement] также может использоваться для задания математической степени числа.

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

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

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

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

- Класс [MathAccent]: Задает функцию акцента, которая состоит из основания и соединительного диакритического знака.
Example: 𝑎́.
- Класс [MathBar]: Задает функцию черты, которая состоит из базового аргумента и надчеркивающей или подчеркивающей линии.

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

Математические операции
Каждый математический элемент и каждое математическое выражение (через [MathBlock]) реализует интерфейс [IMathElement]. Это позволяет выполнять операции над существующей структурой и формировать более сложные математические выражения. Все операции имеют два набора параметров: либо [IMathElement], либо строковые аргументы. Экземпляры класса [MathematicalText] неявно создаются из указанных строк, когда используются строковые аргументы. Ниже перечислены математические операции, доступные в Aspose.Slides.
Метод Join
Эти методы объединяют математический элемент и формируют математический блок. Например:
IMathElement element1 = new MathematicalText("x");
IMathElement element2 = new MathematicalText("y");
IMathBlock block = element1.Join(element2);
Метод Divide
- Divide(String)
- Divide(IMathElement)
- Divide(String, MathFractionTypes)
- Divide(IMathElement, MathFractionTypes)
Эти методы создают дробь указанного типа с заданным числителем и знаменателем. Например:
IMathElement numerator = new MathematicalText("x");
IMathFraction fraction = numerator.Divide("y", MathFractionTypes.Linear);
Метод Enclose
Эти методы заключают элемент в указанные символы, такие как скобки или другие ограничивающие символы. Например:
IMathDelimiter delimiter = new MathematicalText("x"). Enclose('[', ']');
IMathDelimiter delimiter2 = new MathematicalText("elem1").Join("elem2").Enclose();
Метод Function
Эти методы задают функцию аргумента, используя текущий объект в качестве имени функции. Например:
IMathFunction func = new MathematicalText("sin").Function("x");
Метод AsArgumentOfFunction
- AsArgumentOfFunction(String)
- AsArgumentOfFunction(IMathElement)
- AsArgumentOfFunction(MathFunctionsOfOneArgument)
- AsArgumentOfFunction(MathFunctionsOfTwoArguments, IMathElement)
- AsArgumentOfFunction(MathFunctionsOfTwoArguments, String)
Эти методы задают указанную функцию, используя текущий экземпляр в качестве аргумента. Вы можете:
- указать строку в качестве имени функции, например “cos”;
- выбрать одно из предопределённых значений перечислений [MathFunctionsOfOneArgument] или [MathFunctionsOfTwoArguments], например
MathFunctionsOfOneArgument.ArcSin; - выбрать экземпляр [IMathElement].
Например:
var funcName = new MathLimit(new MathematicalText("lim"), new MathematicalText("𝑛→∞"));
var func1 = new MathematicalText("2x").AsArgumentOfFunction(funcName);
var func2 = new MathematicalText("x").AsArgumentOfFunction("sin");
var func3 = new MathematicalText("x").AsArgumentOfFunction(MathFunctionsOfOneArgument.Sin);
var func4 = new MathematicalText("x").AsArgumentOfFunction(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 также может использоваться для задания математической степени числа.
var script = new MathematicalText("y").SetSubSuperscriptOnTheLeft("2x", "3z");
Метод Radical
Эти методы задают математический корень заданной степени на основе указанного аргумента.
var radical = new MathematicalText("x").Radical("3");
Методы SetUpperLimit и SetLowerLimit
Эти методы задают верхний или нижний предел, где “upper” и “lower” указывают положение аргумента относительно основания.
Рассмотрим выражение:

Такие выражения можно создать с помощью комбинации классов [MathFunction] и [MathLimit], а также операций интерфейса [IMathElement] следующим образом:
var mathExpression = MathText.Create("lim").SetLowerLimit("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 предоставляется специализированная операция для интегралов, используя перечисление [MathIntegralTypes].
IMathBlock baseArg = new MathematicalText("x").Join(new MathematicalText("dx").ToBox());
IMathNaryOperator integral = baseArg.Integral(MathIntegralTypes.Simple, "0", "1");
Метод ToMathArray
[ToMathArray] помещает элементы в вертикальный массив. Если эта операция вызывается у экземпляра [MathBlock], все его дочерние элементы будут размещены в возвращённом массиве.
var arrayFunction = new MathematicalText("x").Join("y").ToMathArray();
Операции форматирования: Accent, Overbar, Underbar, Group, ToBorderBox, ToBox
- Метод [Accent] задаёт знак акцента (символ над элементом).
- Методы [Overbar] и [Underbar] задают черту сверху или снизу.
- Метод [Group] размещает в группе, используя символ группировки, такой как нижняя фигурная скобка или иной.
- Метод [ToBorderBox] размещает в рамочной коробке.
- Метод [ToBox] размещает в невизуальной коробке (логическое группирование).
var accent = new MathematicalText("x").Accent('\u0303');
var bar = new MathematicalText("x").Overbar();
var groupChr = new MathematicalText("x").Join("y").Join("z").Group('\u23E1', MathTopBotPositions.Bottom, MathTopBotPositions.Top);
var borderBox = new MathematicalText("x+y+z").ToBorderBox();
var boxedOperator = new MathematicalText(":=").ToBox();
FAQ
Как добавить математическое уравнение на слайд PowerPoint?
Чтобы добавить математическое уравнение, необходимо создать объект MathShape, который автоматически содержит математический фрагмент. Затем получите MathParagraph из MathPortion и добавьте в него объекты MathBlock.
Можно ли создавать сложные вложенные математические выражения?
Да, Aspose.Slides позволяет создавать сложные математические выражения путем вложения MathBlocks. Каждый математический элемент реализует интерфейс IMathElement, который позволяет применять операции (Join, Divide, Enclose и т.д.) для объединения элементов в более сложные структуры.
Как обновить или изменить существующее математическое уравнение?
Чтобы обновить уравнение, необходимо получить доступ к существующим MathBlocks через MathParagraph. Затем, используя методы такие как Join, Divide, Enclose и другие, можно изменить отдельные элементы уравнения. После редактирования сохраните презентацию, чтобы применить изменения.