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

نظرة عامة

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

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

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

todo:image_alt_text

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

todo:image_alt_text

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

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

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

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

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

todo:image_alt_text

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

import aspose.slides as slides
import aspose.slides.mathtext as math

with slides.Presentation() as presentation:
    math_shape = presentation.slides[0].shapes.add_math_shape(0, 0, 720, 150)

بعد إنشاء الشكل، يحتوي تلقائيًا على فقرة واحدة مع جزء رياضي افتراضيًا. تمثل فئة MathPortion جزءًا يحتوي على نص رياضي. للوصول إلى المحتوى الرياضي داخل MathPortion، يُشار إلى متغيّر MathParagraph:

math_paragraph = math_shape.text_frame.paragraphs[0].portions[0].math_paragraph

تتيح لك فئة MathParagraph قراءة وإضافة وتعديل وحذف كتل رياضية (MathBlock)، والتي تتكون من مجموعة من العناصر الرياضية. على سبيل المثال، أنشئ كسرًا وضعه في العرض التقديمي:

fraction = math.MathematicalText("x").divide("y")
math_paragraph.add(math.MathBlock(fraction))
math_block = (
    math.MathematicalText("c").set_superscript("2").
        join("=").
        join(math.MathematicalText("a").set_superscript("2")).
        join("+").
        join(math.MathematicalText("b").set_superscript("2")))

تُنفَّذ عمليات واجهة IMathElement في كل نوع من العناصر، بما في ذلك فئة MathBlock.

فيما يلي مثال كامل للمصدر:

import aspose.slides as slides
import aspose.slides.mathtext as math

with slides.Presentation() as presentation:
    math_shape = presentation.slides[0].shapes.add_math_shape(0, 0, 720, 150)

    math_paragraph = math_shape.text_frame.paragraphs[0].portions[0].math_paragraph

    fraction = math.MathematicalText("x").divide("y")
    math_paragraph.add(math.MathBlock(fraction))

    math_block = (
        math.MathematicalText("c").set_superscript("2").
            join("=").
            join(math.MathematicalText("a").set_superscript("2")).
            join("+").
            join(math.MathematicalText("b").set_superscript("2")))

    math_paragraph.add(math_block)

    presentation.save("math.pptx", slides.export.SaveFormat.PPTX)

أنواع العناصر الرياضية

تتكوّن التعبيرات الرياضية من تسلسلات من العناصر الرياضية. تمثل الكتلة الرياضية مثل هذا التسلسل، وتكوّن وسائط هذه العناصر بنية شجرية متعشقة.

هناك العديد من أنواع العناصر الرياضية التي يمكن استخدامها لبناء كتلة رياضية. يمكن تجميع كلٍ من هذه العناصر داخل أخرى، مما يُكوّن بنية شجرية. أبسط نوع من العناصر هو ما لا يحتوي على أي عناصر نصية رياضية أخرى.

كل نوع من العناصر الرياضية يطبق واجهة IMathElement، مما يسمح لك باستخدام مجموعة مشتركة من العمليات الرياضية على أنواع مختلفة من العناصر.

فئة MathematicalText

تمثل فئة MathematicalText نصًا رياضيًا — العنصر الأساسي لجميع التركيبات الرياضية. قد يمثل النص الرياضي معاملات وعوامل، متغيرات، أو أي نص خطي آخر.

مثال: 𝑎=𝑏+𝑐

فئة MathFraction

تحدد فئة MathFraction كائن كسر يتكوّن من بسط ومقام مفصولين بشريط كسر. يمكن أن يكون شريط الكسر أفقيًا أو قطريًا حسب خصائص الكسر. يُستخدم كائن الكسر أيضًا لتمثيل دالة المكدس، التي تُضع عنصرًا فوق آخر دون شريط كسر.

مثال:

todo:image_alt_text

فئة MathRadical

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

مثال:

todo:image_alt_text

فئة MathFunction

تحدد فئة MathFunction دالة لوسيط. تحتوي على خصائص مثل name الذي يمثل اسم الدالة، وbase الذي يمثل وسيط الدالة.

مثال:

todo:image_alt_text

فئة MathNaryOperator

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

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

مثال:

todo:image_alt_text

فئة MathLimit

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

todo:image_alt_text

باستخدام مزيج من فئتي MathFunction وMathLimit:

function_name = math.MathLimit(math.MathematicalText("lim"), math.MathematicalText("𝑥→∞"))
math_function = math.MathFunction(function_name, math.MathematicalText("𝑥"))

فئات MathSubscriptElement, MathSuperscriptElement, MathRightSubSuperscriptElement, MathLeftSubSuperscriptElement

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

مثال:

todo:image_alt_text

فئة MathMatrix

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

مثال:

todo:image_alt_text

فئة MathArray

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

مثال:

todo:image_alt_text

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

مثال:

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

تجمع هذه الطرق عنصرًا رياضيًا وتكوّن كتلة رياضية. مثال:

element1 = math.MathematicalText("x")
element2 = math.MathematicalText("y")
block = element1.join(element2)

طريقة Divide

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

