إضافة معادلات رياضية إلى عروض PowerPoint التقديمية على Android

نظرة عامة

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

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

لإضافة معادلة رياضية في PowerPoint، يتم استخدام قائمة إدراج → معادلة:

todo:image_alt_text

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

todo:image_alt_text

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

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

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

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

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

todo:image_alt_text

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

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 كائن الكسر، المتكوّن من بسط ومقام مفصولين بشريط كسر. يمكن أن يكون الشريط أفقيًا أو قطريًا بحسب خصائص الكسر. يُستَخدم كائن الكسر أيضًا لتمثيل وظيفة المكدس التي تضع عنصرًا فوق آخر دون شريط كسر.

مثال:

todo:image_alt_text

فئة MathRadical

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

مثال:

todo:image_alt_text

فئة MathFunction

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

مثال:

todo:image_alt_text

فئة MathNaryOperator

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

هذه الفئة لا تشمل المشغلات البسيطة مثل الجمع أو الطرح؛ فهي مُمثَّلة بعنصر نصي واحد – MathematicalText.

مثال:

todo:image_alt_text

فئة MathLimit

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

todo:image_alt_text

بهذا الشكل عبر دمج فئتي MathFunction وMathLimit:

MathLimit funcName = new MathLimit(new MathematicalText("lim"), new MathematicalText("𝑥→∞"));

MathFunction mathFunc = new MathFunction(funcName, new MathematicalText("𝑥"));

فئات MathSubscriptElement, MathSuperscriptElement, MathRightSubSuperscriptElement, MathLeftSubSuperscriptElement

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

مثال:

todo:image_alt_text

فئة MathMatrix

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

مثال:

todo:image_alt_text

فئة MathArray

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

مثال:

todo:image_alt_text

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

  • فئة MathBorderBox: ترسم إطارًا مستطيلًا أو غيره حول IMathElement.

    مثال: todo:image_alt_text

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

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

    مثال: todo:image_alt_text

  • فئة MathAccent: تُحدِّد دالة التنوين، المتكوّنة من قاعدة وعلامة تشكيلية مدمجة.

    مثال: 𝑎́.

  • فئة MathBar: تُحدِّد دالة الشريط، المتكوّنة من وسيط أساسي وشريط علوي أو سفلي.

    مثال: todo:image_alt_text

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

    مثال: todo:image_alt_text

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

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

طريقة Join

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

IMathElement element1 = new MathematicalText("x");

IMathElement element2 = new MathematicalText("y");

IMathBlock block = element1.join(element2);

طريقة Divide

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

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

تُمرِّر الدالة المحددة باستخدام الكائن الحالي كوسيطة. يمكنك:

مثال:

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

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

مثال:

IMathLeftSubSuperscriptElement script = new MathematicalText("y").setSubSuperscriptOnTheLeft("2x", "3z");

طريقة Radical

تُحدد الجذر الرياضي للدرجة المحددة من الوسيط المحدد.

مثال:

IMathRadical radical = new MathematicalText("x").radical("3");

طرق SetUpperLimit و SetLowerLimit

تُحدِّد الحد الأعلى أو السفلي. يشير الحد الأعلى أو السفلي ببساطة إلى موضع الوسيط بالنسبة للقاعدة.

لنفترض التعبير التالي:

todo:image_alt_text

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

IMathFunction mathExpression = new MathematicalText("lim").setLowerLimit("x→∞").function("x");

طرق Nary و Integral

كلاً من طريقتي 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 وغيرها، يمكنك تعديل عناصر المعادلة الفردية. بعد التحرير، احفظ العرض لتطبيق التغييرات.