Математические уравнения PowerPoint

Обзор

В 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

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

auto pres = System::MakeObject<Presentation>();
auto mathShape = pres->get_Slides()->idx_get(0)->get_Shapes()->AddMathShape(0.0f, 0.0f, 720.0f, 150.0f);

После создания фигура уже будет содержать один абзац с математической частью по умолчанию. Класс MathPortion является частью, содержащей математический текст внутри. Чтобы получить доступ к математическому содержимому внутри MathPortion, обратитесь к переменной MathParagraph:

 auto mathParagraph = (System::AsCast<MathPortion>(mathShape->get_TextFrame()->get_Paragraphs()->idx_get(0)->get_Portions()->idx_get(0)))->get_MathParagraph();

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

auto fraction = System::MakeObject<MathematicalText>(u"x")->Divide(u"y");
mathParagraph->Add(System::MakeObject<MathBlock>(fraction));

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

auto mathBlock = System::MakeObject<MathematicalText>(u"c")
  ->SetSuperscript(u"2")
  ->Join(u"=")
  ->Join(System::MakeObject<MathematicalText>(u"a")->SetSuperscript(u"2"))
  ->Join(u"+")
  ->Join(System::MakeObject<MathematicalText>(u"b")->SetSuperscript(u"2"));

Операции интерфейса IMathElement реализованы в любом типе элемента, включая MathBlock.

Полный пример кода:

auto pres = System::MakeObject<Presentation>();
auto mathShape = pres->get_Slides()->idx_get(0)->get_Shapes()->AddMathShape(0.0f, 0.0f, 720.0f, 150.0f);
auto mathParagraph = (System::AsCast<MathPortion>(mathShape->get_TextFrame()->get_Paragraphs()->idx_get(0)->get_Portions()->idx_get(0)))->get_MathParagraph();

auto fraction = System::MakeObject<MathematicalText>(u"x")->Divide(u"y");
mathParagraph->Add(System::MakeObject<MathBlock>(fraction));

auto mathBlock = System::MakeObject<MathematicalText>(u"c")
  ->SetSuperscript(u"2")
  ->Join(u"=")
  ->Join(System::MakeObject<MathematicalText>(u"a")->SetSuperscript(u"2"))
  ->Join(u"+")->Join(System::MakeObject<MathematicalText>(u"b")->SetSuperscript(u"2"));
mathParagraph->Add(mathBlock);

pres->Save(u"math.pptx", SaveFormat::Pptx);

Типы математических элементов

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

Существует множество типов математических элементов, которые можно использовать для построения математического блока. Каждый из этих элементов может быть включен (агрегирован) в другой элемент. То есть элементы на самом деле являются контейнерами для других, образуя древовидную структуру. Самый простой тип элемента, который не содержит других элементов математического текста.

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

Класс MathematicalText

Класс MathematicalText представляет собой математический текст - основной элемент всех математических конструкций. Математический текст может представлять операнды и операторы, переменные и любой другой линейный текст.

Пример: 𝑎=𝑏+𝑐

Класс MathFraction

Класс MathFraction определяет объект дроби, состоящий из числителя и знаменателя, разделенных линией дроби. Линия дроби может быть горизонтальной или диагональной, в зависимости от свойств дроби. Объект дроби также используется для представления стековой функции, которая помещает один элемент над другим без линии дроби.

Пример:

todo:image_alt_text

Класс MathRadical

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

Пример:

todo:image_alt_text

Класс MathFunction

Класс MathFunction определяет функцию от аргумента. Содержит методы: get_Name() - имя функции и get_Base() - аргумент функции.

Пример:

todo:image_alt_text

Класс MathNaryOperator

Класс MathNaryOperator определяет N-ерный математический объект, такой как сумма и интеграл. Он состоит из оператора, основы (или операнда) и необязательных верхних и нижних пределов. Примеры N-ерных операторов: Сумма, Объединение, Пересечение, Интеграл.

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

Пример:

todo:image_alt_text

Класс MathLimit

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

todo:image_alt_text

создается с помощью комбинации элементов MathFunction и MathLimit следующим образом:

auto funcName = System::MakeObject<MathLimit>(System::MakeObject<MathematicalText>(u"lim"), System::MakeObject<MathematicalText>(u"𝑥→∞"));
auto mathFunc = System::MakeObject<MathFunction>(funcName, System::MakeObject<MathematicalText>(u"𝑥"));

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

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

auto element1 = System::MakeObject<MathematicalText>(u"x");
    
auto element2 = System::MakeObject<MathematicalText>(u"y");

auto block = element1->Join(element2);

Метод Divide

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

auto numerator = System::MakeObject<MathematicalText>(u"x");
auto fraction = numerator->Divide(u"y", MathFractionTypes::Linear);

Метод Enclose

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

