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

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

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

لإضافة تعبير رياضي إلى الشريحة، ابدأ بإضافة شكل يحتوي على النص الرياضي:
Presentation pres = new Presentation();
try {
IAutoShape mathShape = pres.getSlides().get_Item(0).getShapes().addMathShape(0, 0, 720, 150);
} finally {
if (pres != null) pres.dispose();
}
بعد الإنشاء، سيحتوي الشكل تلقائيًا على فقرة واحدة مع جزء رياضي بشكل افتراضي. فئة MathPortion هي الجزء الذي يحتوي على نص رياضي داخل. للوصول إلى المحتوى الرياضي داخل MathPortion، استخدم المتغير MathParagraph كالتالي:
IMathParagraph mathParagraph = ((MathPortion)mathShape.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0)).getMathParagraph();
تسمح فئة MathParagraph بقراءة وإضافة وتعديل وحذف كتل الرياضيات (MathBlock)، والتي تتكون من مجموعة من العناصر الرياضية. على سبيل المثال، لإنشاء كسر ووضعه في العرض:
IMathFraction fraction = new MathematicalText("x").divide("y");
mathParagraph.add(new MathBlock(fraction));
كل عنصر رياضي يُمثَّل بفئة تنفِّذ واجهة IMathElement. توفر هذه الواجهة العديد من الطرق لإنشاء تعبيرات رياضية بسهولة. يمكنك إنشاء تعبير رياضي معقد بخط واحد من الشيفرة. على سبيل المثال، مبرهنة فيثاغورس تُكتب هكذا:
IMathBlock mathBlock = new MathematicalText("c")
.setSuperscript("2")
.join("=")
.join(new MathematicalText("a").setSuperscript("2"))
.join("+")
.join(new MathematicalText("b").setSuperscript("2"));
تُنفَّذ عمليات الواجهة IMathElement في أي نوع من العناصر، بما في ذلك MathBlock.
العينة الكاملة للشيفرة:
Presentation pres = new Presentation();
try {
IAutoShape mathShape = pres.getSlides().get_Item(0).getShapes().addMathShape(0, 0, 720, 150);
IMathParagraph mathParagraph = ((MathPortion)mathShape.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0)).getMathParagraph();
IMathFraction fraction = new MathematicalText("x").divide("y");
mathParagraph.add(new MathBlock(fraction));
IMathBlock 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 (pres != null) pres.dispose();
}
أنواع العناصر الرياضية
تُكوَّن التعبيرات الرياضية من تسلسلات من العناصر الرياضية. يُمثَّل تسلسل العناصر الرياضية بكتلة رياضية، وتُشكل وسائط العناصر شجرة تعشيق.
هناك العديد من أنواع العناصر الرياضية التي يمكن استخدامها لإنشاء كتلة رياضية. يمكن تضمين كل عنصر داخل عنصر آخر؛ أي أن العناصر هي حاويات لأخرى، مكوِّنةً بنية شجرية. أبسط نوع من العناصر لا يحتوي على عناصر نصية أخرى.
كل نوع من العناصر الرياضية ينفّذ واجهة IMathElement، مما يتيح استخدام مجموعة مشتركة من عمليات الرياضيات على أنواع مختلفة من العناصر.
فئة MathematicalText
تمثل فئة MathematicalText نصًا رياضيًا – العنصر الأساسي لكل التركيبات الرياضية. يمكن أن يمثل النص الرياضي عوامل، مشغلات، متغيّرات، أو أي نص خطي آخر.
مثال: 𝑎=𝑏+𝑐
فئة MathFraction
تحدد فئة MathFraction كائن الكسر، المتكوّن من بسط ومقام مفصولين بشريط كسر. يمكن أن يكون الشريط أفقيًا أو قطريًا بحسب خصائص الكسر. يُستَخدم كائن الكسر أيضًا لتمثيل وظيفة المكدس التي تضع عنصرًا فوق آخر دون شريط كسر.
مثال:

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

فئة MathFunction
تحدد فئة MathFunction دالة لوسيط. تحتوي على خاصيتين: getName – اسم الدالة، وgetBase – وسيط الدالة.
مثال:

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

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

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

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

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

تنسيق العناصر الرياضية
-
فئة MathBorderBox: ترسم إطارًا مستطيلًا أو غيره حول IMathElement.
مثال:

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

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

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