numerator = math.MathematicalText("x")
fraction = numerator.divide("y", math.MathFractionTypes.LINEAR)

طريقة Enclose

تُحيط هذه الطرق العنصر بحروف محددة، مثل الأقواس أو غيرها من أحرف الإطار. مثال:

delimiter = math.MathematicalText("x").enclose('[', ']')
delimiter2 = math.MathematicalText("elem1").join("elem2").enclose()

طريقة Function

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

function = math.MathematicalText("sin").function("x")

طريقة AsArgumentOfFunction

تستقبل هذه الطرق الدالة المحددة باستخدام المثيل الحالي كوسيط. يمكنك:

مثال:

function_name = math.MathLimit(math.MathematicalText("lim"), math.MathematicalText("𝑛→∞"))
func1 = math.MathematicalText("2x").as_argument_of_function(function_name)
func2 = math.MathematicalText("x").as_argument_of_function("sin")
func3 = math.MathematicalText("x").as_argument_of_function(math.MathFunctionsOfOneArgument.SIN)
func4 = math.MathematicalText("x").as_argument_of_function(math.MathFunctionsOfTwoArguments.LOG, "3")

طرق SetSubscript, SetSuperscript, SetSubSuperscriptOnTheRight, SetSubSuperscriptOnTheLeft

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

مثال:

script = math.MathematicalText("y").set_sub_superscript_on_the_left("2x", "3z")

طريقة Radical

تحدد هذه الطرق الجذر الرياضي للدرجة المحددة بناءً على الوسيط المقدم.

مثال:

radical = math.MathematicalText("x").radical("3")

طريقتا SetUpperLimit و SetLowerLimit

تقبل هذه الطرق حدًا علويًا أو سفليًا، حيث يشير “upper” و"lower" إلى موضع الوسيط مقارنةً بالقاعدة.

نأخذ التعبير التالي:

todo:image_alt_text

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

math_expression = math.MathematicalText("lim").set_lower_limit("x→∞").function("x")

طرق Nary و Integral

كل من طريقتي nary وintegral تنشئ وتعيد المشغّل N-ary الممثل بنوع MathNaryOperator. في طريقة Nary، يحدد تعداد MathNaryOperatorTypes نوع المشغّل—مثل الجمع أو الاتحاد—مع استبعاد التكاملات. في طريقة Integral، تُقدم عملية متخصصة للتكاملات باستخدام تعداد MathIntegralTypes.

مثال:

base_arg = math.MathematicalText("x").join(math.MathematicalText("dx").to_box())
integral = base_arg.integral(math.MathIntegralTypes.SIMPLE, "0", "1")

طريقة ToMathArray

to_math_array تضع العناصر في مصفوفة رأسية. إذا تم استدعاء هذه العملية على مثيل MathBlock، فستوضع جميع العناصر الفرعية في المصفوفة المُعادّة.

مثال:

array_function = math.MathematicalText("x").join("y").to_math_array()

عمليات التنسيق: Accent, Overbar, Underbar, Group, ToBorderBox, ToBox

  • طريقة accent تُضيف علامة تشكيل (حرف فوق العنصر).
  • طريقتا overbar وunderbar تُضيف شريطًا أعلى أو أسفل العنصر.
  • طريقة group تُضع العنصر في مجموعة باستخدام رمز تجميع مثل القوس المعقوف السفلي أو غيره.
  • طريقة to_border_box تُضع العنصر داخل حد‑مربع.
  • طريقة to_box تُضع العنصر داخل مربع غير مرئي (تجميع منطقي).

أمثلة:

accent = math.MathematicalText("x").accent(chr(0x0303))
bar = math.MathematicalText("x").overbar()
group_chr = math.MathematicalText("x").join("y").join("z").group(chr(0x23E1), 
        math.MathTopBotPositions.BOTTOM, 
        math.MathTopBotPositions.TOP)
border_box = math.MathematicalText("x+y+z").to_border_box()
boxed_operator = math.MathematicalText(":=").to_box()

الأسئلة المتكررة

كيف يمكنني إضافة معادلة رياضية إلى شريحة PowerPoint؟

لإضافة معادلة رياضية، تحتاج إلى إنشاء شكل رياضي يُضاف تلقائيًا جزء رياضي. ثم تسترجع MathParagraph من MathPortion وتضيف كائنات MathBlock إليه.

هل يمكن إنشاء تعبيرات رياضية معقدة متداخلة؟

نعم، يسمح Aspose.Slides بإنشاء تعبيرات رياضية معقدة عبر تعشيق MathBlocks. كل عنصر رياضي يتيح لك تطبيق عمليات (Join، Divide، Enclose، إلخ) لدمج العناصر في بنى أكثر تعقيدًا.

كيف يمكنني تحديث أو تعديل معادلة رياضية موجودة؟

لتحديث معادلة، عليك الوصول إلى MathBlock الموجود عبر MathParagraph. ثم باستخدام طرق مثل Join وDivide وEnclose وغيرها، يمكنك تعديل عناصر المعادلة الفردية. بعد التعديل، احفظ العرض لتطبيق التغييرات.