Математические уравнения 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 через API Aspose.Slides.

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

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 является порцией, которая содержит математический текст внутри. Чтобы получить доступ к математическому содержимому внутри 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();