العمليات الرياضية
كل عنصر رياضي وتعبير رياضي (عبر MathBlock) ينفّذ واجهة IMathElement. تسمح لك باستخدام عمليات على البنية الحالية وتكوين تعبيرات رياضية أكثر تعقيدًا. جميع العمليات لها مجموعتا معاملات: إما [IMathElement] أو سلسلة نصية كوسيطات. يتم إنشاء كائنات فئة [MathematicalText] ضمنيًا من السلاسل النصية عند استخدامها.
طريقة Join
تجمع عنصرًا رياضيًا وتشكّل كتلة رياضية. مثال:
IMathElement element1 = new MathematicalText("x");
IMathElement element2 = new MathematicalText("y");
IMathBlock block = element1.join(element2);
طريقة Divide
- divide(String)
- divide(IMathElement)
- divide(String, MathFractionTypes)
- divide(IMathElement, MathFractionTypes)
تنشئ كسرًا من النوع المحدد باستخدام هذا البسط والمقام المحدد. مثال:
IMathElement numerator = new MathematicalText("x");
IMathFraction fraction = numerator.divide("y", MathFractionTypes.Linear);
طريقة Enclose
تحيط العنصر بحروف محددة مثل الأقواس أو أي حرف آخر كإطار.
/**
* <p>
* Enclose a math element in parenthesis
* </p>
*/
public IMathDelimiter enclose();
/**
* <p>
* Encloses this element in specified characters such as parenthesis or another characters as framing
* </p>
*/
public IMathDelimiter enclose(char beginningCharacter, char endingCharacter);
مثال:
IMathDelimiter delimiter = new MathematicalText("x").enclose('[', ']');
IMathDelimiter delimiter2 = new MathematicalText("elem1").join("elem2").enclose();
طريقة Function
تُنشئ دالة لوسيطة باستخدام الكائن الحالي كاسم الدالة.
/**
* <p>
* Takes a function of an argument using this instance as the function name
* </p>
*/
public IMathFunction function(IMathElement functionArgument);
/**
* <p>
* Takes a function of an argument using this instance as the function name
* </p>
*/
public IMathFunction function(String functionArgument);
مثال:
IMathFunction func = new MathematicalText("sin").function("x");
طريقة AsArgumentOfFunction
- asArgumentOfFunction(String)
- asArgumentOfFunction(IMathElement)
- asArgumentOfFunction(MathFunctionsOfOneArgument)
- asArgumentOfFunction(MathFunctionsOfTwoArguments, IMathElement)
- asArgumentOfFunction(MathFunctionsOfTwoArguments, String)
تُمرِّر الدالة المحددة باستخدام الكائن الحالي كوسيطة. يمكنك:
- تحديد سلسلة كاسم الدالة، مثل “cos”.
- اختيار أحد القيم المعرَّفة مسبقًا في تعداد MathFunctionsOfOneArgument أو MathFunctionsOfTwoArguments، مثل MathFunctionsOfOneArgument.ArcSin.
- اختيار مثال من IMathElement.
مثال:
MathLimit funcName = new MathLimit(new MathematicalText("lim"), new MathematicalText("𝑛→∞"));
IMathFunction func1 = new MathematicalText("2x").asArgumentOfFunction(funcName);
IMathFunction func2 = new MathematicalText("x").asArgumentOfFunction("sin");
IMathFunction func3 = new MathematicalText("x").asArgumentOfFunction(MathFunctionsOfOneArgument.Sin);
IMathFunction func4 = new MathematicalText("x").asArgumentOfFunction(MathFunctionsOfTwoArguments.Log, "3");
طرق SetSubscript, SetSuperscript, SetSubSuperscriptOnTheRight, SetSubSuperscriptOnTheLeft
- setSubscript(String)
- setSubscript(IMathElement)
- setSuperscript(String)
- setSuperscript(IMathElement)
- setSubSuperscriptOnTheRight(String, String)
- setSubSuperscriptOnTheRight(IMathElement, IMathElement)
- setSubSuperscriptOnTheLeft(String, String)
- setSubSuperscriptOnTheLeft(IMathElement, IMathElement)
تُعيّن المؤشرات السفلى والعلوية. يمكنك ضبط المؤشرين معًا على اليمين أو اليسار من الوسيط، لكن يُدعم المؤشر الفردي فقط على اليمين. يمكن أيضًا استخدام Superscript لتعيين درجة رياضية لعدد ما.
مثال:
IMathLeftSubSuperscriptElement script = new MathematicalText("y").setSubSuperscriptOnTheLeft("2x", "3z");
طريقة Radical
تُحدد الجذر الرياضي للدرجة المحددة من الوسيط المحدد.
مثال:
IMathRadical radical = new MathematicalText("x").radical("3");
طرق SetUpperLimit و SetLowerLimit
تُحدِّد الحد الأعلى أو السفلي. يشير الحد الأعلى أو السفلي ببساطة إلى موضع الوسيط بالنسبة للقاعدة.
لنفترض التعبير التالي:

يمكن إنشاء مثل هذا التعبير عبر دمج فئتي MathFunction وMathLimit واستخدام عمليات IMathElement كما يلي:
IMathFunction mathExpression = new MathematicalText("lim").setLowerLimit("x→∞").function("x");
طرق Nary و Integral
- 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)
كلاً من طريقتي nary و integral تُنشئ وتُعيد مُشغِل N-ary من نوع IMathNaryOperator. في طريقة nary، يُحدِّد تعداد MathNaryOperatorTypes نوع المشغّل: جمع، اتحاد، إلخ، دون تضمين التكاملات. في طريقة Integral، يُستخدم نوع تكامل محدد عبر تعداد MathIntegralTypes.
مثال:
IMathBlock baseArg = new MathematicalText("x").join(new MathematicalText("dx").toBox());
IMathNaryOperator integral = baseArg.integral(MathIntegralTypes.Simple, "0", "1");
طريقة ToMathArray
تُحوِّل طريقة toMathArray العناصر إلى صف عمودي. إذا استُدعيّت على كائن MathBlock، تُوضع جميع العناصر الفرعية في المصفوفة المرجعة.
مثال:
IMathArray arrayFunction = new MathematicalText("x").join("y").toMathArray();
عمليات التنسيق: Accent, Overbar, Underbar, Group, ToBorderBox, ToBox
- طريقة accent تُضيف علامة تشديد (حرف فوق العنصر).
- طريقتا overbar وunderbar تُضيفان شريطًا فوق أو تحت العنصر.
- طريقة group تُضع العنصر في مجموعة باستخدام رمز تجميع مثل القوس المعقوف السفلي أو غيره.
- طريقة toBorderBox تُضع العنصر في إطار حدود.
- طريقة toBox تُضع العنصر في صندوق غير مرئي (تجميع منطقي).
أمثلة:
IMathAccent accent = new MathematicalText("x").accent('\u0303');
IMathBar bar = new MathematicalText("x").overbar();
IMathGroupingCharacter groupChr = new MathematicalText("x").join("y").join("z").group('\u23E1', MathTopBotPositions.Bottom, MathTopBotPositions.Top);
IMathBorderBox borderBox = new MathematicalText("x+y+z").toBorderBox();
IMathBox boxedOperator = new MathematicalText(":=").toBox();
الأسئلة الشائعة
كيف يمكن إضافة معادلة رياضية إلى شريحة PowerPoint؟
لإضافة معادلة رياضية، تحتاج إلى إنشاء كائن شكل رياضي يحتوي تلقائيًا على جزء رياضي. بعد ذلك، استرجع MathParagraph من MathPortion وأضف كائنات MathBlock إليه.
هل يمكن إنشاء تعبيرات رياضية متداخلة معقدة؟
نعم، تسمح Aspose.Slides بإنشاء تعبيرات رياضية معقدة عبر تعشيق MathBlocks. كل عنصر رياضي يُنفّذ واجهة IMathElement التي تتيح لك تطبيق عمليات (Join، Divide، Enclose، إلخ) لدمج العناصر في بنى أكثر تعقيدًا.
كيف يمكن تحديث أو تعديل معادلة رياضية موجودة؟
لتحديث معادلة، تحتاج إلى الوصول إلى MathBlocks الحالية عبر MathParagraph. ثم باستخدام طرق مثل Join، Divide، Enclose وغيرها، يمكنك تعديل عناصر المعادلة الفردية. بعد التحرير، احفظ العرض لتطبيق التغييرات.