Уравнения математики 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

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

Presentation pres = new Presentation();
try {
    IAutoShape mathShape = pres.getSlides().get_Item(0).getShapes().addMathShape(0, 0, 720, 150);
} finally {
    if (pres != null) pres.dispose();
}

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

IMathParagraph mathParagraph = ((MathPortion)mathShape.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0)).getMathParagraph();

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

IMathFraction fraction = new MathematicalText("x").divide("y");

mathParagraph.add(new MathBlock(fraction));

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

IMathBlock mathBlock = new MathematicalText("c")
        .setSuperscript("2")
        .join("=")
        .join(new MathematicalText("a").setSuperscript("2"))
        .join("+")
        .join(new MathematicalText("b").setSuperscript("2"));

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

Пример полного исходного кода:

Presentation pres = new Presentation();
try {
    IAutoShape mathShape = pres.getSlides().get_Item(0).getShapes().addMathShape(0, 0, 720, 150);

    IMathParagraph mathParagraph = ((MathPortion)mathShape.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0)).getMathParagraph();
    
    IMathFraction fraction = new MathematicalText("x").divide("y");

    mathParagraph.add(new MathBlock(fraction));

    IMathBlock 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);
} finally {
    if (pres != null) pres.dispose();
}

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

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

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

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

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

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

Пример:

todo:image_alt_text

Класс MathLimit

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

todo:image_alt_text

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

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

MathFunction 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

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

/**
 * <p>
 * Заключает математический элемент в скобки
 * </p>
 */
public IMathDelimiter enclose();

/**
 * <p>
 * Заключает этот элемент в указанные символы, такие как скобки или другие символы как рамка
 * </p>
 */
public IMathDelimiter enclose(char beginningCharacter, char endingCharacter);

Например:

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

IMathDelimiter delimiter2 = new MathematicalText("elem1").join("elem2").enclose();

Метод Function

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

/**
 * <p>
 * Берет функцию аргумента, используя этот экземпляр как имя функции
 * </p>
 */
public IMathFunction function(IMathElement functionArgument);

/**
 * <p>
 * Берет функцию аргумента, используя этот экземпляр как имя функции
 * </p>
 */
public IMathFunction function(String functionArgument);

Например:

IMathFunction func = new MathematicalText("sin").function("x");

Метод AsArgumentOfFunction

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

Например:

MathLimit funcName = new MathLimit(new MathematicalText("lim"), new MathematicalText("𝑛→∞"));

IMathFunction func1 = new MathematicalText("2x").asArgumentOfFunction(funcName);

IMathFunction func2 = new MathematicalText("x").asArgumentOfFunction("sin");

IMathFunction func3 = new MathematicalText("x").asArgumentOfFunction(MathFunctionsOfOneArgument.Sin);

IMathFunction func4 = new MathematicalText("x").asArgumentOfFunction(MathFunctionsOfTwoArguments.Log, "3");

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

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

Пример:

IMathLeftSubSuperscriptElement script = new MathematicalText("y").setSubSuperscriptOnTheLeft("2x", "3z");

Метод Radical

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

Пример:

IMathRadical radical = new MathematicalText("x").radical("3");

Методы SetUpperLimit и SetLowerLimit

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

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

todo:image_alt_text

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

IMathFunction mathExpression = new MathematicalText("lim").setLowerLimit("x→∞").function("x");

Методы Nary и Integral

Как метод nary, так и метод integral создают и возвращают N-арный оператор, представленный типом IMathNaryOperator. В методе 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, все дочерние элементы будут помещены в возвращаемый массив.

Пример:

IMathArray arrayFunction = new MathematicalText("x").join("y").toMathArray();

Операции форматирования: Accent, Overbar, Underbar, Group, ToBorderBox, ToBox

  • Метод accent устанавливает акцентный знак (символ на верхней части элемента).
  • Методы overbar и underbar устанавливают черту сверху или снизу.
  • Метод group помещает в группу, используя символ группировки, такой как нижняя фигурная скобка или другой.
  • Метод toBorderBox помещает в границу.
  • Метод toBox помещает в невизуальную коробку (логическая группировка).

Примеры:

IMathAccent accent = new MathematicalText("x").accent('\u0303');

IMathBar bar = new MathematicalText("x").overbar();

IMathGroupingCharacter groupChr = new MathematicalText("x").join("y").join("z").group('\u23E1', MathTopBotPositions.Bottom, MathTopBotPositions.Top);

IMathBorderBox borderBox = new MathematicalText("x+y+z").toBorderBox();

IMathBox boxedOperator = new MathematicalText(":=").toBox();