صادرات معادلات ریاضی از ارائه‌ها در پایتون

مقدمه

Aspose.Slides به شما امکان می‌دهد معادلات ریاضی را از ارائه‌ها صادر کنید. به عنوان مثال، ممکن است بخواهید معادلات ریاضی موجود در اسلایدها (از یک ارائه خاص) را استخراج کنید و در برنامه یا پلتفرم دیگری استفاده کنید.

صدور معادلات ریاضی به LaTeX

Aspose.Slides می‌تواند یک معادله ریاضی PowerPoint را به‌طور مستقیم به LaTeX تبدیل کند؛ نیازی به فایل MathML میانی و مبدل خارجی نیست. یک معادله ریاضی در یک فریم متنی به‌صورت یک MathPortion ذخیره می‌شود. از MathPortion.getMathParagraph برای دریافت یک MathParagraph استفاده کنید و سپس MathParagraph.toLatex را فراخوانی کنید. این متد یک رشته برمی‌گرداند که می‌توانید آن را ذخیره، نمایش، به برنامه دیگری بفرستید یا به‌طور بیشتر پردازش کنید.

مثال زیر هر فریم متنی را در هر اسلاید بررسی می‌کند، تمام قسمت‌های ریاضی را پیدا می‌کند و هر معادله را در یک فایل .tex جداگانه می‌نویسد:

from pathlib import Path

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import MathPortion, Presentation, SlideUtil

presentation = Presentation("equations.pptx")
try:
    slide_count = presentation.getSlides().size()
    for slide_index in range(slide_count):
        slide = presentation.getSlides().get_Item(slide_index)
        slide_number = slide_index + 1
        equation_number = 1
        text_frames = SlideUtil.getAllTextBoxes(slide)

        for text_frame in text_frames:
            for paragraph in text_frame.getParagraphs():
                for portion in paragraph.getPortions():
                    if not isinstance(portion, MathPortion):
                        continue

                    math_paragraph = portion.getMathParagraph()
                    latex_file_name = f"slide_{slide_number}_equation_{equation_number}.tex"
                    latex_text = math_paragraph.toLatex()
                    latex_path = Path(latex_file_name)
                    latex_path.write_text(str(latex_text), encoding="utf-8")
                    equation_number += 1
finally:
    presentation.dispose()

SlideUtil.getAllTextBoxes تمام فریم‌های متنی یافت‌شده در یک اسلاید را برمی‌گرداند. بررسی نوع MathPortion معادلات ویرایش‌پذیر واقعی را از متن و تصاویر عادی جدا می‌کند.

موتورهای LaTeX و قالب‌های سند همگی از یک‌دست دستورات، بسته‌ها یا کاراکترهای یونیکد پشتیبانی نمی‌کنند. رشته بازگردانده‌شده را با موتور LaTeX مورد استفاده در برنامه‌تان تست کنید. اگر نماد یا عنصر Office Math نمایانگری مناسب در آن محیط نداشته باشد، آن را در رشته بازگردانده‌شده با یک دستور خاص پروژه جایگزین کنید یا معادله را نادیده بگیرید و مسئله را برای بررسی ثبت کنید.

ذخیره معادلات ریاضی به عنوان MathML

در حالی که نوشتن کد برای برخی قالب‌های معادله مثل LaTeX آسان است، نوشتن دستی MathML دشوارتر است زیرا برای تولید خودکار توسط برنامه‌ها طراحی شده است. برنامه‌ها می‌توانند به سادگی MathML را بخوانند و تجزیه کنند زیرا مبتنی بر XML است؛ بنابراین MathML به‌طور گسترده‌ای به‌عنوان قالب خروجی و چاپ در بسیاری از زمینه‌ها استفاده می‌شود.

این کد نمونه نشان می‌دهد چگونه یک معادله ریاضی را از یک ارائه به MathML صادر کنید:

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import MathematicalText, Presentation
from java.io import FileOutputStream

presentation = Presentation()
try:
    math_shape = presentation.getSlides().get_Item(0).getShapes().addMathShape(0, 0, 500, 50)
    math_portion = math_shape.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0)
    math_paragraph = math_portion.getMathParagraph()

    a_squared = MathematicalText("a").setSuperscript("2")
    b_squared = MathematicalText("b").setSuperscript("2")
    c_squared = MathematicalText("c").setSuperscript("2")
    equation = a_squared.join("+").join(b_squared).join("=").join(c_squared)
    math_paragraph.add(equation)

    stream = FileOutputStream("mathml.xml")
    try:
        math_paragraph.writeAsMathMl(stream)
    finally:
        stream.close()
finally:
    presentation.dispose()

سوالات متداول

دقیقا چه چیزی به‌صورت MathML صادر می‌شود—یک پاراگراف یا یک بلوک فرمول جداگانه؟

می‌توانید کل پاراگراف ریاضی (MathParagraph) یا یک بلوک جداگانه (MathBlock) را به MathML صادر کنید. هر دو نوع متدی برای نوشتن به MathML دارند.

چگونه تشخیص دهم که یک شیء در اسلاید یک فرمول ریاضی است نه متن یا تصویر عادی؟

یک فرمول در داخل یک MathPortion قرار دارد و دارای یک MathParagraph است. تصاویر و قسمت‌های متنی عادی که MathParagraph ندارند، فرمول‌های قابل صدور نیستند.

MathML در یک ارائه از کجا می‌آید—آیا مختص PowerPoint است یا یک استاندارد؟

هدف صادرات، MathML استاندارد (XML) است. Aspose از Presentation MathML استفاده می‌کند—زیرمجموعهٔ ارائه‌ای استاندارد که به طور گسترده در برنامه‌ها و وب مورد استفاده قرار می‌گیرد.

آیا صدور فرمول‌ها در داخل جدول‌ها، SmartArt، گروه‌ها و غیره پشتیبانی می‌شود؟

بله، اگر آن اشیا شامل قسمت‌های متنی با یک MathParagraph باشند (یعنی فرمول‌های واقعی PowerPoint)، صادر می‌شوند. اگر فرمول به‌صورت تصویر جاسازی شده باشد، صادر نمی‌شود.

آیا صادرات به MathML فایل ارائه اصلی را تغییر می‌دهد؟

خیر. نوشتن MathML صرفاً سریال‌سازی محتوای فرمول است؛ فایل ارائه اصلی تغییر نمی‌کند.