Добавление математических уравнений в презентации PowerPoint на .NET

Обзор

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

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

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

todo:image_alt_text

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

todo:image_alt_text

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

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

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

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

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

todo:image_alt_text

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

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, которая размещает один элемент над другим без черты дроби.

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”, но позволяет разместить текст вверху или внизу выражения. Таким образом, выражение создаётся с помощью комбинации элементов [MathFunction] и [MathLimit] следующим образом:

var funcName = new MathLimit(new MathematicalText("lim"), new MathematicalText("𝑥→∞"));
var mathFunc = new MathFunction(funcName, new MathematicalText("𝑥"));

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

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

todo:image_alt_text

Класс MathMatrix

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

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]: Задает функцию акцента, которая состоит из основания и соединительного диакритического знака.

Example: 𝑎́.

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

todo:image_alt_text

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

todo:image_alt_text

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

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

Метод Join

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

IMathElement element1 = new MathematicalText("x");
IMathElement element2 = new MathematicalText("y");

IMathBlock block = element1.Join(element2);

Метод Divide

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

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

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

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

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

var script = new MathematicalText("y").SetSubSuperscriptOnTheLeft("2x", "3z");

Метод Radical

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

var radical = new MathematicalText("x").Radical("3");

Методы SetUpperLimit и SetLowerLimit

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

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

todo:image_alt_text

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

var mathExpression = MathText.Create("lim").SetLowerLimit("x→∞").Function("x");

Методы Nary и Integral

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