Matematikai egyenletek exportálása prezentációkból C++-ban

Bevezetés

Az Aspose.Slides for C++ lehetővé teszi, hogy matematikai egyenleteket exportáljon prezentációkból. Például szükség lehet a diákon (egy adott prezentációból) található matematikai egyenletek kinyerésére, és azok felhasználására egy másik programban vagy platformon.

Matematikai egyenletek exportálása LaTeX-be

Az Aspose.Slides közvetlenül átalakíthat egy PowerPoint matematikai egyenletet LaTeX-be; közbenső MathML-fájlra és külső konverterre nincs szükség. A matematikai egyenlet egy szövegdobozban van tárolva, mint egy IMathPortion. Használja a IMathPortion::get_MathParagraph metódust egy IMathParagraph lekéréséhez, majd hívja a IMathParagraph::ToLatex metódust. A módszer egy karakterláncot ad vissza, amelyet menthet, megjeleníthet, elküldhet egy másik alkalmazásnak vagy további feldolgozásra használhat.

A következő példa minden szövegdobozt vizsgál minden dián, megtalálja az összes matematikai részt, és minden egyenletet egy külön .tex fájlba ír:

auto presentation = MakeObject<Presentation>(u"equations.pptx");

auto slideCount = presentation->get_Slides()->get_Count();
for (int slideIndex = 0; slideIndex < slideCount; slideIndex++)
{
    auto slide = presentation->get_Slide(slideIndex);
    int slideNumber = slideIndex + 1;
    int equationNumber = 1;
    auto textFrames = SlideUtil::GetAllTextBoxes(slide);

    for (const auto&& textFrame : textFrames)
    {
        for (const auto&& paragraph : textFrame->get_Paragraphs())
        {
            for (const auto&& portion : paragraph->get_Portions())
            {
                auto mathPortion = System::AsCast<IMathPortion>(portion);
                if (mathPortion == nullptr)
                    continue;

                auto mathParagraph = mathPortion->get_MathParagraph();
                auto latexPath = String::Format(u"slide_{0}_equation_{1}.tex", slideNumber, equationNumber);

                auto latexText = mathParagraph->ToLatex();
                File::WriteAllText(latexPath, latexText);
                equationNumber++;
            }
        }
    }
}

presentation->Dispose();

SlideUtil::GetAllTextBoxes visszaadja a dián talált összes szövegdobozt. Az IMathPortion típusellenőrzés megkülönbözteti a valódi szerkeszthető egyenleteket a szokásos szövegtől és képektől.

A LaTeX motorok és dokumentumsablonok nem minden esetben támogatják ugyanazokat a parancsokat, csomagokat vagy Unicode karaktereket. Tesztelje a visszaadott karakterláncot a alkalmazása által használt LaTeX motorral. Ha egy szimbólum vagy Office Math elemnek nincs megfelelő ábrázolása az adott környezetben, cserélje le a visszaadott karakterláncban egy projektspecifikus parancsra, vagy hagyja ki az egyenletet, és jegyezze fel a problémát felülvizsgálatra.

Matematikai egyenletek mentése MathML-be

Míg az emberek könnyen írják meg néhány egyenlet formátum kódját, például a LaTeX-et, nehezebben tudják megírni a MathML kódját, mivel azt utóbbit alkalmazásoknak automatikusan kell generálniuk. A programok könnyen olvassák és elemezik a MathML-t, mivel annak kódja XML-ben van, így a MathML gyakran használt kimeneti és nyomtatási formátum számos területen.

Ez a mintakód megmutatja, hogyan exportálhat egy matematikai egyenletet egy prezentációból MathML-be:

SharedPtr<Presentation> pres = System::MakeObject<Presentation>();

auto autoShape = pres->get_Slides()->idx_get(0)->get_Shapes()->AddMathShape(0.0f, 0.0f, 500.0f, 50.0f);
auto mathPortion = System::ExplicitCast<IMathPortion>(autoShape->get_TextFrame()->get_Paragraphs()->idx_get(0)->get_Portions()->idx_get(0));
auto mathParagraph = mathPortion->get_MathParagraph();

mathParagraph->Add(System::MakeObject<MathematicalText>(u"a")
        - >SetSuperscript(u"2")
        - >Join(u"+")
        - >Join(System::MakeObject<MathematicalText>(u"b")
                - >SetSuperscript(u"2"))
        - >Join(u"=")
        - >Join(System::MakeObject<MathematicalText>(u"c")
                - >SetSuperscript(u"2")));

SharedPtr<Stream> stream = System::MakeObject<FileStream>(u"mathml.xml", FileMode::Create);

mathParagraph->WriteAsMathMl(stream);

GYIK

Mi pontosan kerül exportálásra MathML-be – egy bekezdés vagy egy egyedi képletblokk?

Exportálhat egy teljes matematikai bekezdést (MathParagraph) vagy egy egyedi blokkot (MathBlock) MathML-be. Mindkét típus rendelkezik egy módszerrel, amely MathML-be ír.

Hogyan tudom megállapítani, hogy egy dián lévő objektum matematikai képlet-e a szokásos szöveg vagy kép helyett?

Egy képlet egy MathPortion‑ban található, és rendelkezik egy MathParagraph‑val. A képek és a szokásos szövegrészek, amelyek nem rendelkeznek MathParagraph‑val, nem exportálható képletek.

Honnan származik a MathML egy prezentációban – PowerPoint‑specifikus vagy szabványos?

Az export a szabványos MathML‑t (XML) célozza. Az Aspose a Presentation MathML‑t használja – a szabvány prezentációs részhalmazát –, amely széles körben elterjedt az alkalmazásokban és a weben.

Támogatott-e a képletek exportálása táblázatokban, SmartArt‑ban, csoportokban stb.?

Igen, ha ezek az objektumok olyan szövegrészeket tartalmaznak, amelyek rendelkeznek MathParagraph‑val (azaz valódi PowerPoint képletek), akkor exportálásra kerülnek. Ha a képlet képként van beágyazva, az nem.

Módosítja a MathML-be exportálás az eredeti prezentációt?

Nem. A MathML írása a képlet tartalmának sorosítása; nem módosítja a prezentációfájlt.