Mathematische Gleichungen zu PowerPoint-Präsentationen in С++ hinzufügen
Übersicht
In PowerPoint ist es möglich, eine mathematische Gleichung oder Formel zu schreiben und in der Präsentation anzuzeigen. Dazu werden verschiedene mathematische Symbole in PowerPoint dargestellt und können dem Text oder der Gleichung hinzugefügt werden. Dafür wird der mathematische Gleichungskonstruktor in PowerPoint verwendet, der das Erstellen komplexer Formeln unterstützt, wie zum Beispiel:
- Mathematischer Bruch
- Mathematischer Wurzelterm
- Mathematische Funktion
- Grenzen und Logarithmusfunktionen
- N‑stellige Operationen
- Matrix
- Große Operatoren
- Sin‑, Cos‑Funktionen
Um eine mathematische Gleichung in PowerPoint hinzuzufügen, wird das Einfügen → Gleichung‑Menü verwendet:

Damit wird ein mathematischer Text in XML erzeugt, der in PowerPoint wie folgt dargestellt wird:

PowerPoint unterstützt zahlreiche mathematische Symbole zur Erstellung von Gleichungen. Dennoch liefert das Erstellen komplexer Gleichungen in PowerPoint oft kein professionelles Ergebnis. Benutzer, die häufig mathematische Präsentationen erstellen, greifen daher zu Drittanbieter‑Lösungen, um ansprechende Formeln zu erzeugen.
Mit Aspose.Slide API können Sie mathematische Gleichungen in PowerPoint‑Präsentationen programmgesteuert in C++ verarbeiten. Erzeugen Sie neue mathematische Ausdrücke oder bearbeiten Sie bereits vorhandene. Der Export mathematischer Strukturen in Bilder wird ebenfalls teilweise unterstützt.
Wie man eine mathematische Gleichung erstellt
Mathematische Elemente werden verwendet, um beliebige mathematische Konstruktionen mit beliebiger Verschachtelung zu bauen. Eine lineare Sammlung mathematischer Elemente bildet einen mathematischen Block, dargestellt durch die MathBlock ‑Klasse. Die MathBlock ‑Klasse ist im Wesentlichen ein abgegrenzter mathematischer Ausdruck, Formel oder Gleichung. MathPortion ist ein mathematischer Abschnitt, der mathematischen Text enthält (nicht zu verwechseln mit Portion). MathParagraph ermöglicht die Manipulation einer Menge von MathBlocks. Diese Klassen sind der Schlüssel zur Arbeit mit PowerPoint‑Mathe‑Gleichungen über die Aspose.Slides‑API.
Betrachten wir, wie wir die folgende mathematische Gleichung über die Aspose.Slides‑API erzeugen können:

