Добавьте математические уравнения в презентации PowerPoint на Android
Обзор
В PowerPoint можно написать математическое уравнение или формулу и отобразить её в презентации. Для этого в PowerPoint представлены различные математические символы, которые можно добавить к тексту или уравнению. Для этого используется конструктор математических уравнений в PowerPoint, который помогает создавать сложные формулы, такие как:
- Дробь
- Радикал
- Функция
- Пределы и логарифмические функции
- N-арные операции
- Матрица
- Большие операторы
- Функции sin, cos
Чтобы добавить математическое уравнение в PowerPoint, используется меню Insert -> Equation:

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

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

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

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

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

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

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

создаётся комбинацией элементовMathFunction иMathLimit следующим образом:
MathLimit funcName = new MathLimit(new MathematicalText("lim"), new MathematicalText("𝑥→∞"));
MathFunction mathFunc = new MathFunction(funcName, new MathematicalText("𝑥"));
Классы MathSubscriptElement, MathSuperscriptElement, MathRightSubSuperscriptElement, MathLeftSubSuperscriptElement
- MathSubscriptElement
- MathSuperscriptElement
- MathRightSubSuperscriptElement
- MathLeftSubSuperscriptElement
Эти классы задают нижний или верхний индекс. Можно установить одновременно нижний и верхний индекс слева или справа от аргумента, но одиночный нижний или верхний индекс поддерживается только справа. КлассMathSubscriptElement также может использоваться для задания степени числа.
Пример:

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

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

Форматирование математических элементов
-
КлассMathBorderBox: рисует прямоугольную или другую рамку вокругIMathElement.
Пример:
-
КлассMathBox: задаёт логическое „упаковку“ (boxing) математического элемента. Например, упакованный объект может выступать в роли эмулятора оператора с или без точки выравнивания, служить разрывом строки или группироваться так, чтобы не допустить разрывов внутри. Например, оператор “==” следует упаковать, чтобы предотвратить перенос строки.
-
КлассMathDelimiter: задаёт объект ограничителя, состоящий из открывающих и закрывающих символов (скобки, фигурные скобки, квадратные скобки, вертикальная черта) и одного или нескольких математических элементов внутри, разделённых указанным символом. Примеры: (𝑥2); [𝑥2|𝑦2].
Пример:
-
КлассMathAccent: задаёт акцентную функцию, состоящую из основания и комбинирующего диакритического знака.
Пример: 𝑎́. -
КлассMathBar: задаёт функцию черты, состоящую из базового аргумента и надчерты или подчёркивания.
Пример:
-
КлассMathGroupingCharacter: задаёт символ группировки над или под выражением, обычно для подчёркивания связей между элементами.
Пример:
Математические операции
Каждый математический элемент и математическое выражение (черезMathBlock) реализует интерфейсIMathElement. Он позволяет применять операции к существующей структуре и формировать более сложные выражения. Все операции имеют два набора параметров: либо[IMathElement], либо строку. При использовании строковых аргументов объекты классаMathematicalText создаются неявно. Ниже перечислены доступные в Aspose.Slides операции.
Метод Join
Объединяет математический элемент и образует математический блок. Пример:
IMathElement element1 = new MathematicalText("x");
IMathElement element2 = new MathematicalText("y");
IMathBlock block = element1.join(element2);
Метод Divide
- divide(String)
- divide(IMathElement)
- divide(String, MathFractionTypes)
- divide(IMathElement, MathFractionTypes)
Создаёт дробь указанного типа с данным числителем и знаменателем. Пример:
IMathElement numerator = new MathematicalText("x");
IMathFraction fraction = numerator.divide("y", 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);
Пример:
IMathDelimiter delimiter = new MathematicalText("x").enclose('[', ']');
IMathDelimiter delimiter2 = new 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);
Пример:
IMathFunction func = new MathematicalText("sin").function("x");
Метод AsArgumentOfFunction
- asArgumentOfFunction(String)
- asArgumentOfFunction(IMathElement)
- asArgumentOfFunction(MathFunctionsOfOneArgument)
- asArgumentOfFunction(MathFunctionsOfTwoArguments, IMathElement)
- asArgumentOfFunction(MathFunctionsOfTwoArguments, String)
Принимает указанную функцию, используя текущий экземпляр как аргумент. Вы можете:
- указать строку как имя функции, например “cos”;
- выбрать одно из предопределённых значений перечисленийMathFunctionsOfOneArgument илиMathFunctionsOfTwoArguments, напримерMathFunctionsOfOneArgument.ArcSin;
- передать экземплярIMathElement.
Пример:
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
- setSubscript(String)
- setSubscript(IMathElement)
- setSuperscript(String)
- setSuperscript(IMathElement)
- setSubSuperscriptOnTheRight(String, String)
- setSubSuperscriptOnTheRight(IMathElement, IMathElement)
- setSubSuperscriptOnTheLeft(String, String)
- setSubSuperscriptOnTheLeft(IMathElement, IMathElement)
Устанавливает нижний и верхний индексы. Можно задать одновременно нижний и верхний индекс слева или справа от аргумента, но одиночный нижний или верхний индекс поддерживается только справа. Superscript также может использоваться для задания степени числа.
Пример:
IMathLeftSubSuperscriptElement script = new MathematicalText("y").setSubSuperscriptOnTheLeft("2x", "3z");
Метод Radical
Задаёт корень указанной степени из данного аргумента.
Пример:
IMathRadical radical = new MathematicalText("x").radical("3");
Методы SetUpperLimit и SetLowerLimit
Задаёт верхний или нижний предел. Здесь верхний и нижний просто указывают расположение аргумента относительно основания.
Рассмотрим выражение:

Такие выражения могут быть созданы комбинацией классовMathFunction иMathLimit и операциямиIMathElement следующим образом:
IMathFunction mathExpression = new MathematicalText("lim").setLowerLimit("x→∞").function("x");
Методы Nary и Integral
- nary(MathNaryOperatorTypes, IMathElement, IMathElement)
- nary(MathNaryOperatorTypes, String, String)
- integral(MathIntegralTypes)
- integral(MathIntegralTypes, IMathElement, IMathElement)
- integral(MathIntegralTypes, String, String)
- integral(MathIntegralTypes, IMathElement, IMathElement, MathLimitLocations)
- integral(MathIntegralTypes, String, String, MathLimitLocations)
Оба метода — 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();
FAQ
Как добавить математическое уравнение на слайд PowerPoint?
Для добавления уравнения нужно создать объект математической формы, который автоматически содержит математическую часть. Затем нужно получитьMathParagraph изMathPortion и добавить в него объектыMathBlock.
Можно ли создавать сложные вложенные математические выражения?
Да, Aspose.Slides позволяет создавать сложные выражения, вкладывая MathBlock в друг друга. Каждый математический элемент реализует интерфейсIMathElement, что даёт возможность применять операции (Join, Divide, Enclose и др.) для комбинирования элементов в более сложные структуры.
Как обновить или изменить существующее уравнение?
Чтобы изменить уравнение, нужно получить доступ к существующим MathBlock черезMathParagraph. Затем, используя такие методы, как Join, Divide, Enclose и другие, можно модифицировать отдельные элементы уравнения. После редактирования сохраните презентацию, чтобы изменения применились.