إضافة معادلات رياضية إلى عروض PowerPoint التقديمية في PHP
نظرة عامة
في PowerPoint، يمكن كتابة معادلة أو صيغة رياضية وعرضها في العرض التقديمي. للقيام بذلك، يتم تمثيل رموز رياضية مختلفة في PowerPoint ويمكن إضافتها إلى النص أو المعادلة. لاستخدام ذلك، يتم الاعتماد على مُنشئ المعادلات الرياضية في PowerPoint، الذي يساعد في إنشاء صيغ معقدة مثل:
- كسر رياضي
- جذر رياضي
- دالة رياضية
- حدود ودوال اللوغاريتم
- عمليات N-ary
- مصفوفة
- عوامل كبيرة
- دوال الجيب والجيب التمام
لإضافة معادلة رياضية في PowerPoint، يتم استخدام قائمة Insert->Equation:

سيؤدي ذلك إلى إنشاء نص رياضي بصيغة XML يمكن عرضه في PowerPoint كما يلي:

يدعم PowerPoint عددًا كبيرًا من الرموز الرياضية لإنشاء المعادلات. ومع ذلك، فإن إنشاء معادلات رياضية معقدة في PowerPoint غالبًا لا ينتج عنه مظهر جيد ومهني. المستخدمون الذين يحتاجون إلى إنشاء عروض تقديمية رياضية بشكل متكرر يلجؤون إلى حلول الطرف الثالث للحصول على صيغ رياضية ذات مظهر جيد.
باستخدام Aspose.Slide API، يمكنك العمل مع المعادلات الرياضية في عروض PowerPoint برمجيًا بلغة C#. إنشاء تعابير رياضية جديدة أو تعديل التعابير الموجودة. كما يتم دعم تصدير البُنى الرياضية إلى صور جزئيًا.
كيفية إنشاء معادلة رياضية
تُستخدم العناصر الرياضية لبناء أي تركيبات رياضية مهما كان مستوى تعشيقها. تُشكِّل مجموعة خطية من العناصر الرياضية كتلة رياضية تمثلها الفئة MathBlock. فئة MathBlock هي في الأساس تعبير رياضي منفصل أو صيغة أو معادلة. فئة MathPortion هي جزء رياضي يُستخدم لحمل النص الرياضي (لا تُخلط مع Portion). فئة MathParagraph تُتيح التعامل مع مجموعة من كتل الرياضيات. الفئات المذكورة أعلاه هي المفتاح للعمل مع معادلات PowerPoint الرياضية عبر Aspose.Slides API.
دعنا نرى كيف يمكننا إنشاء المعادلة الرياضية التالية باستخدام Aspose.Slides API:

