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

Обзор

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

In PowerPoint пользователи обычно добавляют уравнения через Insert > Equation:

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

Результатом является редактируемый математический текст на слайде:

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

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

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

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

Для сценариев экспорта MathML см. Экспорт математических уравнений из презентаций в PHP через Java.

Создать уравнение

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

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

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $mathShape = $slide->getShapes()->addMathShape(20, 20, 700, 120);
    $mathParagraph = $mathShape->getTextFrame()->getParagraphs()
        - >get_Item(0)->getPortions()->get_Item(0)->getMathParagraph();

    $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);
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

Добавить дроби

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

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

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $mathShape = $slide->getShapes()->addMathShape(20, 20, 700, 100);
    $mathParagraph = $mathShape->getTextFrame()->getParagraphs()
        - >get_Item(0)->getPortions()->get_Item(0)->getMathParagraph();

    $fraction = (new MathematicalText("1"))
        - >divide("x", MathFractionTypes::Skewed);

    $mathParagraph->add(new MathBlock($fraction));

    $presentation->save("fraction.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

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

$stackedFraction = (new MathematicalText("x + 1"))->divide("y - 1", MathFractionTypes::Bar);

Добавить радикалы

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

Выражение n-го корня с x под радикальным знаком

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $mathShape = $slide->getShapes()->addMathShape(20, 20, 700, 100);
    $mathParagraph = $mathShape->getTextFrame()->getParagraphs()
        - >get_Item(0)->getPortions()->get_Item(0)->getMathParagraph();

    $radical = (new MathematicalText("x"))
        - >radical("n");

    $mathParagraph->add(new MathBlock($radical));

    $presentation->save("radical.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

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

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

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

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $mathShape = $slide->getShapes()->addMathShape(20, 20, 700, 100);
    $mathParagraph = $mathShape->getTextFrame()->getParagraphs()
        - >get_Item(0)->getPortions()->get_Item(0)->getMathParagraph();

    $limit = (new MathematicalText("lim"))
        - >setLowerLimit("x\u{2192}\u{221E}")
        - >function("x");

    $mathParagraph->add(new MathBlock($limit));

    $presentation->save("functions-and-limits.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

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

$customFunction = (new MathematicalText("f"))->function("x + 1");

Добавить N-арные операторы и интегралы

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

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

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $mathShape = $slide->getShapes()->addMathShape(20, 20, 700, 120);
    $mathParagraph = $mathShape->getTextFrame()->getParagraphs()
        - >get_Item(0)->getPortions()->get_Item(0)->getMathParagraph();

    $summationBase = (new MathematicalText("x"))
        - >setSuperscript("k")
        - >join((new MathematicalText("a"))->setSuperscript("n-k"));

    $summation = $summationBase->nary(MathNaryOperatorTypes::Summation, "k=0", "n");

    $mathParagraph->add(new MathBlock($summation));

    $presentation->save("nary-operators.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

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

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

$integralBase = (new MathematicalText("x"))->join((new MathematicalText("dx"))->toBox());
$integral = $integralBase->integral(MathIntegralTypes::Simple, "0", "1");

Добавить матрицы

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

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

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $mathShape = $slide->getShapes()->addMathShape(20, 20, 700, 120);
    $mathParagraph = $mathShape->getTextFrame()->getParagraphs()
        - >get_Item(0)->getPortions()->get_Item(0)->getMathParagraph();

    $matrix = new MathMatrix(2, 3);
    $matrix->set_Item(0, 0, new MathematicalText("1"));
    $matrix->set_Item(0, 1, new MathematicalText("x"));
    $matrix->set_Item(1, 0, new MathematicalText("x"));
    $matrix->set_Item(1, 1, new MathematicalText("2"));
    $matrix->set_Item(1, 2, new MathematicalText("y"));

    $mathParagraph->add(new MathBlock($matrix));

    $presentation->save("matrix.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

Добавить массивы уравнений

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

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

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $mathShape = $slide->getShapes()->addMathShape(20, 20, 700, 140);
    $mathParagraph = $mathShape->getTextFrame()->getParagraphs()
        - >get_Item(0)->getPortions()->get_Item(0)->getMathParagraph();

    $equationArray = (new MathematicalText("x"))
        - >join("y")
        - >toMathArray();

    $mathParagraph->add(new MathBlock($equationArray));

    $presentation->save("equation-array.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

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

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

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

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $mathShape = $slide->getShapes()->addMathShape(20, 20, 700, 100);
    $mathParagraph = $mathShape->getTextFrame()->getParagraphs()
        - >get_Item(0)->getPortions()->get_Item(0)->getMathParagraph();

    $cosine = (new MathematicalText("2x"))
        - >asArgumentOfFunction(MathFunctionsOfOneArgument::Cos);

    $mathParagraph->add(new MathBlock($cosine));

    $presentation->save("trigonometric-function.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

Добавить нижние и верхние индексы

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

Заглавная Y с левым нижним индексом 1 и верхним индексом n

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $mathShape = $slide->getShapes()->addMathShape(20, 20, 700, 100);
    $mathParagraph = $mathShape->getTextFrame()->getParagraphs()
        - >get_Item(0)->getPortions()->get_Item(0)->getMathParagraph();

    $scripts = (new MathematicalText("Y"))
        - >setSubSuperscriptOnTheLeft("1", "n");

    $mathParagraph->add(new MathBlock($scripts));

    $presentation->save("subscript-superscript.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

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

Используйте enclose , чтобы поместить выражение внутрь разделителей. Вы также можете задать символ-разделитель для выражений с несколькими элементами.

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

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $mathShape = $slide->getShapes()->addMathShape(20, 20, 700, 100);
    $mathParagraph = $mathShape->getTextFrame()->getParagraphs()
        - >get_Item(0)->getPortions()->get_Item(0)->getMathParagraph();

    $delimiter = (new MathematicalText("x"))
        - >join("y")
        - >join("z")
        - >enclose(new Java("java.lang.Character", "<"), new Java("java.lang.Character", ">"));
    $delimiter->setSeparatorCharacter(new Java("java.lang.Character", "|"));

    $mathParagraph->add(new MathBlock($delimiter));

    $presentation->save("delimiters.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

Добавить рамку

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

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

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $mathShape = $slide->getShapes()->addMathShape(20, 20, 700, 100);
    $mathParagraph = $mathShape->getTextFrame()->getParagraphs()
        - >get_Item(0)->getPortions()->get_Item(0)->getMathParagraph();

    $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);
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

Группировать члены

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

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

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $mathShape = $slide->getShapes()->addMathShape(20, 20, 700, 120);
    $mathParagraph = $mathShape->getTextFrame()->getParagraphs()
        - >get_Item(0)->getPortions()->get_Item(0)->getMathParagraph();

    $grouped = (new MathematicalText("x + y"))
        - >group(new Java("java.lang.Character", "\u{23DF}"), MathTopBotPositions::Bottom, MathTopBotPositions::Top)
        - >setLowerLimit("any text");

    $mathParagraph->add(new MathBlock($grouped));

    $presentation->save("grouped-terms.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

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

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

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

$presentation = new Presentation();
try {
    $slide = $presentation->getSlides()->get_Item(0);

    $mathShape = $slide->getShapes()->addMathShape(20, 20, 700, 100);
    $mathParagraph = $mathShape->getTextFrame()->getParagraphs()
        - >get_Item(0)->getPortions()->get_Item(0)->getMathParagraph();

    $overbar = (new MathematicalText("ABC"))->overbar();

    $mathParagraph->add(new MathBlock($overbar));

    $presentation->save("overbar.pptx", SaveFormat::Pptx);
} finally {
    if (!java_is_null($presentation)) {
        $presentation->dispose();
    }
}

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

Task Main API
Создать математический текст MathematicalText
Объединить элементы join
Создать дроби divide
Добавить верхний или нижний индекс setSuperscript, setSubscript
Добавить функции function, asArgumentOfFunction
Добавить радикалы radical
Добавить пределы setLowerLimit, setUpperLimit
Добавить индексы слева setSubSuperscriptOnTheLeft
Добавить суммирования и интегралы nary, integral
Добавить матрицы MathMatrix
Добавить массивы уравнений toMathArray
Добавить разделители enclose
Добавить черты и рамки overbar, toBorderBox
Группировать члены group

Часто задаваемые вопросы

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

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

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

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

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

Aspose.Slides экспортирует математические уравнения в MathML. Если нужен LaTeX, сначала экспортируйте в MathML, а затем преобразуйте MathML с помощью инструмента, поддерживающего нужный диалект LaTeX.