إضافة معادلات رياضية إلى عروض PowerPoint على Android
نظرة عامة
في 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:

لإضافة تعبير رياضي إلى الشريحة، أولًا أضف شكلًا سيحتوي على النص الرياضي:
Presentation pres = new Presentation();
try {
IAutoShape mathShape = pres.getSlides().get_Item(0).getShapes().addMathShape(0, 0, 720, 150);
} finally {
if (pres != null) pres.dispose();
}
بعد الإنشاء، سيحتوي الشكل بالفعل على فقرة واحدة بها Portion رياضي بشكل افتراضي. تمثل فئة MathPortion Portion يحتوي على نص رياضي. للوصول إلى المحتوى الرياضي داخل 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: الجمع، الاتحاد، التقاطع، التكامل.
هذه الفئة لا تشمل المشغلات البسيطة مثل الجمع أو الطرح؛ تلك تُمثَّل بعنصر نصي واحد – 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 ضمنيًا من السلاسل عند استخدام المعاملات النصية. تُدرج عمليات الرياضيات المتاحة في Aspose.Slides أدناه.
طريقة 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. تحدد عددية MathNaryOperatorTypes نوع المشغل: جمع، اتحاد، إلخ، ولا تشمل التكاملات. في طريقة Integral، هناك عملية مخصصة للتكامل مع تعداد أنواع التكامل MathIntegralTypes.
مثال:
IMathBlock baseArg = new MathematicalText("x").join(new MathematicalText("dx").toBox());
IMathNaryOperator integral = baseArg.integral(MathIntegralTypes.Simple, "0", "1");
طريقة 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؟
لإضافة معادلة رياضية، تحتاج إلى إنشاء كائن شكل رياضي، الذي يحتوي تلقائيًا على Portion رياضي. ثم تستخرج MathParagraph من MathPortion وتضيف كائنات MathBlock إليها.
هل يمكن إنشاء تعبيرات رياضية معقدة متداخلة؟
نعم، يتيح Aspose.Slides إنشاء تعبيرات رياضية معقدة عن طريق تداخل MathBlocks. كل عنصر رياضي يُنفّذ الواجهة IMathElement التي تسمح بتطبيق عمليات (Join، Divide، Enclose، إلخ) لدمج العناصر في هياكل أكثر تعقيدًا.
كيف يمكن تحديث أو تعديل معادلة رياضية موجودة؟
لتحديث معادلة، تحتاج إلى الوصول إلى MathBlocks الموجودة عبر MathParagraph. ثم باستخدام طرق مثل Join، Divide، Enclose وغيرها، يمكنك تعديل عناصر المعادلة الفردية. بعد التحرير، احفظ العرض لتطبيق التغييرات.