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

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

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

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

- فئة 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)
تقبل هذه الطرق حدًا علويًا أو سفليًا، حيث يشير “upper” و"lower" إلى موضع الوسيط مقارنةً بالقاعدة.
نأخذ التعبير التالي:

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