Добавление математических уравнений в презентации PowerPoint на .NET

Обзор

PowerPoint хранит уравнения в виде Office Math Markup Language (OMML). С помощью Aspose.Slides для .NET вы можете программно создавать такой же математический контент: дроби, радикалы, функции, пределы, N‑арные операторы, матрицы, массивы и отформатированные блоки математических выражений.

В PowerPoint пользователи обычно добавляют уравнения через Вставка > Уравнение:

Вкладка Insert в PowerPoint с выбранной командой Уравнение

В результате получаем редактируемый математический текст на слайде:

Слайд PowerPoint, содержащий редактируемое математическое уравнение

Aspose.Slides создает этот математический текст с помощью трех основных объектов:

  • Математическая фигура, создаваемая с помощью AddMathShape, является фигурой, содержащей уравнение.
  • MathPortion сохраняет математическое содержимое внутри текстового фрейма фигуры.
  • MathParagraph содержит один или несколько объектов MathBlock.

Большинство примеров ниже используют MathematicalText и методы из IMathElement для краткого и читаемого кода.

Для сценариев экспорта MathML см. Export Math Equations from Presentations in .NET.

Создание уравнения

В этом примере создается математическая фигура и добавляется теорема Пифагора:

Уравнение c² = a² + b²

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var mathShape = slide.Shapes.AddMathShape(20, 20, 700, 120);
var mathParagraph = ((MathPortion)mathShape.TextFrame.Paragraphs[0].Portions[0]).MathParagraph;

var equation = new MathematicalText("c")
    .SetSuperscript("2")
    .Join("=")
    .Join(new MathematicalText("a").SetSuperscript("2"))
    .Join("+")
    .Join(new MathematicalText("b").SetSuperscript("2"));

mathParagraph.Add(equation);

presentation.Save("pythagorean-theorem.pptx", SaveFormat.Pptx);

Добавление дробей

Используйте Divide для создания дроби. Вы можете выбрать стиль дроби с помощью MathFractionTypes.

Наклонная математическая дробь, показывающая 1 делённое на x

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var mathShape = slide.Shapes.AddMathShape(20, 20, 700, 100);
var mathParagraph = ((MathPortion)mathShape.TextFrame.Paragraphs[0].Portions[0]).MathParagraph;

var fraction = new MathematicalText("1")
    .Divide("x", MathFractionTypes.Skewed);

mathParagraph.Add(new MathBlock(fraction));

presentation.Save("fraction.pptx", SaveFormat.Pptx);

Для дроби с чертой используйте MathFractionTypes.Bar:

var stackedFraction = new MathematicalText("x + 1").Divide("y - 1", MathFractionTypes.Bar);

Добавление радикалов

Используйте Radical для создания квадратного корня, кубического корня или другого корня. Текущий элемент становится основанием, а аргумент — показателем.

n‑й корень с x под радикальной чертой

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var mathShape = slide.Shapes.AddMathShape(20, 20, 700, 100);
var mathParagraph = ((MathPortion)mathShape.TextFrame.Paragraphs[0].Portions[0]).MathParagraph;

var radical = new MathematicalText("x")
    .Radical("n");

mathParagraph.Add(new MathBlock(radical));

presentation.Save("radical.pptx", SaveFormat.Pptx);

Добавление функций и пределов

Используйте AsArgumentOfFunction или Function для функций, таких как sin(x), log(x), или пользовательских имён функций. Для пределов поместите lim в MathLimit или используйте SetLowerLimit.

Предел x при x, стремящемся к бесконечности

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var mathShape = slide.Shapes.AddMathShape(20, 20, 700, 100);
var mathParagraph = ((MathPortion)mathShape.TextFrame.Paragraphs[0].Portions[0]).MathParagraph;

var limit = new MathematicalText("lim")
    .SetLowerLimit("x→∞")
    .Function("x");

mathParagraph.Add(new MathBlock(limit));

presentation.Save("functions-and-limits.pptx", SaveFormat.Pptx);

Для пользовательского имени функции сделайте имя функции текущим элементом:

var customFunction = new MathematicalText("f").Function("x + 1");