Um einen mathematischen Ausdruck auf der Folie hinzuzufügen, fügen Sie zuerst eine Form hinzu, die den mathematischen Text enthalten soll:
auto pres = System::MakeObject<Presentation>();
auto mathShape = pres->get_Slides()->idx_get(0)->get_Shapes()->AddMathShape(0.0f, 0.0f, 720.0f, 150.0f);
Nach dem Erzeugen enthält die Form standardmäßig bereits einen Absatz mit einem mathematischen Abschnitt. Die MathPortion ‑Klasse ist ein Abschnitt, der mathematischen Text enthält. Um auf den mathematischen Inhalt innerhalb der MathPortion zuzugreifen, verwenden Sie die MathParagraph‑Variable:
auto mathParagraph = (System::AsCast<MathPortion>(mathShape->get_TextFrame()->get_Paragraphs()->idx_get(0)->get_Portions()->idx_get(0)))->get_MathParagraph();
Die MathParagraph‑Klasse ermöglicht das Lesen, Hinzufügen, Bearbeiten und Löschen von MathBlocks (MathBlock), die aus einer Kombination mathematischer Elemente bestehen. Beispiel: Erzeugen Sie einen Bruch und platzieren ihn in der Präsentation:
auto fraction = System::MakeObject<MathematicalText>(u"x")->Divide(u"y");
mathParagraph->Add(System::MakeObject<MathBlock>(fraction));
Jedes mathematische Element wird durch eine Klasse repräsentiert, die das IMathElement‑Interface implementiert. Dieses Interface bietet zahlreiche Methoden zum einfachen Erzeugen mathematischer Ausdrücke. Mit einer einzigen Codezeile lässt sich ein recht komplexer Ausdruck erzeugen. Beispiel: Der Satz des Pythagoras sieht so aus:
auto mathBlock = System::MakeObject<MathematicalText>(u"c")
->SetSuperscript(u"2")
->Join(u"=")
->Join(System::MakeObject<MathematicalText>(u"a")->SetSuperscript(u"2"))
->Join(u"+")
->Join(System::MakeObject<MathematicalText>(u"b")->SetSuperscript(u"2"));
Operationen des Interfaces IMathElement werden in jeder Elementart implementiert, einschließlich der MathBlock.
Der vollständige Quellcode‑Beispiel:
auto pres = System::MakeObject<Presentation>();
auto mathShape = pres->get_Slides()->idx_get(0)->get_Shapes()->AddMathShape(0.0f, 0.0f, 720.0f, 150.0f);
auto mathParagraph = (System::AsCast<MathPortion>(mathShape->get_TextFrame()->get_Paragraphs()->idx_get(0)->get_Portions()->idx_get(0)))->get_MathParagraph();
auto fraction = System::MakeObject<MathematicalText>(u"x")->Divide(u"y");
mathParagraph->Add(System::MakeObject<MathBlock>(fraction));
auto mathBlock = System::MakeObject<MathematicalText>(u"c")
->SetSuperscript(u"2")
->Join(u"=")
->Join(System::MakeObject<MathematicalText>(u"a")->SetSuperscript(u"2"))
->Join(u"+")->Join(System::MakeObject<MathematicalText>(u"b")->SetSuperscript(u"2"));
mathParagraph->Add(mathBlock);
pres->Save(u"math.pptx", SaveFormat::Pptx);
Mathematische Elementtypen
Mathematische Ausdrücke entstehen aus Folgen mathematischer Elemente. Die Folge wird durch einen mathematischen Block dargestellt, und die Argumente der Elemente bilden eine baumartige Verschachtelung.
Es gibt zahlreiche mathematische Elementtypen, die zum Aufbau eines mathematischen Blocks verwendet werden können. Jeder dieser Typen kann in einem anderen Element aggregiert werden – Elemente fungieren also als Container und bilden eine baumartige Struktur. Der einfachste Typ ist ein Element, das keine anderen Elemente enthält.
Jeder Elementtyp implementiert das IMathElement‑Interface, sodass die gleichen mathematischen Operationen auf unterschiedliche Elemente anwendbar sind.
MathematicalText‑Klasse
Die MathematicalText‑Klasse repräsentiert mathematischen Text – das Basiselement aller mathematischen Konstruktionen. Sie kann Operanden, Operatoren, Variablen und sonstigen linearen Text darstellen.
Beispiel: 𝑎=𝑏+𝑐
MathFraction‑Klasse
Die MathFraction‑Klasse definiert ein Bruchobjekt bestehend aus Zähler und Nenner, getrennt durch einen Bruchstrich. Der Strich kann horizontal oder diagonal sein. Das Objekt wird auch für Stapelfunktionen verwendet, bei denen ein Element über einem anderen steht, ohne Bruchstrich.
Beispiel:

MathRadical‑Klasse
Die MathRadical‑Klasse definiert die Wurzelfunktion, bestehend aus Basis und optionalem Grad.
Beispiel:

MathFunction‑Klasse
Die MathFunction‑Klasse definiert eine Funktion eines Arguments. Sie enthält die Methoden get_Name() – Funktionsname – und get_Base() – Funktionsargument.
Beispiel:

MathNaryOperator‑Klasse
Die MathNaryOperator‑Klasse definiert ein N‑stelliges mathematisches Objekt, z. B. Summation oder Integral. Sie besteht aus einem Operator, einer Basis (oder einem Operanden) und optionalen oberen und unteren Grenzen. Beispiele für N‑stellige Operatoren sind Summation, Union, Schnittmenge, Integral.
Einfachere Operatoren wie + oder ‑ werden nicht hier definiert, sondern durch ein einzelnes MathematicalText.
Beispiel:

MathLimit‑Klasse
Die MathLimit‑Klasse erzeugt eine obere oder untere Grenze. Sie besteht aus Text auf der Grundlinie und verkleinertem Text darüber bzw. darunter. Das Wort „lim“ ist nicht enthalten; Sie können Text oben oder unten platzieren. So entsteht der Ausdruck

mit einer Kombination aus MathFunction und MathLimit:
auto funcName = System::MakeObject<MathLimit>(System::MakeObject<MathematicalText>(u"lim"), System::MakeObject<MathematicalText>(u"𝑥→∞"));
auto mathFunc = System::MakeObject<MathFunction>(funcName, System::MakeObject<MathematicalText>(u"𝑥"));
MathSubscriptElement, MathSuperscriptElement, MathRightSubSuperscriptElement, MathLeftSubSuperscriptElement‑Klassen
- MathSubscriptElement
- MathSuperscriptElement
- MathRightSubSuperscriptElement
- MathLeftSubSuperscriptElement
Diese Klassen definieren einen Tief- bzw. Hochindex. Sie können Sub‑ und Superscript gleichzeitig links oder rechts setzen; ein einzelner Sub‑ oder Superscript wird nur rechts unterstützt. Der MathSubscriptElement kann zudem den mathematischen Grad einer Zahl darstellen.
Beispiel:

MathMatrix‑Klasse
Die MathMatrix‑Klasse definiert ein Matrixobjekt, bestehend aus Kindelementen, die in Zeilen und Spalten angeordnet sind. Matrixen besitzen keine eingebauten Begrenzungszeichen; zum Einrahmen sollten Sie ein IMathDelimiter‑Objekt verwenden. Null‑Argumente erzeugen Lücken in der Matrix.
Beispiel:

MathArray‑Klasse
Die MathArray‑Klasse definiert ein vertikales Array von Gleichungen oder anderen mathematischen Objekten.
Beispiel:

Formatierung mathematischer Elemente
-
MathBorderBox‑Klasse: zeichnet einen rechteckigen oder anderen Rahmen um ein IMathElement.
Beispiel:

-
MathBox‑Klasse: definiert das logische Box‑Verpacken eines mathematischen Elements (z. B. um Zeilenumbrüche zu verhindern).
-
MathDelimiter‑Klasse: definiert ein Begrenzungszeichen mit Öffnungs‑ und Schließzeichen (Klammern, geschweifte Klammern, eckige Klammern, senkrechte Striche) und einem oder mehreren Elementen innen.
Beispiel:

-
MathAccent‑Klasse: definiert einen Akzent, bestehend aus Basis und kombinierender diakritischer Markierung.
Beispiel: 𝑎́.
-
MathBar‑Klasse: definiert eine Balkenfunktion (Über‑ oder Unterbalken).
Beispiel:

-
MathGroupingCharacter‑Klasse: definiert ein Gruppierungszeichen über oder unter einem Ausdruck, um Beziehungen hervorzuheben.
Beispiel:

Mathematische Operationen
Jedes mathematische Element und jeder mathematische Ausdruck (via MathBlock) implementiert das IMathElement‑Interface. Damit können Sie Operationen auf der bestehenden Struktur ausführen und komplexere Ausdrücke bilden. Alle Methoden akzeptieren entweder ein IMathElement oder einen String als Argument. Instanzen der MathematicalText‑Klasse werden implizit aus den übergebenen Strings erzeugt. Die in Aspose.Slides verfügbaren Mathe‑Operationen sind unten aufgeführt.
Join‑Methode
Verbindet ein mathematisches Element und bildet einen mathematischen Block. Beispiel:
auto element1 = System::MakeObject<MathematicalText>(u"x");
auto element2 = System::MakeObject<MathematicalText>(u"y");
auto block = element1->Join(element2);
Divide‑Methode
- Divide(String)
- Divide(IMathElement)
- Divide(String, MathFractionTypes)
- Divide(IMathElement, MathFractionTypes)
Erzeugt einen Bruch des angegebenen Typs mit diesem Zähler und dem angegebenen Nenner. Beispiel:
auto numerator = System::MakeObject<MathematicalText>(u"x");
auto fraction = numerator->Divide(u"y", MathFractionTypes::Linear);
Enclose‑Methode
Umfasst das Element mit angegebenen Zeichen wie Klammern.
/// <summary>
/// Encloses a math element in parenthesis
/// </summary>
virtual System::SharedPtr<IMathDelimiter> Enclose() = 0;
/// <summary>
/// Encloses this element in specified characters such as parenthesis or another characters as framing
/// </summary>
virtual System::SharedPtr<IMathDelimiter> Enclose(char16_t beginningCharacter, char16_t endingCharacter) = 0;
Beispiel:
auto delimiter = System::MakeObject<MathematicalText>(u"x")->Enclose(u'[', u']');
auto delimiter2 = System::ExplicitCast<IMathElement>(System::MakeObject<MathematicalText>(u"elem1")->Join(u"elem2"))->Enclose();
Function‑Methode
Nimmt eine Funktion eines Arguments, wobei das aktuelle Objekt als Funktionsname dient.
/// <summary>
/// Takes a function of an argument using this instance as the function name
/// </summary>
/// <param name="functionArgument">An argument of the function</param>
virtual System::SharedPtr<IMathFunction> Function(System::SharedPtr<IMathElement> functionArgument) = 0;
virtual System::SharedPtr<IMathFunction> Function(System::String functionArgument) = 0;
Beispiel:
auto func = System::MakeObject<MathematicalText>(u"sin")->Function(u"x");
AsArgumentOfFunction‑Methode
- AsArgumentOfFunction(String)
- AsArgumentOfFunction(IMathElement)
- AsArgumentOfFunction(MathFunctionsOfOneArgument)
- AsArgumentOfFunction(MathFunctionsOfTwoArguments, IMathElement)
- AsArgumentOfFunction(MathFunctionsOfTwoArguments, String)
Verwendet das aktuelle Objekt als Argument einer Funktion. Sie können:
- einen String als Funktionsnamen angeben, z. B. “cos”.
- einen vordefinierten Wert aus den Aufzählungen MathFunctionsOfOneArgument oder MathFunctionsOfTwoArguments auswählen, z. B. MathFunctionsOfOneArgument.ArcSin.
- die Instanz eines IMathElement verwenden.
Beispiel:
auto funcName = System::MakeObject<MathLimit>(System::MakeObject<MathematicalText>(u"lim"), System::MakeObject<MathematicalText>(u"𝑛→∞"));
auto func1 = System::MakeObject<MathematicalText>(u"2x")->AsArgumentOfFunction(funcName);
auto func2 = System::MakeObject<MathematicalText>(u"x")->AsArgumentOfFunction(u"sin");
auto func3 = System::MakeObject<MathematicalText>(u"x")->AsArgumentOfFunction(MathFunctionsOfOneArgument::Sin);
auto func4 = System::MakeObject<MathematicalText>(u"x")->AsArgumentOfFunction(MathFunctionsOfTwoArguments::Log, u"3");
SetSubscript, SetSuperscript, SetSubSuperscriptOnTheRight, SetSubSuperscriptOnTheLeft‑Methoden
- SetSubscript(String)
- SetSubscript(IMathElement)
- SetSuperscript(String)
- SetSuperscript(IMathElement)
- SetSubSuperscriptOnTheRight(String, String)
- SetSubSuperscriptOnTheRight(IMathElement, IMathElement)
- SetSubSuperscriptOnTheLeft(String, String)
- SetSubSuperscriptOnTheLeft(IMathElement, IMathElement)
Setzt Tief- bzw. Hochindex. Sie können Tief‑ und Hochindex gleichzeitig links oder rechts setzen; ein einzelner Tief‑ oder Hochindex wird nur rechts unterstützt. Der Hochindex kann zudem den mathematischen Grad einer Zahl darstellen.
Beispiel:
auto script = System::MakeObject<MathematicalText>(u"y")->SetSubSuperscriptOnTheLeft(u"2x", u"3z");
Radical‑Methode
Definiert die Wurzel eines angegebenen Grades für das gegebene Argument.
Beispiel:
auto radical = System::MakeObject<MathematicalText>(u"x")->Radical(u"3");
SetUpperLimit und SetLowerLimit‑Methoden
Setzt obere bzw. untere Grenze. Die Position gibt nur an, ob das Argument über oder unter der Basis liegt.
Betrachten wir den Ausdruck:

