إضافة معادلات رياضية إلى عروض PowerPoint التقديمية في Python
نظرة عامة
في PowerPoint، يمكنك كتابة معادلة رياضية أو صيغة وعرضها في عرضك التقديمي. تتوفر مجموعة متنوعة من الرموز الرياضية ويمكن إضافتها إلى النص أو المعادلات. يُستخدم مُنشئ المعادلات الرياضية لإنشاء صيغ معقدة مثل:
- كسر رياضي
- جذر رياضي
- دالة رياضية
- حدود وظائف اللوغاريتم
- عمليات N-ary
- مصفوفة
- عمليات كبيرة
- دوال sin, cos
لإضافة معادلة رياضية في PowerPoint، يُستخدم القائمة Insert -> Equation:

سينشئ ذلك نصًا رياضيًا بصيغة XML يمكن عرضه في PowerPoint كما يلي:

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

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

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

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

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

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

يُنشأ باستخدام مزيج من فئتي MathFunction وMathLimit:
function_name = math.MathLimit(math.MathematicalText("lim"), math.MathematicalText("𝑥→∞"))
math_function = math.MathFunction(function_name, math.MathematicalText("𝑥"))
فئات MathSubscriptElement، MathSuperscriptElement، MathRightSubSuperscriptElement، MathLeftSubSuperscriptElement
- MathSubscriptElement
- MathSuperscriptElement
- MathRightSubSuperscriptElement
- MathLeftSubSuperscriptElement
تحدد هذه الفئات موضعًا سفليًا أو علويًا. يمكنك تعيين كل من الأسفل والعلو في الوقت نفسه على الجانب الأيمن أو الأيسر للوسيط، لكن يُدعم موضع واحد فقط على الجانب الأيمن. يمكن أيضًا استخدام MathSubscriptElement لتعيين درجة عددية.
مثال:

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

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

تنسيق العناصر الرياضية
- فئة MathBorderBox: ترسم حدًا مستطيلاً أو بديلاً حول IMathElement.
مثال:

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

- فئة MathAccent: تحدد وظيفة اللكنة، التي تتكوّن من أساس وعلامة تشكيلية مركبة.
مثال: 𝑎́.
- فئة MathBar: تحدد وظيفة الشريط، التي تتكوّن من وسيلة أساسية وشريط أعلى أو أسفل.
مثال:

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

العمليات الرياضية
كل عنصر رياضي وكل تعبير رياضي (عبر MathBlock) يطبّق فئة IMathElement. هذا يتيح لك إجراء عمليات على البنية الحالية وتكوين تعبيرات رياضية أكثر تعقيدًا. جميع العمليات لها مجموعتان من المعاملات: إما IMathElement أو سلاسل نصية. تُنشأ كائنات MathematicalText ضمنيًا من السلاسل النصية عند استخدام معامل نصي. تُدرج العمليات الرياضية المتاحة في Aspose.Slides أدناه.
طريقة Join
تجمع هذه الطريقة عنصرًا رياضيًا وتشكل كتلة رياضية. مثال:
element1 = math.MathematicalText("x")
element2 = math.MathematicalText("y")
block = element1.join(element2)
طريقة Divide
- divide(String)
- divide(IMathElement)
- divide(String, MathFractionTypes)
- divide(IMathElement, MathFractionTypes)
تُنشئ هذه الطريقة كسرًا من النوع المحدد مع بسط ومقام محدد. مثال:
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
- as_argument_of_function(String)
- as_argument_of_function(IMathElement)
- as_argument_of_function(MathFunctionsOfOneArgument)
- as_argument_of_function(MathFunctionsOfTwoArguments, IMathElement)
- as_argument_of_function(MathFunctionsOfTwoArguments, String)
تستقبل الدالة المحددة باستخدام المثيل الحالي كوسيط. يمكنك:
- تحديد سلسلة كاسم الدالة، مثل “cos”.
- اختيار إحدى القيم المعرّفة مسبقًا في تعداد MathFunctionsOfOneArgument أو MathFunctionsOfTwoArguments، مثل
MathFunctionsOfOneArgument.ARC_SIN. - اختيار مثيل IMathElement.
مثال:
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
- set_subscript(String)
- set_subscript(IMathElement)
- set_superscript(String)
- set_superscript(IMathElement)
- set_sub_superscript_on_the_right(String, String)
- set_sub_superscript_on_the_right(IMathElement, IMathElement)
- set_sub_superscript_on_the_left(String, String)
- set_sub_superscript_on_the_left(IMathElement, IMathElement)
تحدد هذه الطرق أسفلًا وعلوًا. يمكنك تعيينهما معًا إما على اليمين أو على اليسار؛ ومع ذلك، يُدعم أسفل أو علو واحد فقط على الجانب الأيمن. يمكن أيضًا استخدام Superscript لتحديد درجة عددية.
مثال:
script = math.MathematicalText("y").set_sub_superscript_on_the_left("2x", "3z")
طريقة Radical
تحدد هذه الطريقة الجذر الرياضي للدرجة المحددة بناءً على الوسيط المحدد.
مثال:
radical = math.MathematicalText("x").radical("3")
طرق SetUpperLimit و SetLowerLimit
- set_upper_limit(String)
- set_upper_limit(IMathElement)
- set_lower_limit(String)
- set_lower_limit(IMathElement)
تأخذ هذه الطرق حدًا علويًا أو سفليًا، حيث يشير “علوي” و"سفلي" إلى موقع الوسيط بالنسبة للأساس.
دعنا ننظر إلى تعبير:

يمكن إنشاء مثل هذه التعبيرات من خلال دمج فئتي MathFunction وMathLimit مع عمليات فئة IMathElement، على النحو التالي:
math_expression = math.MathematicalText("lim").set_lower_limit("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 الممثّل بنوع 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، وغيرها، يمكنك تعديل عناصر المعادلة الفردية. بعد التحرير، احفظ العرض لتطبيق التغييرات.