Добавление N‑арных операторов и интегралов

Используйте Nary для сумм, объединений, пересечений и других больших операторов. Используйте Integral для интегралов. Оба метода позволяют задавать нижний и верхний пределы.

Сумма с нижним и верхним пределами

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var mathShape = slide.Shapes.AddMathShape(20, 20, 700, 120);
var mathParagraph = ((MathPortion)mathShape.TextFrame.Paragraphs[0].Portions[0]).MathParagraph;

var summationBase = new MathematicalText("x")
    .SetSuperscript("k")
    .Join(new MathematicalText("a").SetSuperscript("n-k"));

var summation = summationBase.Nary(MathNaryOperatorTypes.Summation, "k=0", "n");

mathParagraph.Add(new MathBlock(summation));

presentation.Save("nary-operators.pptx", SaveFormat.Pptx);

N‑арные операторы предназначены для больших операторов с необязательными пределами. Простые операторы, такие как +, - и =, обычно добавляются как MathematicalText и соединяются в выражении.

Для интеграла используйте Integral:

var integralBase = new MathematicalText("x").Join(new MathematicalText("dx").ToBox());
var integral = integralBase.Integral(MathIntegralTypes.Simple, "0", "1");

Добавление матриц

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

Математическая матрица из двух строк с одной пустой ячейкой

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var mathShape = slide.Shapes.AddMathShape(20, 20, 700, 120);
var mathParagraph = ((MathPortion)mathShape.TextFrame.Paragraphs[0].Portions[0]).MathParagraph;

var matrix = new MathMatrix(2, 3);
matrix[0, 0] = new MathematicalText("1");
matrix[0, 1] = new MathematicalText("x");
matrix[1, 0] = new MathematicalText("x");
matrix[1, 1] = new MathematicalText("2");
matrix[1, 2] = new MathematicalText("y");

mathParagraph.Add(new MathBlock(matrix));

presentation.Save("matrix.pptx", SaveFormat.Pptx);

Добавление массивов уравнений

Используйте ToMathArray, когда нужны выровненные уравнения или вертикальная стековка выражений.

Вертикальный массив уравнений с x над y

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var mathShape = slide.Shapes.AddMathShape(20, 20, 700, 140);
var mathParagraph = ((MathPortion)mathShape.TextFrame.Paragraphs[0].Portions[0]).MathParagraph;

var equationArray = new MathematicalText("x")
    .Join("y")
    .ToMathArray();

mathParagraph.Add(new MathBlock(equationArray));

presentation.Save("equation-array.pptx", SaveFormat.Pptx);

Добавление тригонометрических функций

Используйте AsArgumentOfFunction, когда аргумент является текущим элементом и имя функции известно.

Тригонометрическая функция cos, применённая к 2x

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var mathShape = slide.Shapes.AddMathShape(20, 20, 700, 100);
var mathParagraph = ((MathPortion)mathShape.TextFrame.Paragraphs[0].Portions[0]).MathParagraph;

var cosine = new MathematicalText("2x")
    .AsArgumentOfFunction(MathFunctionsOfOneArgument.Cos);

mathParagraph.Add(new MathBlock(cosine));

presentation.Save("trigonometric-function.pptx", SaveFormat.Pptx);

Добавление индексов и степеней

Используйте вспомогательные функции для индексов и степеней. Когда индексы должны располагаться слева от основания, используйте SetSubSuperscriptOnTheLeft.

Большая буква Y с левым индексом 1 и степенью n

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var mathShape = slide.Shapes.AddMathShape(20, 20, 700, 100);
var mathParagraph = ((MathPortion)mathShape.TextFrame.Paragraphs[0].Portions[0]).MathParagraph;

var scripts = new MathematicalText("Y")
    .SetSubSuperscriptOnTheLeft("1", "n");

mathParagraph.Add(new MathBlock(scripts));

presentation.Save("subscript-superscript.pptx", SaveFormat.Pptx);

Добавление разделителей

Используйте Enclose для помещения выражения в разделители. Можно также задать символ‑разделитель для выражений с несколькими элементами.

