معادلات الرياضيات في باوربوينت

نظرة عامة

في باوربوينت، من الممكن كتابة معادلة رياضية أو صيغة وعرضها في العرض التقديمي. لتحقيق ذلك، يتم تمثيل الرموز الرياضية المختلفة في باوربوينت ويمكن إضافتها إلى النص أو المعادلة. لذلك، يتم استخدام مُنشئ معادلات الرياضيات في باوربوينت، والذي يساعد في إنشاء صيغ معقدة مثل:

  • كسر رياضي
  • جذري رياضي
  • دالة رياضية
  • حدود ودوال اللوغاريتم
  • عمليات N-ary
  • مصفوفة
  • مشغلين كبار
  • دوال جيب، جيب تمام

لإضافة معادلة رياضية في باوربوينت، يتم استخدام قائمة إدراج -> معادلة:

todo:image_alt_text

هذا سينشئ نصًا رياضيًا بصيغة XML يمكن عرضه في باوربوينت كما يلي:

todo:image_alt_text

يدعم باوربوينت الكثير من الرموز الرياضية لإنشاء معادلات. ومع ذلك، فإن إنشاء معادلات رياضية معقدة في باوربوينت غالبًا ما لا يعطي نتيجة جيدة ومهنية. يلجأ المستخدمون، الذين يحتاجون إلى إنشاء عروض تقديمية رياضية بشكل متكرر، إلى استخدام حلول طرف ثالث لإنشاء صيغ رياضية ذات مظهر جيد.

باستخدام Aspose.Slide API، يمكنك العمل مع المعادلات الرياضية في عروض باوربوينت برمجيًا بلغة C++. يمكنك إنشاء تعبيرات رياضية جديدة أو تعديل التعبيرات التي تم إنشاؤها سابقًا. كما أن تصدير الهياكل الرياضية إلى صور مدعوم جزئيًا.

كيفية إنشاء معادلة رياضية

تستخدم العناصر الرياضية لبناء أي تركيبات رياضية بمستوى تعشيش معين. تشكل مجموعة خطية من العناصر الرياضية كتلة رياضية ممثلة بواسطة MathBlock class. MathBlock class هي تعبير رياضي منفصل، صيغة، أو معادلة. MathPortion هي جزء رياضي، تستخدم لحفظ النص الرياضي (لا تخلطها مع Portion). MathParagraph تسمح بالتلاعب بمجموعة من كتل الرياضيات. تعتبر الفئات المذكورة أعلاه هي المفتاح للعمل مع معادلات الرياضيات في باوربوينت عبر Aspose.Slides API.

دعونا نرى كيف يمكننا إنشاء المعادلة الرياضية التالية عبر Aspose.Slides API:

todo:image_alt_text

لإضافة تعبير رياضي على الشريحة، أولاً، أضف شكلًا سيتضمن النص الرياضي:

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

بعد الإنشاء، سيتضمن الشكل بالفعل فقرة واحدة تحتوي على جزء رياضي بشكل افتراضي. تُعد MathPortion فئة تحتوي على نص رياضي داخلها. للوصول إلى المحتوى الرياضي داخل MathPortion، الإشارة إلى المتغير MathParagraph :

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

تسمح فئة MathParagraph بقراءة وإضافة وتحرير وحذف كتل الرياضيات (MathBlock)، والتي تتكون من مجموعة من العناصر الرياضية. على سبيل المثال، أنشئ كسرًا وضعه في العرض التقديمي:

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

يمثل كل عنصر رياضي فئة معينة تنفذ واجهة IMathElement . توفر هذه الواجهة العديد من الطرق لإنشاء التعبيرات الرياضية بسهولة. يمكنك إنشاء تعبير رياضي معقد تمامًا بسطر واحد من التعليمات البرمجية. على سبيل المثال، ستكون صيغة فيثاغورس على هذا النحو:

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

تُطبق عمليات الواجهة IMathElement على أي نوع من العناصر، بما في ذلك MathBlock.

مثال كامل على كود المصدر:

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

أنواع العناصر الرياضية

تتشكل التعبيرات الرياضية من تسلسلات من العناصر الرياضية. يُمثل تسلسل العناصر الرياضية بكتلة رياضية، وتشكل معلمات العناصر الرياضية هيكلًا شبيهًا بالشجرة.

هناك العديد من أنواع العناصر الرياضية التي يمكن استخدامها لبناء كتلة رياضية. يمكن تضمين كل من هذه العناصر (تجميعها) في عنصر آخر. أي أن العناصر هي في الواقع حاويات للأخرى، مكونة هيكلًا شبيهًا بالشجرة. أبسط نوع من العناصر لا يحتوي على عناصر أخرى من النص الرياضي.

كل نوع من عنصر الرياضيات ينفذ واجهة IMathElement ويتيح استخدام مجموعة مشتركة من العمليات الرياضية على أنواع مختلفة من عناصر الرياضيات.