لإضافة تعبير رياضي إلى الشريحة، أولاً أضف شكلًا سيحتوي على النص الرياضي:
$pres = new Presentation();
try {
$mathShape = $pres->getSlides()->get_Item(0)->getShapes()->addMathShape(0, 0, 720, 150);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
بعد الإنشاء، سيحتوي الشكل تلقائيًا على فقرة واحدة مع جزء رياضي بصورة افتراضية. فئة MathPortion هي الجزء الذي يحتوي على النص الرياضي. للوصول إلى المحتوى الرياضي داخل MathPortion، راجع المتغيّر MathParagraph:
$mathParagraph = $mathShape->getTextFrame()->getParagraphs()->get_Item(0)->getPortions()->get_Item(0)->getMathParagraph();
$fraction = new MathematicalText("x")->divide("y");
$mathParagraph->add(new MathBlock($fraction));
$mathBlock = new MathematicalText("c")->setSuperscript("2")->join("=")->join(new MathematicalText("a")->setSuperscript("2"))->join("+")->join(new MathematicalText("b")->setSuperscript("2"));
$pres = new Presentation();
try {
$mathShape = $pres->getSlides()->get_Item(0)->getShapes()->addMathShape(0, 0, 720, 150);
$mathParagraph = $mathShape->getTextFrame()->getParagraphs()->get_Item(0)->getPortions()->get_Item(0)->getMathParagraph();
$fraction = new MathematicalText("x")->divide("y");
$mathParagraph->add(new MathBlock($fraction));
$mathBlock = new MathematicalText("c")->setSuperscript("2")->join("=")->join(new MathematicalText("a")->setSuperscript("2"))->join("+")->join(new MathematicalText("b")->setSuperscript("2"));
$mathParagraph->add($mathBlock);
$pres->save("math.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
أنواع العناصر الرياضية
تُشكل التعابير الرياضية من سلسلة من العناصر الرياضية. تُمثَّل سلسلة العناصر الرياضية بكتلة رياضية، وتكوّن وسائط العناصر شجرة تعشيق.
هناك العديد من أنواع العناصر الرياضية التي يمكن استخدامها لبناء كتلة رياضية. كل من هذه العناصر يمكن تضمينه (تجميعه) داخل عنصر آخر. أي أن العناصر في الأساس حاويات لعناصر أخرى، مُشكِّلةً بنية شجرية. أبسط نوع من العناصر هو ذلك الذي لا يحتوي على عناصر نصية رياضية أخرى.
كل نوع من عناصر الرياضيات يُطبق فئة MathElement، مما يسمح باستخدام مجموعة مشتركة من عمليات الرياضيات على أنواع مختلفة من العناصر.
فئة MathematicalText
تمثل فئة MathematicalText نصًا رياضيًا — العنصر الأساسي لجميع التركيبات الرياضية. يمكن أن يمثل النص الرياضي المعاملات والمشغلات والمتغيّرات وأي نص خطّي آخر.
مثال: 𝑎=𝑏+𝑐
فئة MathFraction
فئة MathFraction تُحدد كائن الكسر، المكوّن من البسط والمقام مفصولين بشريط الكسر. يمكن أن يكون شريط الكسر أفقيًا أو مائلًا، حسب خصائص الكسر. يُستخدم كائن الكسر أيضًا لتمثيل دالة الرفّ، التي تضع عنصرًا فوق آخر دون شريط كسر.
مثال:

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

فئة MathFunction
فئة MathFunction تُحدد دالة ذات معامل. تحتوي على الخصائص: getName — اسم الدالة وgetBase — معامل الدالة.
مثال:

فئة MathNaryOperator
فئة MathNaryOperator تُحدد كائنًا رياضيًا N-ary مثل الجمع والتكامل. يتكوّن من مشغل، قاعدة (أو معامل)، وحدود علوية وسفلية اختيارية. أمثلة على المشغلات N-ary هي الجمع، الاتحاد، التقاطع، والتكامل.
هذه الفئة لا تشمل المشغلات البسيطة مثل الجمع أو الطرح؛ يتم تمثيلها بعنصر نصّي واحد — MathematicalText.
مثال:

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

باستخدام مزيج من MathFunction وMathLimit كما في المثال التالي:
$funcName = new MathLimit(new MathematicalText("lim"), new MathematicalText("𝑥→∞"));
$mathFunc = new MathFunction($funcName, new MathematicalText("𝑥"));
فئات MathSubscriptElement, MathSuperscriptElement, MathRightSubSuperscriptElement, MathLeftSubSuperscriptElement
- MathSubscriptElement
- MathSuperscriptElement
- MathRightSubSuperscriptElement
- MathLeftSubSuperscriptElement
تُحدِّد الفئات السابقة موضع الفهرس السفلي أو العلوي. يمكنك تعيين كل من الفهرس السفلي والعلوي في آن واحد على الجانب الأيسر أو الأيمن للمعامل، لكن يُدعم الفهرس الواحد (سوّاء سفلي أو علوي) على الجانب الأيمن فقط. يمكن أيضًا استخدام MathSubscriptElement لضبط درجة الجذر الرياضي للعدد.
مثال:

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

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

تنسيق العناصر الرياضية
-
فئة MathBorderBox: تُرسم حدًا مستطيلاً أو شكلًا آخر حول
MathElement.مثال:

-
فئة MathBox: تُحدِّد تغليفًا منطقيًا للعنصر الرياضي. على سبيل المثال، يمكن أن يُستخدم الصندوق كمعوض للمشغل مع أو بدون نقطة محاذاة، أو لتحديد نقطة كسر سطر، أو لتجميعه بحيث لا يُسمح بكسر السطر داخله. مثال، يجب تغليف المشغل “==” لمنع كسر السطر.
-
فئة MathDelimiter: تُحدِّد كائن المحدد، المكوّن من حروف افتتاحية وإغلاقية (مثل الأقواس، الأقواس المعقوفة، القوسين المربعات، أو الشرطيات العمودية)، وعنصر أو أكثر داخلها مفصولين بحرف محدد. أمثلة: (𝑥2); [𝑥2|𝑦2].
مثال:

-
فئة MathAccent: تُحدِّد دالة اللكنة، المكوّنة من قاعدة وعلامة صرفية مُدمجة.
مثال: 𝑎́.
-
فئة MathBar: تُحدِّد دالة الشريط، المكوّنة من معامل أساسي وشريط فوق أو تحت.
مثال:

-
فئة MathGroupingCharacter: تُحدِّد رمز تجميع فوق أو تحت التعبير، عادةً لتسليط الضوء على العلاقات بين العناصر.
مثال:

العمليات الرياضية
كل عنصر أو تعبير رياضي (عبر MathBlock) يرث فئة MathElement. يسمح ذلك باستخدام عمليات على البنية الحالية وتكوين تعابير رياضية أكثر تعقيدًا. جميع العمليات تتقبل مجموعتين من المعاملات: إما MathElement أو سلسلة نصية. تُنشَأ مثيلات فئة MathematicalText ضمنيًا من السلاسل النصية عند استخدامها كمعاملات. تُدرج عمليات الرياضيات المتاحة في Aspose.Slides أدناه.
طريقة Join
join(String)join(MathElement)
تنضم عنصرًا رياضيًا وتشكل كتلة رياضية. مثال:
$element1 = new MathematicalText("x");
$element2 = new MathematicalText("y");
$block = $element1->join($element2);
طريقة Divide
divide(String)divide(MathElement)divide(String, MathFractionTypes)divide(MathElement, MathFractionTypes)
تنشئ كسرًا من النوع المحدد باستخدام هذا البسط والمقام المحدد. مثال:
$numerator = new MathematicalText("x");
$fraction = $numerator->divide("y", MathFractionTypes->Linear);
طريقة Enclose
enclose()enclose(Char, Char)
تحيط العنصر بحروف محددة مثل الأقواس أو أي حرف آخر كإطار.
مثال:
$delimiter = new MathematicalText("x")->enclose('[', ']');
$delimiter2 = new MathematicalText("elem1")->join("elem2")->enclose();
طريقة Function
function(String)function(MathElement)
تُنشئ دالة لمعامل باستخدام الكائن الحالي كاسم للدالة.
مثال:
$func = new MathematicalText("sin")->function("x");
طريقة AsArgumentOfFunction
asArgumentOfFunction(String)asArgumentOfFunction(MathElement)asArgumentOfFunction(MathFunctionsOfOneArgument)asArgumentOfFunction(MathFunctionsOfTwoArguments, MathElement)asArgumentOfFunction(MathFunctionsOfTwoArguments, String)
تُعيّن الدالة المحددة باستخدام المثيل الحالي كمعامل. يمكنك:
- تحديد سلسلة كاسم للدالة، مثل “cos”.
- اختيار إحدى القيم المُعرّفة مسبقًا في تعداد MathFunctionsOfOneArgument أو MathFunctionsOfTwoArguments، مثل MathFunctionsOfOneArgument.ArcSin.
- اختيار مثيل
MathElement.
مثال:
$funcName = new MathLimit(new MathematicalText("lim"), new MathematicalText("𝑛→∞"));
$func1 = new MathematicalText("2x")->asArgumentOfFunction($funcName);
$func2 = new MathematicalText("x")->asArgumentOfFunction("sin");
$func3 = new MathematicalText("x")->asArgumentOfFunction(MathFunctionsOfOneArgument->Sin);
$func4 = new MathematicalText("x")->asArgumentOfFunction(MathFunctionsOfTwoArguments->Log, "3");
طرق SetSubscript, SetSuperscript, SetSubSuperscriptOnTheRight, SetSubSuperscriptOnTheLeft
setSubscript(String)setSubscript(MathElement)setSuperscript(String)setSuperscript(MathElement)setSubSuperscriptOnTheRight(String, String)setSubSuperscriptOnTheRight(MathElement, MathElement)setSubSuperscriptOnTheLeft(String, String)setSubSuperscriptOnTheLeft(MathElement, MathElement)
تُعيّن الفهرس السفلي والعلوي. يمكنك تعيين الفهرس السفلي والعلوي معًا على اليمين أو اليسار، لكن الفهرس المفرد يُدعم فقط على اليمين. يمكن أيضًا استخدام الـ Superscript لتعيين درجة عدد رياضية.
مثال:
$script = new MathematicalText("y")->setSubSuperscriptOnTheLeft("2x", "3z");
طريقة Radical
radical(String)radical(MathElement)
تُحدِّد الجذر الرياضي للدرجة المعطاة من المعامل المحدد.
مثال:
$radical = new MathematicalText("x")->radical("3");
طرق SetUpperLimit و SetLowerLimit
setUpperLimit(String)setUpperLimit(MathElement)setLowerLimit(String)setLowerLimit(MathElement)
تُعيّن الحد العلوي أو السفلي. هنا، يُشير الحد العلوي والسفلي إلى موضع المعامل بالنسبة للقاعدة.
لننظر إلى التعبير التالي:

يمكن إنشاء مثل هذه التعابير عبر الجمع بين فئتي MathFunction وMathLimit والعمليات على MathElement كما يلي:
$mathExpression = new MathematicalText("lim")->setLowerLimit("x→∞")->function("x");
طرق Nary و Integral
nary(MathNaryOperatorTypes, MathElement, MathElementnary(MathNaryOperatorTypes, String, String)integral(MathIntegralTypes)integral(MathIntegralTypes, MathElement, MathElement)integral(MathIntegralTypes, String, String)integral(MathIntegralTypes, MathElement, MathElement, MathLimitLocations)integral(MathIntegralTypes, String, String, MathLimitLocations)
تُنشئ كلًّا من طريقتي nary و integral وتُعيد كائن المشغل N-ary المُمَثَّل بالفئة MathNaryOperator. في طريقة nary، يُحدِّد تعداد MathNaryOperatorTypes نوع المشغل: جمع، اتحاد، إلخ، ولا تشمل التكاملات. في طريقة Integral، توجد عملية متخصصة للتكامل باستخدام تعداد أنواع التكامل MathIntegralTypes.
مثال:
$baseArg = new MathematicalText("x")->join(new MathematicalText("dx")->toBox());
$integral = $baseArg->integral(MathIntegralTypes->Simple, "0", "1");
طريقة ToMathArray
MathElement.toMathArray تضع العناصر في مصفوفة رأسية. إذا تم استدعاء هذه العملية على مثيل MathBlock، فستُوضع جميع العناصر الفرعية في المصفوفة المُعيدَة.
مثال:
$arrayFunction = new MathematicalText("x")->join("y")->toMathArray();
عمليات التنسيق: Accent, Overbar, Underbar, Group, ToBorderBox, ToBox
- طريقة
accentتُضيف علامة إكسنت على العنصر. - طريقتا
overbarوunderbarتُضيفان شريطًا أعلى أو أسفل العنصر. - طريقة
groupتُضع العنصر في مجموعة باستخدام رمز تجميع مثل القوس المائل السفلي أو غيره. - طريقة
toBorderBoxتُضع العنصر في حدّ مربع. - طريقة
toBoxتُضع العنصر في صندوق غير مرئي (تجميع منطقي).
أمثلة:
$accent = new MathematicalText("x")->accent('̃');
$bar = new MathematicalText("x")->overbar();
$groupChr = new MathematicalText("x")->join("y")->join("z")->group('⏡', MathTopBotPositions::Bottom, MathTopBotPositions::Top);
$borderBox = new MathematicalText("x+y+z")->toBorderBox();
$boxedOperator = new MathematicalText(":=")->toBox();
الأسئلة الشائعة
كيف يمكنني إضافة معادلة رياضية إلى شريحة PowerPoint؟
لإضافة معادلة رياضية، عليك إنشاء كائن شكل رياضي، والذي يحتوي تلقائيًا على جزء رياضي. بعد ذلك، استرجع MathParagraph من MathPortion وأضف كائنات MathBlock إليه.
هل يمكن إنشاء تعابير رياضية مُعقَّدة متشابكة؟
نعم، يسمح Aspose.Slides بإنشاء تعابير رياضية معقدة عبر تعشيق MathBlocks. كل عنصر رياضي يتيح لك تطبيق عمليات (Join, Divide, Enclose, …) لدمج العناصر في هياكل أكثر تعقيدًا.
كيف يمكنني تحديث أو تعديل معادلة رياضية موجودة؟
لتحديث المعادلة، عليك الوصول إلى MathBlocks الحالية عبر MathParagraph. ثم باستخدام طرق مثل Join, Divide, Enclose وغيرها، يمكنك تعديل عناصر المعادلة الفردية. بعد التعديل، احفظ العرض التقديمي لتطبيق التغييرات.