Выражение с разделителями, содержащие x, y и z, разделённые вертикальными чертами

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var mathShape = slide.Shapes.AddMathShape(20, 20, 700, 100);
var mathParagraph = ((MathPortion)mathShape.TextFrame.Paragraphs[0].Portions[0]).MathParagraph;

var delimiter = new MathematicalText("x")
    .Join("y")
    .Join("z")
    .Enclose('<', '>');
delimiter.SeparatorCharacter = '|';

mathParagraph.Add(new MathBlock(delimiter));

presentation.Save("delimiters.pptx", SaveFormat.Pptx);

Добавление рамки

Используйте ToBorderBox, когда уравнение должно быть обрамлено.

Уравнение в рамке, показывающее a² = b² + c²

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var mathShape = slide.Shapes.AddMathShape(20, 20, 700, 100);
var mathParagraph = ((MathPortion)mathShape.TextFrame.Paragraphs[0].Portions[0]).MathParagraph;

var boxedEquation = new MathematicalText("a")
    .SetSuperscript("2")
    .Join("=")
    .Join(new MathematicalText("b").SetSuperscript("2"))
    .Join("+")
    .Join(new MathematicalText("c").SetSuperscript("2"))
    .ToBorderBox();

mathParagraph.Add(new MathBlock(boxedEquation));

presentation.Save("border-box.pptx", SaveFormat.Pptx);

Группировка членов

Используйте Group для размещения символа группировки над или под выражением. Добавьте предел, чтобы пометить сгруппированные члены.

Выражение x + y, сгруппированное с подписью любой текст под ним

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var mathShape = slide.Shapes.AddMathShape(20, 20, 700, 120);
var mathParagraph = ((MathPortion)mathShape.TextFrame.Paragraphs[0].Portions[0]).MathParagraph;

var grouped = new MathematicalText("x + y")
    .Group('\u23DF', MathTopBotPositions.Bottom, MathTopBotPositions.Top)
    .SetLowerLimit("any text");

mathParagraph.Add(new MathBlock(grouped));

presentation.Save("grouped-terms.pptx", SaveFormat.Pptx);

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

Используйте вспомогательные функции форматирования только там, где они проясняют формулу. Например, Overbar ставит черту над элементом.

Математическое выражение ABC с надчеркиванием

using var presentation = new Presentation();
var slide = presentation.Slides[0];

var mathShape = slide.Shapes.AddMathShape(20, 20, 700, 100);
var mathParagraph = ((MathPortion)mathShape.TextFrame.Paragraphs[0].Portions[0]).MathParagraph;

var overbar = new MathematicalText("ABC").Overbar();

mathParagraph.Add(new MathBlock(overbar));

presentation.Save("overbar.pptx", SaveFormat.Pptx);

Быстрая справка

Задача Основной API
Создание математического текста MathematicalText
Объединение элементов IMathElement.Join
Создание дробей IMathElement.Divide
Добавление верхнего или нижнего индекса SetSuperscript, SetSubscript
Добавление функций Function, AsArgumentOfFunction
Добавление радикалов IMathElement.Radical
Добавление пределов SetLowerLimit, SetUpperLimit
Добавление индексов слева SetSubSuperscriptOnTheLeft
Добавление сумм и интегралов Nary, Integral
Добавление матриц MathMatrix
Добавление массивов уравнений ToMathArray
Добавление разделителей Enclose
Добавление черт и рамок Overbar, ToBorderBox
Группировка членов Group

FAQ

Можно ли отредактировать существующее уравнение PowerPoint?

Да. Откройте презентацию, найдите фигуру, содержащую MathPortion, получите её MathParagraph и обновите математические блоки в этом абзаце.

Сохраняются ли уравнения как редактируемая математика PowerPoint?

Да. При сохранении в формате PPTX Aspose.Slides записывает уравнение как редактируемый контент Office Math.

Можно ли экспортировать уравнения в LaTeX?

Да. Получите IMathParagraph уравнения из его MathPortion, затем вызовите IMathParagraph.ToLatex для прямого экспорта. Полный пример см. в статье Export Math Equations from Presentations in .NET.