فئة MathematicalText

تُمثل فئة MathematicalText نصًا رياضيًا - العنصر الأساسي لجميع التركيبات الرياضية. يمكن أن يمثل النص الرياضي العوامل والمشغلين والمتغيرات وأي نص خطي آخر.

مثال: 𝑎=𝑏+𝑐

فئة MathFraction

تحدد فئة MathFraction كائن الكسر، الذي يتكون من بسط ومقام مفصولين بواسطة شريط كسر. يمكن أن يكون شريط الكسر أفقيًا أو قطريًا، اعتمادًا على خصائص الكسر. يتم استخدام كائن الكسر أيضًا لتمثيل دالة الكومة، التي تضع عنصرًا فوق عنصر آخر، دون شريط كسر.

مثال:

todo:image_alt_text

فئة MathRadical

تحدد فئة MathRadical دالة الجذر (الجذر الرياضي)، وتتكون من قاعدة، ودرجة اختيارية.

مثال:

todo:image_alt_text

**فئة MathFunction **

تحدد فئة MathFunction دالة لمتغير. تحتوي على طرق: get_Name() - اسم الدالة وget_Base() - متغير الدالة.

مثال:

todo:image_alt_text

**فئة MathNaryOperator **

تحدد فئة MathNaryOperator كائن رياضي N-ary، مثل الجمع والعدد التكاملي. يتكون من مشغل، قاعدة (أو عامل)، وحدود علوية وسفلية اختيارية. من أمثلة مشغلات N-ary الجمع، الاتحاد، التقاطع، التكامل.

تتضمن هذه الفئة مشغلين بسيطين مثل الجمع، الطرح، وما إلى ذلك. يتم تمثيلها بواسطة عنصر نص واحد - MathematicalText.

مثال:

todo:image_alt_text

**فئة MathLimit **

تحدد فئة MathLimit الحد العلوي أو السفلي. تحدد كائن الحد، الذي يتكون من نص على خط الأساس ونص بحجم مصغر مباشرة أعلاه أو تحته. لا تتضمن هذه العنصر كلمة “lim”، لكنها تسمح لك بوضع النص في أعلى أو أسفل التعبير. لذا، يتم إنشاء التعبير 

todo:image_alt_text

باستخدام مجموعة من العناصر MathFunction و 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

تحدد الفئات التالية فهرسًا سفليًا أو فهرسًا علويًا. يمكنك تعيين الفقرة السفلية والعليا في نفس الوقت على الجانب الأيسر أو الأيمن من المتغير، ولكن يتم دعم الفقرة الفردية السفلية أو العليا فقط على الجانب الأيمن. يمكنك أيضًا استخدام MathSubscriptElementلتعيين درجة رياضية لرقم.

مثال:

todo:image_alt_text

**فئة MathMatrix **

تحدد فئة MathMatrix كائن المصفوفة، الذي يتكون من عناصر طفلة مرتبة في صفوف وأعمدة واحدة أو أكثر. من المهم ملاحظة أن المصفوفات لا تحتوي على فواصل مدمجة. لوضع المصفوفة في الأقواس، يجب عليك استخدام كائن الفاصل - IMathDelimiter. يمكن استخدام معاملات فارغة لإنشاء فراغات في المصفوفات.

مثال:

todo:image_alt_text

فئة MathArray

تحدد فئة MathArray مصفوفة عمودية من المعادلات أو أي كائنات رياضية.

مثال:

todo:image_alt_text

تنسيق العناصر الرياضية

  • MathBorderBox class: يرسم حدًا مستطيلًا أو شيء آخر حول IMathElement.

    مثال: todo:image_alt_text

  • MathBox class: تحدد التعبئة المنطقية للعنصر الرياضي. على سبيل المثال، يمكن أن يعمل كائن مغلق كمحاكي عامل مع أو بدون نقطة المحاذاة، أو يعمل كنقطة كسر سطر، أو يتم تجميعه بحيث لا يسمح بكسور الأسطر ضمنه. على سبيل المثال، يجب أن يتم تغليف عامل “==” لمنع كسور الأسطر.

  • MathDelimiter class: تحدد كائن الفاصل، الذي يتكون من شخصيات فتح وإغلاق (مثل الأقواس، والأقواس المعقوفة، والفراغات العمودية)، وواحد أو أكثر من العناصر الرياضية بداخله، مفصولة بشخصية محددة. أمثلة: (𝑥2); [𝑥2|𝑦2].

    مثال: todo:image_alt_text

  • MathAccent class: تحدد دالة اللكنة، التي تتكون من قاعدة وعلامة diacritical مدمجة.

    مثال: 𝑎́.

  • MathBar class: تحدد دالة الشريط، التي تتكون من متغير أساسي وشريط فوق أو تحت.

    مثال: todo:image_alt_text

  • MathGroupingCharacter class: تحدد رمز التجميع فوق أو أسفل تعبير، عادة لتسليط الضوء على العلاقات بين العناصر.

    مثال: todo:image_alt_text

