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

نظرة عامة

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

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

لإضافة معادلة رياضية في PowerPoint، يتم استخدام القائمة Insert -> Equation:

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

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

مثال:

todo:image_alt_text

فئة MathRadical

تحدد فئة MathRadical دالة الجذر الرياضي، مكوّنة من الأساس ودرجة اختيارية.

مثال:

todo:image_alt_text

فئة MathFunction

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

مثال:

todo:image_alt_text

فئة MathNaryOperator

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

هذه الفئة لا تشمل المشغلات البسيطة مثل الجمع أو الطرح؛ تلك تُمثَّل بعنصر نصي واحد – 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 ضمنيًا من السلاسل عند استخدام المعاملات النصية. تُدرج عمليات الرياضيات المتاحة في Aspose.Slides أدناه.

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