Solche Ausdrücke können durch eine Kombination der Klassen MathFunction und MathLimit sowie der Operationen des IMathElement erzeugt werden:
auto mathExpression = System::MakeObject<MathematicalText>(u"lim")->SetLowerLimit(u"x→∞")->Function(u"x");
Nary‑ und Integral‑Methoden
- 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)
Sowohl Nary als auch Integral erzeugen und geben einen N‑stellig‑Operator zurück, dargestellt durch den Typ IMathNaryOperator. Im Nary‑Fall gibt die Aufzählung MathNaryOperatorTypes den Operatortyp an (Summation, Union usw.). Im Integral‑Fall wird die Aufzählung MathIntegralTypes verwendet.
Beispiel:
auto baseArg = System::MakeObject<MathematicalText>(u"x")->Join(System::MakeObject<MathematicalText>(u"dx")->ToBox());
auto integral = baseArg->Integral(MathIntegralTypes::Simple, u"0", u"1");
ToMathArray‑Methode
ToMathArray legt Elemente in ein vertikales Array. Wird diese Methode für ein MathBlock‑Objekt aufgerufen, werden alle Kind‑Elemente in das zurückgegebene Array eingefügt.
Beispiel:
auto arrayFunction = System::MakeObject<MathematicalText>(u"x")->Join(u"y")->ToMathArray();
Formatierungsoperationen: Accent, Overbar, Underbar, Group, ToBorderBox, ToBox
- Accent – setzt ein Akzentzeichen (z. B. ein Tilde‑Zeichen) über das Element.
- Overbar und Underbar – setzen einen Balken über bzw. unter das Element.
- Group – fasst Elemente mit einem Gruppierungszeichen (z. B. geschweifte Klammer) zusammen.
- ToBorderBox – umschließt das Element mit einem Rahmen.
- ToBox – legt das Element in eine logische Box (ohne visuellen Rahmen).
Beispiele:
auto accent = System::MakeObject<MathematicalText>(u"x")->Accent(u'\u0303');
auto bar = System::MakeObject<MathematicalText>(u"x")->Overbar();
auto groupChr = System::MakeObject<MathematicalText>(u"x")->Join(u"y")->Join(u"z")->Group(u'\u23E1', MathTopBotPositions::Bottom, MathTopBotPositions::Top);
auto borderBox = System::MakeObject<MathematicalText>(u"x+y+z")->ToBorderBox();
auto boxedOperator = System::MakeObject<MathematicalText>(u":=")->ToBox();
FAQ
Wie füge ich einer PowerPoint‑Folie eine mathematische Gleichung hinzu?
Dazu erstellen Sie ein MathShape‑Objekt, das automatisch einen MathPortion enthält. Anschließend holen Sie sich das MathParagraph aus dem MathPortion und fügen dort MathBlock-Objekte hinzu.
Ist es möglich, komplex verschachtelte mathematische Ausdrücke zu erzeugen?
Ja, Aspose.Slides ermöglicht das Erzeugen komplexer Ausdrücke durch Verschachtelung von MathBlocks. Jedes mathematische Element implementiert das IMathElement-Interface, sodass Sie Operationen wie Join, Divide, Enclose usw. kombinieren können.
Wie kann ich eine bestehende mathematische Gleichung aktualisieren oder ändern?
Greifen Sie über das MathParagraph auf die vorhandenen MathBlocks zu. Mit Methoden wie Join, Divide, Enclose und anderen können Sie einzelne Elemente der Gleichung ändern. Nach der Bearbeitung speichern Sie die Präsentation, um die Änderungen zu übernehmen.