Ajouter des équations mathématiques aux présentations PowerPoint en C++

Vue d’ensemble

Dans PowerPoint, il est possible d’écrire une équation ou une formule mathématique et de l’afficher dans la présentation. Pour cela, divers symboles mathématiques sont représentés dans PowerPoint et peuvent être ajoutés au texte ou à l’équation. Le constructeur d’équations mathématiques de PowerPoint est utilisé à cet effet, ce qui permet de créer des formules complexes telles que :

  • Fraction mathématique
  • Radical mathématique
  • Fonction mathématique
  • Limites et fonctions logarithmiques
  • Opérations n-aires
  • Matrice
  • Opérateurs étendus
  • Fonctions sinus, cosinus

Pour ajouter une équation mathématique dans PowerPoint, le menu Insert -> Equation est utilisé :

todo:image_alt_text

Cela crée un texte mathématique en XML qui peut être affiché dans PowerPoint comme suit :

todo:image_alt_text

PowerPoint prend en charge de nombreux symboles mathématiques pour créer des équations. Cependant, la création d’équations complexes dans PowerPoint ne donne souvent pas un résultat professionnel. Les utilisateurs qui doivent créer fréquemment des présentations mathématiques se tournent vers des solutions tierces pour obtenir de belles formules.

En utilisant Aspose.Slide API, vous pouvez travailler avec les équations mathématiques dans les présentations PowerPoint de manière programmatique en C++. Créez de nouvelles expressions mathématiques ou modifiez celles existantes. L’exportation de structures mathématiques vers des images est également partiellement prise en charge.

Comment créer une équation mathématique

Les éléments mathématiques sont utilisés pour construire n’importe quelle construction mathématique avec n’importe quel niveau d’imbrication. Une collection linéaire d’éléments mathématiques forme un bloc mathématique représenté par la classe MathBlock. La classe MathBlock représente essentiellement une expression, une formule ou une équation séparée. MathPortion est une portion mathématique, utilisée pour contenir du texte mathématique (ne pas confondre avec Portion). MathParagraph permet de manipuler un ensemble de blocs mathématiques. Les classes mentionnées ci‑dessus sont la clé pour travailler avec les équations mathématiques PowerPoint via l’API Aspose.Slides.

Voyons comment créer l’équation mathématique suivante via l’API Aspose.Slides :

todo:image_alt_text

Pour ajouter une expression mathématique sur la diapositive, ajoutez d’abord une forme qui contiendra le texte mathématique :

auto pres = System::MakeObject<Presentation>();
auto mathShape = pres->get_Slides()->idx_get(0)->get_Shapes()->AddMathShape(0.0f, 0.0f, 720.0f, 150.0f);

Après création, la forme contiendra déjà un paragraphe avec une portion mathématique par défaut. La classe MathPortion est une portion qui contient du texte mathématique. Pour accéder au contenu mathématique à l’intérieur de MathPortion, référez‑vous à la variable MathParagraph :

 auto mathParagraph = (System::AsCast<MathPortion>(mathShape->get_TextFrame()->get_Paragraphs()->idx_get(0)->get_Portions()->idx_get(0)))->get_MathParagraph();

La classe MathParagraph permet de lire, ajouter, modifier et supprimer des blocs mathématiques (MathBlock), qui consistent en une combinaison d’éléments mathématiques. Par exemple, créez une fraction et placez‑la dans la présentation :

auto fraction = System::MakeObject<MathematicalText>(u"x")->Divide(u"y");
mathParagraph->Add(System::MakeObject<MathBlock>(fraction));

Chaque élément mathématique est représenté par une classe qui implémente l’interface IMathElement. Cette interface fournit de nombreuses méthodes pour créer facilement des expressions mathématiques. Vous pouvez créer une expression assez complexe en une seule ligne de code. Par exemple, le théorème de Pythagore s’écrit ainsi :

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"));

Les opérations de l’interface IMathElement sont implémentées dans tout type d’élément, y compris la classe MathBlock.

Exemple complet :

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);

Types d’éléments mathématiques

Les expressions mathématiques sont formées à partir de séquences d’éléments mathématiques. La séquence d’éléments est représentée par un bloc mathématique, et les arguments des éléments forment un imbriquement en forme d’arbre.

Il existe de nombreux types d’éléments mathématiques pouvant être utilisés pour construire un bloc mathématique. Chaque élément peut être inclus (agrégé) dans un autre élément. Ainsi, les éléments sont en réalité des conteneurs les uns pour les autres, formant une structure arborescente. Le type le plus simple d’élément ne contient pas d’autres éléments du texte mathématique.

Chaque type d’élément implémente l’interface IMathElement, permettant l’utilisation d’un jeu commun d’opérations mathématiques sur différents types d’éléments.

Classe MathematicalText

La classe MathematicalText représente un texte mathématique – l’élément sous‑jacent de toutes les constructions mathématiques. Le texte mathématique peut représenter des opérandes, des opérateurs, des variables ou tout autre texte linéaire.

Exemple : 𝑎=𝑏+𝑐

