Добавить математические уравнения в презентации PowerPoint на PHP

Обзор

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

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

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

todo:image_alt_text

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

todo:image_alt_text

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

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

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

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

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

todo:image_alt_text

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

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

Пример:

todo:image_alt_text

Класс MathRadical

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

Пример:

todo:image_alt_text

Класс MathFunction

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

Пример:

todo:image_alt_text

Класс MathNaryOperator

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

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

Пример:

todo:image_alt_text

Класс MathLimit

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

todo:image_alt_text

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

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

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

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

Пример:

todo:image_alt_text

Класс MathMatrix

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

Пример:

todo:image_alt_text

Класс MathArray

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

Пример:

todo:image_alt_text

Форматирование математических элементов

  • Класс MathBorderBox: рисует прямоугольную или другую границу вокруг MathElement.

    Пример: 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) наследует класс 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)

Берёт указанный объект функции, используя текущий экземпляр как аргумент. Можно:

Пример:

  $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)

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

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

todo:image_alt_text

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

  $mathExpression = new MathematicalText("lim")->setLowerLimit("x→∞")->function("x");

Методы Nary и Integral

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