Уравнения математики в PowerPoint

Обзор

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

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

Чтобы добавить математическое уравнение в PowerPoint, используется меню Вставка -> Уравнение:

todo:image_alt_text

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

todo:image_alt_text

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

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

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

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

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

todo:image_alt_text

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


 using (Presentation pres = new Presentation())

{

    var mathShape = pres.Slides[0].Shapes.AddMathShape(0, 0, 720, 150);

}

После создания фигура уже будет содержать один абзац с математической частью по умолчанию. Для доступа к математическому содержимому внутри 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 (Presentation pres = new Presentation())

{

    IAutoShape mathShape = pres.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);

    pres.Save("math.pptx", 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-арных операторов: сумма, объединение, пересечение, интеграл.

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

Пример:

todo:image_alt_text

Класс MathLimit

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

todo:image_alt_text

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

    Пример: 𝑎́.

  • Класс 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

Заключает элемент в указанные символы, такие как скобки или другой символ как окантовка.


 /// <summary>

/// Заключает математический элемент в скобки

/// </summary>

IMathDelimiter Enclose();

/// <summary>

/// Заключает этот элемент в указанные символы, такие как скобки или другие символы как окантовка

/// </summary>

IMathDelimiter Enclose(char beginningCharacter, char endingCharacter);

Например:


 IMathDelimiter delimiter = new MathematicalText("x"). Enclose('[', ']');

IMathDelimiter delimiter2 = new MathematicalText("elem1").Join("elem2").Enclose();

Метод Function

Принимает функцию аргумента, используя текущий объект в качестве имени функции.


 /// <summary>

/// Принимает функцию аргумента, используя этот экземпляр в качестве имени функции

/// </summary>

/// <param name="functionArgument">Аргумент функции</param>

IMathFunction Function(IMathElement functionArgument);

IMathFunction Function(string functionArgument);

Например:


 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

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

Пример:


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

Метод Radical

Определяет математический корень заданной степени от указанного аргумента.

Пример:


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

Методы SetUpperLimit и SetLowerLimit

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

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

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();