Математические уравнения PowerPoint
Обзор
В PowerPoint можно написать математическое уравнение или формулу и отобразить их в презентации. Для этого в PowerPoint представлены различные математические символы, которые можно добавить к тексту или уравнению. Для этого используется конструктор математических уравнений в PowerPoint, который помогает создавать сложные формулы, такие как:
- Математическая дробь
- Математический корень
- Математическая функция
- Пределы и логарифмические функции
- N-ичные операции
- Матрица
- Большие операторы
- Функции синуса и косинуса
Чтобы добавить математическое уравнение в PowerPoint, используется меню Вставка -> Уравнение:
Это создаст математический текст в формате 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. Нулевые аргументы могут быть использованы для создания пробелов в матрицах.
Пример:
Класс MathArray
Класс MathArray определяет вертикальный массив уравнений или любых математических объектов.
Пример:
Форматирование математических элементов
-
Класс MathBorderBox: рисует прямоугольную или другую рамку вокруг IMathElement.
Пример:
-
Класс MathBox: задает логическую упаковку (упаковку) математического элемента. Например, объект в рамке может служить эмулятором оператора с точкой выравнивания или без, служить точкой разрыва строки или быть сгруппированным так, чтобы не допустить разрывов строк внутри. Например, оператор “==” должен быть заключен в рамки, чтобы предотвратить разрывы строк.
-
Класс 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>
* Заключить математический элемент в скобки
* </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
- 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)
Устанавливает подстрочный и надстрочный индекс. Вы можете установить подстрочный и надстрочный индекс одновременно с левой или правой стороны аргумента, но поддерживается только один подстрочный или надстрочный индекс с правой стороны. Надстрочный индекс также можно использовать для установки математической степени числа.
Пример:
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();