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

Обзор

В 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 через Aspose.Slides API.

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

todo:image_alt_text

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

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

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

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

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

var fraction = new aspose.slides.MathematicalText("x").divide("y");
mathParagraph.add(new aspose.slides.MathBlock(fraction));

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

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

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

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

var pres = new aspose.slides.Presentation();
try {
    var mathShape = pres.getSlides().get_Item(0).getShapes().addMathShape(0, 0, 720, 150);
    var mathParagraph = mathShape.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0).getMathParagraph();
    var fraction = new aspose.slides.MathematicalText("x").divide("y");
    mathParagraph.add(new aspose.slides.MathBlock(fraction));
    var mathBlock = new aspose.slides.MathematicalText("c").setSuperscript("2").join("=").join(new aspose.slides.MathematicalText("a").setSuperscript("2")).join("+").join(new aspose.slides.MathematicalText("b").setSuperscript("2"));
    mathParagraph.add(mathBlock);
    pres.save("math.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    if (pres != null) {
        pres.dispose();
    }
}

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

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

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

Каждый тип математического элемента реализует класс 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 следующим образом:

var funcName = new aspose.slides.MathLimit(new aspose.slides.MathematicalText("lim"), new aspose.slides.MathematicalText("𝑥→∞"));
var mathFunc = new aspose.slides.MathFunction(funcName, new aspose.slides.MathematicalText("𝑥"));

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

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

Пример:

todo:image_alt_text

Класс MathMatrix

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

Пример:

todo:image_alt_text

Класс MathArray

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

Пример:

todo:image_alt_text

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

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

  • Класс MathBox: задаёт логическое обёртывание (упаковку) математического элемента. Например, объект в коробке может служить эмулятором оператора с или без точки выравнивания, служить разрывом строки или группироваться так, чтобы не допускать переноса внутри. Например, оператор “==” следует поместить в коробку, чтобы предотвратить перенос строки.

  • Класс MathDelimiter: задаёт объект‑ограничитель, состоящий из открывающих и закрывающих символов (скобки, фигурные скобки, квадратные скобки, вертикальные черты) и одного или нескольких математических элементов внутри, разделённых заданным символом. Примеры: (𝑥²); [𝑥²|𝑦²].
    Пример: todo:image_alt_text

  • Класс MathAccent: задаёт акцентную функцию, состоящую из основания и комбинируемого диакритического знака.
    Пример: 𝑎́.

  • Класс MathBar: задаёт функцию черты, состоящую из базового аргумента и над- или подчеркивающей линии.
    Пример: todo:image_alt_text

  • Класс MathGroupingCharacter: задаёт группирующий символ над или под выражением, обычно для выделения взаимосвязей между элементами.
    Пример: todo:image_alt_text

Математические операции

Каждый математический элемент и математическое выражение (через MathBlock) реализует класс MathElement. Он позволяет выполнять операции над существующей структурой и формировать более сложные выражения. Все операции принимают два набора параметров: либо MathElement, либо строку. При использовании строковых аргументов из указанных строк неявно создаются объекты MathematicalText. Ниже перечислены доступные в Aspose.Slides математические операции.

Метод Join

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

var element1 = new aspose.slides.MathematicalText("x");
var element2 = new aspose.slides.MathematicalText("y");
var block = element1.join(element2);

Метод Divide

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

var numerator = new aspose.slides.MathematicalText("x");
var fraction = numerator.divide("y", aspose.slides.MathFractionTypes.Linear);

Метод Enclose

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

/**
 * <p>
 * Enclose a math element in parenthesis
 * </p>
 */
public IMathDelimiter enclose();

/**
 * <p>
 * Encloses this element in specified characters such as parenthesis or another characters as framing
 * </p>
 */
public IMathDelimiter enclose(char beginningCharacter, char endingCharacter);

Пример:

var delimiter = new aspose.slides.MathematicalText("x").enclose('[', ']');
var delimiter2 = new aspose.slides.MathematicalText("elem1").join("elem2").enclose();

Метод Function

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

/**
 * <p>
 * Takes a function of an argument using this instance as the function name
 * </p>
 */
public IMathFunction function(IMathElement functionArgument);

/**
 * <p>
 * Takes a function of an argument using this instance as the function name
 * </p>
 */
public IMathFunction function(String functionArgument);

Пример:

var func = new aspose.slides.MathematicalText("sin").function("x");

Метод AsArgumentOfFunction

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

Пример:

var funcName = new aspose.slides.MathLimit(new aspose.slides.MathematicalText("lim"), new aspose.slides.MathematicalText("𝑛→∞"));
var func1 = new aspose.slides.MathematicalText("2x").asArgumentOfFunction(funcName);
var func2 = new aspose.slides.MathematicalText("x").asArgumentOfFunction("sin");
var func3 = new aspose.slides.MathematicalText("x").asArgumentOfFunction(aspose.slides.MathFunctionsOfOneArgument.Sin);
var func4 = new aspose.slides.MathematicalText("x").asArgumentOfFunction(aspose.slides.MathFunctionsOfTwoArguments.Log, "3");

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

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

Пример:

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

Метод Radical

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

Пример:

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

Методы SetUpperLimit и SetLowerLimit

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

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

todo:image_alt_text

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

var mathExpression = new aspose.slides.MathematicalText("lim").setLowerLimit("x→∞").function("x");

Методы Nary и Integral

Методы nary и integral создают и возвращают N‑арный оператор, представленный типом MathNaryOperator. В методе nary перечисление MathNaryOperatorTypes указывает тип оператора: суммирование, объединение и т.д., без интегралов. В методе integral используется специализированная операция Integral с перечислением типов интегралов MathIntegralTypes.

Пример:

var baseArg = new aspose.slides.MathematicalText("x").join(new aspose.slides.MathematicalText("dx").toBox());
var integral = baseArg.integral(aspose.slides.MathIntegralTypes.Simple, "0", "1");

Метод ToMathArray

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

Пример:

var arrayFunction = new aspose.slides.MathematicalText("x").join("y").toMathArray();

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

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

Примеры:

var accent = new aspose.slides.MathematicalText("x").accent('̃');
var bar = new aspose.slides.MathematicalText("x").overbar();
var groupChr = new aspose.slides.MathematicalText("x").join("y").join("z").group('⏡', aspose.slides.MathTopBotPositions.Bottom, aspose.slides.MathTopBotPositions.Top);
var borderBox = new aspose.slides.MathematicalText("x+y+z").toBorderBox();
var boxedOperator = new aspose.slides.MathematicalText(":=").toBox();

FAQ

Как добавить математическое уравнение в слайд PowerPoint?

Чтобы добавить уравнение, необходимо создать объект MathShape, который автоматически содержит математическую часть. Затем получить MathParagraph из MathPortion и добавить в него объекты MathBlock.

Можно ли создавать сложные вложенные математические выражения?

Да, Aspose.Slides позволяет создавать сложные выражения, вложивая MathBlock‑ы. Каждый математический элемент реализует класс IMathElement, который позволяет применять операции (Join, Divide, Enclose и др.) для комбинирования элементов в более сложные структуры.

Как обновить или изменить существующее математическое уравнение?

Чтобы изменить уравнение, нужно получить существующие MathBlock‑ы через MathParagraph. Затем с помощью методов Join, Divide, Enclose и других изменить отдельные элементы уравнения. После редактирования сохраните презентацию, чтобы изменения вступили в силу.