/// <summary>
/// Заключает математический элемент в скобки
/// </summary>
virtual System::SharedPtr<IMathDelimiter> Enclose() = 0;

/// <summary>
/// Заключает этот элемент в указанные символы, такие как скобки или другие символы для обрамления
/// </summary>
virtual System::SharedPtr<IMathDelimiter> Enclose(char16_t beginningCharacter, char16_t endingCharacter) = 0;

Например:

auto delimiter = System::MakeObject<MathematicalText>(u"x")->Enclose(u'[', u']');
auto delimiter2 = System::ExplicitCast<IMathElement>(System::MakeObject<MathematicalText>(u"elem1")->Join(u"elem2"))->Enclose();

Метод Function

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

/// <summary>
/// Принимает функцию от аргумента, используя этот экземпляр в качестве имени функции
/// </summary>
/// <param name="functionArgument">Аргумент функции</param>

virtual System::SharedPtr<IMathFunction> Function(System::SharedPtr<IMathElement> functionArgument) = 0;

virtual System::SharedPtr<IMathFunction> Function(System::String functionArgument) = 0;

Например:

auto func = System::MakeObject<MathematicalText>(u"sin")->Function(u"x");

Методы AsArgumentOfFunction

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

  • указать строку в качестве имени функции, например “cos”.
  • выбрать одно из предопределенных значений перечислений MathFunctionsOfOneArgument или MathFunctionsOfTwoArguments, например MathFunctionsOfOneArgument.ArcSin.
  • выбрать экземпляр IMathElement.

Например:


auto funcName = System::MakeObject<MathLimit>(System::MakeObject<MathematicalText>(u"lim"), System::MakeObject<MathematicalText>(u"𝑛→∞"));
    
auto func1 = System::MakeObject<MathematicalText>(u"2x")->AsArgumentOfFunction(funcName);

auto func2 = System::MakeObject<MathematicalText>(u"x")->AsArgumentOfFunction(u"sin");

auto func3 = System::MakeObject<MathematicalText>(u"x")->AsArgumentOfFunction(MathFunctionsOfOneArgument::Sin);

auto func4 = System::MakeObject<MathematicalText>(u"x")->AsArgumentOfFunction(MathFunctionsOfTwoArguments::Log, u"3");

Методы SetSubscript, SetSuperscript, SetSubSuperscriptOnTheRight, SetSubSuperscriptOnTheLeft

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

Пример:

auto script = System::MakeObject<MathematicalText>(u"y")->SetSubSuperscriptOnTheLeft(u"2x", u"3z");

Метод Radical

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

Пример:

auto radical = System::MakeObject<MathematicalText>(u"x")->Radical(u"3");

Методы SetUpperLimit и SetLowerLimit

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

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

todo:image_alt_text

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

auto mathExpression = System::MakeObject<MathematicalText>(u"lim")->SetLowerLimit(u"x→∞")->Function(u"x");

Методы Nary и Integral

Оба метода Nary и Integral создают и возвращают N-ерный оператор, представленный типом IMathNaryOperator. В методе Nary перечисление MathNaryOperatorTypes указывает тип оператора: сумма, объединение и т.д., исключая интегралы. В методе Integral существует специализированная операция Integral с перечислением типов интегралов MathIntegralTypes.

Пример:

auto baseArg = System::MakeObject<MathematicalText>(u"x")->Join(System::MakeObject<MathematicalText>(u"dx")->ToBox());
auto integral = baseArg->Integral(MathIntegralTypes::Simple, u"0", u"1");

Метод ToMathArray

ToMathArray помещает элементы в вертикальный массив. Если эта операция вызвана для экземпляра MathBlock, все дочерние элементы будут помещены в возвращаемый массив.

Пример:

auto arrayFunction = System::MakeObject<MathematicalText>(u"x")->Join(u"y")->ToMathArray();

Форматирующие операции: Accent, Overbar, Underbar, Group, ToBorderBox, ToBox

  • Метод Accent устанавливает акцент (символ сверху элемента).
  • Методы Overbar и Underbar устанавливают линию сверху или снизу.
  • Метод Group помещает в группу, используя символ группировки, такой как нижняя фигурная скобка или другой.
  • Метод ToBorderBox помещает в рамку.
  • Метод ToBox помещает в невизуальную коробку (логическая группировка).

Примеры:

auto accent = System::MakeObject<MathematicalText>(u"x")->Accent(u'\u0303');
    
auto bar = System::MakeObject<MathematicalText>(u"x")->Overbar();

auto groupChr = System::MakeObject<MathematicalText>(u"x")->Join(u"y")->Join(u"z")->Group(u'\u23E1', MathTopBotPositions::Bottom, MathTopBotPositions::Top);

auto borderBox = System::MakeObject<MathematicalText>(u"x+y+z")->ToBorderBox();

auto boxedOperator = System::MakeObject<MathematicalText>(u":=")->ToBox();