العمليات الرياضية

كل عنصر رياضي وتعبير رياضي (عبر MathBlock) ينفذ واجهة IMathElement interface. يسمح لك باستخدام العمليات على الهيكل الموجود وتشكيل تعبيرات رياضية أكثر تعقيدًا. تحتوي جميع العمليات على مجموعتي معلمات: إما IMathElement أو سلسلة كوسائط. يتم إنشاء مثيلات فئة MathematicalText ضمنيًا من السلاسل المحددة عندما تستخدم وسائط السلاسل. العمليات الرياضية المتاحة في Aspose.Slides مدرجة أدناه.

طريقة Join

يجمع عنصرًا رياضيًا ويشكل كتلة رياضية. على سبيل المثال:

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

auto block = element1->Join(element2);

طريقة Divide

ينشئ كسراً من النوع المحدد مع هذا البسط والمقام المحددين. على سبيل المثال:

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

طريقة Enclose

يُغلف العنصر في شخصيات محددة مثل الأقواس أو شخصية أخرى كإطار.

/// <summary>
/// يختار عنصر رياضي في الأقواس
/// </summary>
virtual System::SharedPtr<IMathDelimiter> Enclose() = 0;

/// <summary>
/// يختار هذا العنصر في شخصيات محددة مثل الأقواس أو شخصيات أخرى كإطار
/// </summary>
virtual System::SharedPtr<IMathDelimiter> Enclose(char16_t beginningCharacter, char16_t endingCharacter) = 0;

على سبيل المثال:

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

تأخذ دالة لمتغير باستخدام الكائن الحالي كاسم الدالة.

/// <summary>
/// تأخذ دالة لمتغير باستخدام هذه المثيل كاسم الدالة
/// </summary>
/// <param name="functionArgument">متغير الدالة</param>

virtual System::SharedPtr<IMathFunction> Function(System::SharedPtr<IMathElement> functionArgument) = 0;

virtual System::SharedPtr<IMathFunction> Function(System::String functionArgument) = 0;

على سبيل المثال:

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

طريقة AsArgumentOfFunction

تأخذ الدالة المحددة باستخدام المثيل الحالي كحجة. يمكنك:

  • تحديد سلسلة كاسم الدالة، على سبيل المثال “cos”.
  • اختيار واحدة من القيم المحددة مسبقًا من التعدادات MathFunctionsOfOneArgument أو MathFunctionsOfTwoArguments، على سبيل المثال MathFunctionsOfOneArgument.ArcSin.
  • اختيار مثيل من IMathElement.

على سبيل المثال:


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

تحدد الفقرة السفلية والفقرات العليا. يمكنك تعيين الفقرة السفلية والعليا في نفس الوقت على الجانب الأيسر أو الأيمن من المتغير، ولكن يتم دعم الفقرة الفردية السفلية أو العليا فقط على الجانب الأيمن. يمكن استخدام Superscript أيضًا لتعيين الدرجة الرياضية لرقم.

مثال:

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

طريقة Radical

تحدد الجذر الرياضي من الدرجة المعطاة من المتغير المحدد.

مثال:

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

طرق SetUpperLimit و SetLowerLimit

تؤخذ الحد العلوي أو السفلي. هنا، تشير العلوية والسفلية ببساطة إلى موقع الحجة بالنسبة للقاعدة.

دعونا نعتبر تعبيرًا: 

todo:image_alt_text

يمكن إنشاء مثل هذه التعبيرات من خلال مجموعة من الفئات MathFunction و MathLimit، وعمليات IMathElement على النحو التالي:

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

طرق Nary و Integral

تُنشئ كل من Nary و Integral طرق وتُعيد مشغل N-ary الممثل من قبل نوع IMathNaryOperator . في طريقة Nary، تحدد التعداد MathNaryOperatorTypes نوع المشغل: الجمع، الاتحاد، إلخ، دون تضمين التكامل. في طريقة التكامل، هناك العملية المتخصصة التكامل مع التعداد من الأنواع التكاملية MathIntegralTypes

مثال:

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

ToMathArray تضع العناصر في مصفوفة عمودية. إذا تم استدعاء هذه العملية على مثيل MathBlock، سيتم وضع جميع العناصر الفرعية في المصفوفة المعادة.

مثال:

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

عمليات التنسيق: Accent و Overbar و Underbar و Group و ToBorderBox و ToBox

  • تحدد طريقة Accent علامة اللكنة (حرف على قمة العنصر).
  • تحدد طرائق Overbar و Underbar شريطًا في الأعلى أو الأسفل.
  • تحدد طريقة Group تضع في مجموعة باستخدام رمز التجميع مثل قوس أسفل أو آخر.
  • تحدد طريقة ToBorderBox تضع في صندوق حد.
  • تحدد طريقة ToBox تضع في صندوق غير مرئي (تجميع منطقي).

أمثلة:

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