Classe MathFraction

La classe MathFraction spécifie l’objet fraction, composé d’un numérateur et d’un dénominateur séparés par une barre de fraction. La barre peut être horizontale ou diagonale, selon les propriétés de la fraction. L’objet fraction sert également à représenter la fonction de pile, qui place un élément au-dessus d’un autre sans barre de fraction.

Exemple :

todo:image_alt_text

Classe MathRadical

La classe MathRadical spécifie la fonction radicale (racine mathématique), composée d’une base et d’un degré optionnel.

Exemple :

todo:image_alt_text

Classe MathFunction

La classe MathFunction spécifie une fonction d’un argument. Elle contient les méthodes : get_Name() – nom de la fonction et get_Base() – argument de la fonction.

Exemple :

todo:image_alt_text

Classe MathNaryOperator

La classe MathNaryOperator spécifie un objet mathématique n‑aire, tel que la sommation ou l’intégrale. Il se compose d’un opérateur, d’une base (ou opérande) et de limites supérieures et inférieures optionnelles. Exemples : sommation, union, intersection, intégrale.

Cette classe n’inclut pas les opérateurs simples comme l’addition ou la soustraction ; ils sont représentés par un élément texte unique – MathematicalText.

Exemple :

todo:image_alt_text

Classe MathLimit

La classe MathLimit crée une limite supérieure ou inférieure. Elle spécifie l’objet limite, composé d’un texte sur la ligne de base et d’un texte de taille réduite placé immédiatement au-dessus ou en dessous. Cet élément n’inclut pas le mot “lim”, mais permet de placer du texte en haut ou en bas de l’expression. Ainsi, l’expression :

todo:image_alt_text

est créée en combinant les éléments MathFunction et MathLimit de la manière suivante :

auto funcName = System::MakeObject<MathLimit>(System::MakeObject<MathematicalText>(u"lim"), System::MakeObject<MathematicalText>(u"𝑥→∞"));
auto mathFunc = System::MakeObject<MathFunction>(funcName, System::MakeObject<MathematicalText>(u"𝑥"));

Classes MathSubscriptElement, MathSuperscriptElement, MathRightSubSuperscriptElement, MathLeftSubSuperscriptElement

Ces classes spécifient un indice inférieur ou supérieur. Vous pouvez définir simultanément un indice et un exposant du côté gauche ou droit d’un argument, mais un seul indice ou exposant est pris en charge du côté droit uniquement. L’MathSubscriptElement peut également servir à définir le degré mathématique d’un nombre.

Exemple :

todo:image_alt_text

Classe MathMatrix

La classe MathMatrix spécifie l’objet Matrice, composé d’éléments enfants disposés en une ou plusieurs lignes et colonnes. Notez que les matrices n’ont pas de délimiteurs intégrés. Pour placer la matrice entre crochets, utilisez l’objet délimiteur – IMathDelimiter. Des arguments nuls peuvent être utilisés pour créer des espaces dans les matrices.

Exemple :

todo:image_alt_text

Classe MathArray

La classe MathArray spécifie un tableau vertical d’équations ou de tout autre objet mathématique.

Exemple :

todo:image_alt_text

Mise en forme des éléments mathématiques

  • MathBorderBox : dessine une bordure rectangulaire ou autre autour de l’IMathElement.

    Exemple :todo:image_alt_text

  • MathBox : spécifie le groupement logique (encapsulation) de l’élément mathématique. Par exemple, un objet encadré peut servir d’émulateur d’opérateur avec ou sans point d’alignement, de point de rupture de ligne, ou être groupé pour empêcher les sauts de ligne à l’intérieur.

  • MathDelimiter : spécifie l’objet délimiteur, composé de caractères d’ouverture et de fermeture (parenthèses, accolades, crochets, barres verticales) et d’un ou plusieurs éléments mathématiques à l’intérieur, séparés par un caractère spécifié. Exemples : (𝑥2) ; [𝑥2|𝑦2].

    Exemple :todo:image_alt_text

  • MathAccent : spécifie la fonction accent, composée d’une base et d’un signe diacritique combiné.

    Exemple : 𝑎́.

  • MathBar : spécifie la fonction barre, composée d’un argument de base et d’une barre supérieure ou inférieure.

    Exemple :todo:image_alt_text

  • MathGroupingCharacter : spécifie un symbole de regroupement au-dessus ou en dessous d’une expression, généralement pour mettre en évidence les relations entre les éléments.

    Exemple :todo:image_alt_text

Opérations mathématiques

Chaque élément et chaque expression mathématique (via MathBlock) implémente l’interface IMathElement. Elle permet d’appliquer des opérations sur la structure existante et de former des expressions plus complexes. Toutes les opérations possèdent deux jeux de paramètres : soit un [IMathElement] ou une chaîne de caractères. Les instances de la classe MathematicalText sont créées implicitement à partir des chaînes lorsqu’elles sont utilisées comme arguments. Les opérations mathématiques disponibles dans Aspose.Slides sont listées ci‑dessous.

Méthode Join

