إضافة معادلات رياضية إلى عروض 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: Summation، Union، Intersection، Integral.

هذه الفئة لا تشمل المشغّلات البسيطة مثل الجمع والطرح، التي تمثّل بنص واحد في فئة 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. يمكن استخدام الوسائط الفارغة لإنشاء فجوات في المصفوفات.

مثال:

todo:image_alt_text

فئة MathArray

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

مثال:

todo:image_alt_text

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

مثال:

todo:image_alt_text

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

  • فئة MathDelimiter: تحدد كائن المحدِّد، الذي يتكوّن من حرفي فتح وإغلاق (مثل الأقواس أو الأقواس المعقوفة أو الأقواس المربعة أو الشرطيات العمودية) وعناصر رياضية واحدة أو أكثر داخلها، مفصولة بحرف محدد.

مثال:

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

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

دعنا ننظر إلى تعبير:

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