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

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

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

لإضافة تعبير رياضي إلى الشريحة، أضف أولاً شكلاً سيحتوي على النص الرياضي:
using (var presentation = new Presentation())
{
var mathShape = presentation.Slides[0].Shapes.AddMathShape(0, 0, 720, 150);
}
بعد إنشاء الشكل، يحتوي افتراضياً على فقرة واحدة مع Portion رياضية. تمثّل فئة MathPortion Portion يحتوي على نص رياضي. للوصول إلى المحتوى الرياضي داخل MathPortion، راجع المتغيّر MathParagraph:
var mathParagraph = (mathShape.TextFrame.Paragraphs[0].Portions[0] as MathPortion).MathParagraph;
تتيح لك فئة MathParagraph قراءة وإضافة وتحرير وحذف كتل رياضية (MathBlock)، والتي تتألف من مجموعة من العناصر الرياضية. على سبيل المثال، أنشئ كسراً وضعه في العرض:
var fraction = new MathematicalText("x").Divide("y");
mathParagraph.Add(new MathBlock(fraction));
يُمثَّل كل عنصر رياضي بفئة تنفّذ واجهة IMathElement. توفّر هذه الواجهة العديد من الأساليب لإنشاء تعبيرات رياضية بسهولة، مما يتيح لك بناء معادلات معقدة بسطر واحد من الشيفرة. على سبيل المثال، صيغة فيثاغورس ستبدو هكذا:
var mathBlock = new MathematicalText("c")
.SetSuperscript("2")
.Join("=")
.Join(new MathematicalText("a").SetSuperscript("2"))
.Join("+")
.Join(new MathematicalText("b").SetSuperscript("2"));
يتم تنفيذ عمليات واجهة IMathElement في كل نوع من العناصر، بما في ذلك فئة MathBlock.
فيما يلي مثال كامل على الشيفرة المصدرية:
using (var presentation = new Presentation())
{
var mathShape = presentation.Slides[0].Shapes.AddMathShape(0, 0, 720, 150);
var mathParagraph = (mathShape.TextFrame.Paragraphs[0].Portions[0] as MathPortion).MathParagraph;
var fraction = new MathematicalText("x").Divide("y");
mathParagraph.Add(new MathBlock(fraction));
var mathBlock = new MathematicalText("c")
.SetSuperscript("2")
.Join("=")
.Join(new MathematicalText("a").SetSuperscript("2"))
.Join("+")
.Join(new MathematicalText("b").SetSuperscript("2"));
mathParagraph.Add(mathBlock);
presentation.Save("math.pptx", 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 كما يلي:
var funcName = new MathLimit(new MathematicalText("lim"), new MathematicalText("𝑥→∞"));
var mathFunc = new MathFunction(funcName, new MathematicalText("𝑥"));
فئات MathSubscriptElement, MathSuperscriptElement, MathRightSubSuperscriptElement, MathLeftSubSuperscriptElement
- MathSubscriptElement
- MathSuperscriptElement
- MathRightSubSuperscriptElement
- MathLeftSubSuperscriptElement
تحدد هذه الفئات مؤشرًا سفليًا أو علويًا. يمكنك ضبط كلٍ من المؤشر السفلي والعلوي معًا على الجانب الأيسر أو الأيمن من الوسيط، لكن يُدعم مؤشر واحد فقط على الجانب الأيمن. يمكن أيضًا استخدام MathSubscriptElement لتعيين درجة رياضية لعدد.
مثال:

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

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

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

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

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

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

العمليات الرياضية
كل عنصر رياضي وكل تعبير رياضي (عبر فئة MathBlock) ينفّذ واجهة IMathElement. يتيح لك ذلك إجراء عمليات على البنية الحالية وتكوين تعبيرات رياضية أكثر تعقيدًا. جميع العمليات لها مجموعتان من المعاملات: إما [IMathElement] أو سلاسل نصية. تُنشَأ كائنات فئة MathematicalText ضمنيًا من السلاسل النصية عند استخدامها كمعاملات. تُدرج عمليات الرياضيات المتاحة في Aspose.Slides أدناه.
طريقة Join
تدمج هذه الطرق عنصرًا رياضيًا وتكوّن كتلة رياضية. مثال:
IMathElement element1 = new MathematicalText("x");
IMathElement element2 = new MathematicalText("y");
IMathBlock block = element1.Join(element2);
طريقة Divide
- Divide(String)
- Divide(IMathElement)
- Divide(String, MathFractionTypes)
- Divide(IMathElement, MathFractionTypes)
تنشئ هذه الطرق كسرًا من النوع المحدد مع بسط ومقام محدد. مثال:
IMathElement numerator = new MathematicalText("x");
IMathFraction fraction = numerator.Divide("y", MathFractionTypes.Linear);
طريقة Enclose
تطويق العنصر بأحرف محددة، مثل الأقواس أو غيرها من أحرف الإطار. مثال:
IMathDelimiter delimiter = new MathematicalText("x"). Enclose('[', ']');
IMathDelimiter delimiter2 = new MathematicalText("elem1").Join("elem2").Enclose();
طريقة Function
تُنشئ دالة لوسيط باستخدام الكائن الحالي كاسم الدالة. مثال:
IMathFunction func = new MathematicalText("sin").Function("x");
طريقة AsArgumentOfFunction
- AsArgumentOfFunction(String)
- AsArgumentOfFunction(IMathElement)
- AsArgumentOfFunction(MathFunctionsOfOneArgument)
- AsArgumentOfFunction(MathFunctionsOfTwoArguments, IMathElement)
- AsArgumentOfFunction(MathFunctionsOfTwoArguments, String)
تُمرّر الدالة المحددة باستخدام الكائن الحالي كوسيط. يمكنك:
- تحديد سلسلة كاسم الدالة، مثل “cos”;
- اختيار أحد القيم المُعرّفة مسبقاً في تعداد MathFunctionsOfOneArgument أو MathFunctionsOfTwoArguments، مثل
MathFunctionsOfOneArgument.ArcSin; - تمرير مثال من واجهة IMathElement.
مثال:
var funcName = new MathLimit(new MathematicalText("lim"), new MathematicalText("𝑛→∞"));
var func1 = new MathematicalText("2x").AsArgumentOfFunction(funcName);
var func2 = new MathematicalText("x").AsArgumentOfFunction("sin");
var func3 = new MathematicalText("x").AsArgumentOfFunction(MathFunctionsOfOneArgument.Sin);
var func4 = new MathematicalText("x").AsArgumentOfFunction(MathFunctionsOfTwoArguments.Log, "3")
طرق SetSubscript, SetSuperscript, SetSubSuperscriptOnTheRight, SetSubSuperscriptOnTheLeft
- SetSubscript(String)
- SetSubscript(IMathElement)
- SetSuperscript(String)
- SetSuperscript(IMathElement)
- SetSubSuperscriptOnTheRight(String, String)
- SetSubSuperscriptOnTheRight(IMathElement, IMathElement)
- SetSubSuperscriptOnTheLeft(String, String)
- SetSubSuperscriptOnTheLeft(IMathElement, IMathElement)
تحدد هذه الطرق مؤشرًا سفليًا أو علويًا. يمكنك ضبط كلاهما معًا إما على اليسار أو اليمين؛ لكن يُسمح بمؤشر واحد فقط على اليمين. يمكن أيضًا استخدام Superscript لضبط درجة رياضية لعدد.
مثال:
var script = new MathematicalText("y").SetSubSuperscriptOnTheLeft("2x", "3z");
طريقة Radical
تحدِّد هذه الطرق الجذر الرياضي للدرجة المعطاة بناءً على الوسيط المحدد.
مثال:
var radical = new MathematicalText("x").Radical("3");
طريقة SetUpperLimit و SetLowerLimit
تأخذ هذه الطرق حدًا علويًا أو سفليًا، حيث يشير “upper” و"lower" إلى موضع الوسيط بالنسبة للأساس.
ننظر إلى التعبير التالي:

يمكن إنشاء مثل هذه التعبيرات عبر دمج فئتي MathFunction وMathLimit مع عمليات واجهة IMathElement كالتالي:
var mathExpression = MathText.Create("lim").SetLowerLimit("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 من نوع INaryOperator. في طريقة Nary، يحدّد تعداد MathNaryOperatorTypes نوع العامل—مثل الجمع أو الاتحاد—مع استثناء التكاملات. في طريقة Integral، يُوفَّر عملية متخصصة للتكاملات باستخدام تعداد MathIntegralTypes.
مثال:
IMathBlock baseArg = new MathematicalText("x").Join(new MathematicalText("dx").ToBox());
IMathNaryOperator integral = baseArg.Integral(MathIntegralTypes.Simple, "0", "1");
طريقة ToMathArray
تضع طريقة ToMathArray العناصر في مصفوفة رأسية. إذا نُفّذت هذه العملية على مثال من MathBlock، توضع جميع عناصره الفرعية في المصفوفة المرجعة.
مثال:
var arrayFunction = new MathematicalText("x").Join("y").ToMathArray();
عمليات التنسيق: Accent, Overbar, Underbar, Group, ToBorderBox, ToBox
- طريقة Accent تضيف علامة تشديد (حرف فوق العنصر).
- طريقتا Overbar وUnderbar تضيفان شريطًا أعلى أو أسفل العنصر.
- طريقة Group تضع العنصر في مجموعة باستخدام رمز تجميع مثل القوس المعقوف السفلي أو غيره.
- طريقة ToBorderBox تضع العنصر في صندوق حدود.
- طريقة ToBox تضع العنصر في صندوق غير مرئي (تجميع منطقي).
أمثلة:
var accent = new MathematicalText("x").Accent('\u0303');
var bar = new MathematicalText("x").Overbar();
var groupChr = new MathematicalText("x").Join("y").Join("z").Group('\u23E1', MathTopBotPositions.Bottom, MathTopBotPositions.Top);
var borderBox = new MathematicalText("x+y+z").ToBorderBox();
var boxedOperator = new MathematicalText(":=").ToBox();
الأسئلة المتكررة
كيف يمكنني إضافة معادلة رياضية إلى شريحة PowerPoint؟
لإضافة معادلة رياضية، تحتاج إلى إنشاء كائن MathShape، الذي يحتوي تلقائيًا على Portion رياضي. بعد ذلك، تستخرج MathParagraph من MathPortion وتضيف كائنات MathBlock إليه.
هل يمكن إنشاء تعبيرات رياضية متداخلة معقدة؟
نعم، يتيح لك Aspose.Slides إنشاء تعبيرات رياضية معقدة عبر تداخل MathBlocks. كل عنصر رياضي ينفّذ واجهة IMathElement التي تسمح لك بتطبيق عمليات (Join، Divide، Enclose، إلخ) لدمج العناصر في تركيبات أكثر تعقيدًا.
كيف يمكنني تعديل أو تحديث معادلة رياضية موجودة؟
لتحديث معادلة، عليك الوصول إلى MathBlocks الموجودة عبر MathParagraph. ثم باستخدام أساليب مثل Join، Divide، Enclose وغيرها، يمكنك تعديل عناصر المعادلة الفردية. بعد التحرير، احفظ العرض لتطبيق التغييرات.