Joint un élément mathématique et forme un bloc mathématique. Exemple :

auto element1 = System::MakeObject<MathematicalText>(u"x");
    
auto element2 = System::MakeObject<MathematicalText>(u"y");

auto block = element1->Join(element2);

Méthode Divide

Crée une fraction du type spécifié avec ce numérateur et le dénominateur indiqué. Exemple :

auto numerator = System::MakeObject<MathematicalText>(u"x");
auto fraction = numerator->Divide(u"y", MathFractionTypes::Linear);

Méthode Enclose

Encadre l’élément avec les caractères spécifiés tels que des parenthèses ou tout autre caractère de cadrage.

/// <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;

Exemple :

auto delimiter = System::MakeObject<MathematicalText>(u"x")->Enclose(u'[', u']');
auto delimiter2 = System::ExplicitCast<IMathElement>(System::MakeObject<MathematicalText>(u"elem1")->Join(u"elem2"))->Enclose();

Méthode Function

Prend une fonction d’un argument en utilisant l’objet courant comme nom de fonction.

/// <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;

Exemple :

auto func = System::MakeObject<MathematicalText>(u"sin")->Function(u"x");

Méthode AsArgumentOfFunction

Prend la fonction spécifiée en utilisant l’instance courante comme argument. Vous pouvez :

Exemple :


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");

Méthodes SetSubscript, SetSuperscript, SetSubSuperscriptOnTheRight, SetSubSuperscriptOnTheLeft

Définit un indice ou un exposant. Vous pouvez définir simultanément indice et exposant du côté gauche ou droit d’un argument, mais un indice ou un exposant seul n’est pris en charge que du côté droit. L’exposant peut également être utilisé pour définir le degré mathématique d’un nombre.

Exemple :

auto script = System::MakeObject<MathematicalText>(u"y")->SetSubSuperscriptOnTheLeft(u"2x", u"3z");

Méthode Radical

Spécifie la racine mathématique du degré indiqué à partir de l’argument spécifié.

Exemple :

auto radical = System::MakeObject<MathematicalText>(u"x")->Radical(u"3");

Méthodes SetUpperLimit et SetLowerLimit

Prend la limite supérieure ou inférieure. Ici, la partie supérieure ou inférieure indique simplement la position de l’argument par rapport à la base.

Considérons l’expression :

todo:image_alt_text

Ces expressions peuvent être créées en combinant les classes MathFunction et MathLimit ainsi :

auto mathExpression = System::MakeObject<MathematicalText>(u"lim")->SetLowerLimit(u"x→∞")->Function(u"x");

Méthodes Nary et Integral

Les deux méthodes Nary et Integral créent et retournent l’opérateur n‑aire représenté par le type IMathNaryOperator. Dans la méthode Nary, l’énumération MathNaryOperatorTypes spécifie le type d’opérateur : sommation, union, etc., à l’exclusion des intégrales. Dans la méthode Integral, on utilise l’opération spécialisée Integral avec l’énumération des types d’intégrale MathIntegralTypes.

Exemple :

auto baseArg = System::MakeObject<MathematicalText>(u"x")->Join(System::MakeObject<MathematicalText>(u"dx")->ToBox());
auto integral = baseArg->Integral(MathIntegralTypes::Simple, u"0", u"1");

Méthode ToMathArray

ToMathArray place les éléments dans un tableau vertical. Si cette opération est appelée sur une instance de MathBlock, tous les éléments enfants seront placés dans le tableau retourné.

Exemple :

auto arrayFunction = System::MakeObject<MathematicalText>(u"x")->Join(u"y")->ToMathArray();

Opérations de mise en forme : Accent, Overbar, Underbar, Group, ToBorderBox, ToBox

  • Accent : définit un signe d’accent (caractère au-dessus de l’élément).
  • Overbar et Underbar : définissent une barre au-dessus ou en dessous.
  • Group : place dans un groupe à l’aide d’un caractère de groupement tel qu’une accolade inférieure ou autre.
  • ToBorderBox : place dans une boîte à bordure.
  • ToBox : place dans une boîte logique non visuelle (groupement).

Exemples :

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

Comment ajouter une équation mathématique à une diapositive PowerPoint ?

Pour ajouter une équation, créez un objet forme mathématique, qui contient automatiquement une portion mathématique. Ensuite, récupérez le MathParagraph depuis le MathPortion et ajoutez‑y des objets MathBlock.

Est‑il possible de créer des expressions mathématiques imbriquées complexes ?

Oui, Aspose.Slides permet de créer des expressions complexes en imbriquant des MathBlocks. Chaque élément implémente l’interface IMathElement, qui autorise les opérations (Join, Divide, Enclose, etc.) pour combiner les éléments.

Comment mettre à jour ou modifier une équation existante ?

Pour mettre à jour une équation, accédez aux MathBlocks existants via le MathParagraph. Ensuite, en utilisant des méthodes comme Join, Divide, Enclose, etc., modifiez les éléments de l’équation. Après les modifications, enregistrez la présentation pour appliquer les changements.