C++에서 PowerPoint 프레젠테이션에 수식 추가
개요
PowerPoint는 수식을 Office Math Markup Language(OMML) 형식으로 저장합니다. Aspose.Slides for C++를 사용하면 프로그래밍 방식으로 동일한 종류의 수학 콘텐츠(분수, 근호, 함수, 극한, N-ary 연산자, 행렬, 배열 및 서식이 지정된 수학 블록)를 만들 수 있습니다.
PowerPoint에서 사용자는 일반적으로 Insert > Equation을 통해 수식을 추가합니다:

그 결과 슬라이드에 편집 가능한 수식 텍스트가 표시됩니다:

Aspose.Slides는 다음 세 가지 주요 객체를 통해 수식 텍스트를 구성합니다:
- AddMathShape으로 만든 수식 도형은 수식을 포함하는 도형입니다.
- MathPortion은 도형 텍스트 프레임 내부에 수식 콘텐츠를 저장합니다.
- MathParagraph은 하나 이상의 MathBlock 객체를 포함합니다.
아래 대부분의 예제는 MathematicalText과 IMathElement의 플루언트 메서드를 사용하여 코드를 간결하고 읽기 쉽게 합니다.
MathML 내보내기 시나리오에 대해서는 Export Math Equations from Presentations in C++를 참조하십시오.
수식 만들기
다음 예제는 수식 도형을 생성하고 피타고라스 정리를 추가합니다:

auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto mathShape = slide->get_Shapes()->AddMathShape(20.0f, 20.0f, 700.0f, 120.0f);
auto mathPortion = System::ExplicitCast<MathPortion>(mathShape->get_TextFrame()->get_Paragraph(0)->get_Portion(0));
auto mathParagraph = mathPortion->get_MathParagraph();
auto equation = System::MakeObject<MathematicalText>(u"c")
- >SetSuperscript(u"2")
- >Join(u"=")
- >Join(System::MakeObject<MathematicalText>(u"a")->SetSuperscript(u"2"))
- >Join(u"+")
- >Join(System::MakeObject<MathematicalText>(u"b")->SetSuperscript(u"2"));
mathParagraph->Add(equation);
presentation->Save(u"pythagorean-theorem.pptx", SaveFormat::Pptx);
presentation->Dispose();
AddMathShape은 이미 수식 단락을 포함하고 있는 도형을 생성합니다. 첫 번째 MathPortion에 접근하여 해당 MathParagraph를 가져온 다음 수식 블록이나 수식 요소를 추가합니다.
분수 추가
Divide를 사용하여 분수를 만들 수 있습니다. 분수 스타일은 MathFractionTypes로 선택합니다.

auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto mathShape = slide->get_Shapes()->AddMathShape(20.0f, 20.0f, 700.0f, 100.0f);
auto mathPortion = System::ExplicitCast<MathPortion>(mathShape->get_TextFrame()->get_Paragraph(0)->get_Portion(0));
auto mathParagraph = mathPortion->get_MathParagraph();
auto fraction = System::MakeObject<MathematicalText>(u"1")
- >Divide(u"x", MathFractionTypes::Skewed);
mathParagraph->Add(System::MakeObject<MathBlock>(fraction));
presentation->Save(u"fraction.pptx", SaveFormat::Pptx);
presentation->Dispose();
쌓인 형태의 분수를 만들려면 MathFractionTypes::Bar를 사용합니다:
auto stackedFraction = System::MakeObject<MathematicalText>(u"x + 1")->Divide(u"y - 1", MathFractionTypes::Bar);
근호 추가
Radical을 사용하여 제곱근, 세제곱근 또는 기타 근호를 만들 수 있습니다. 현재 요소가 밑이 되고, 인수가 차수가 됩니다.

auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto mathShape = slide->get_Shapes()->AddMathShape(20.0f, 20.0f, 700.0f, 100.0f);
auto mathPortion = System::ExplicitCast<MathPortion>(mathShape->get_TextFrame()->get_Paragraph(0)->get_Portion(0));
auto mathParagraph = mathPortion->get_MathParagraph();
auto radical = System::MakeObject<MathematicalText>(u"x")
- >Radical(u"n");
mathParagraph->Add(System::MakeObject<MathBlock>(radical));
presentation->Save(u"radical.pptx", SaveFormat::Pptx);
presentation->Dispose();
함수 및 극한 추가
AsArgumentOfFunction 또는 Function을 사용하여 sin(x), log(x)와 같은 함수 또는 사용자 정의 함수 이름을 지정합니다. 극한은 MathLimit에 lim을 넣거나 SetLowerLimit을 사용합니다.

auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto mathShape = slide->get_Shapes()->AddMathShape(20.0f, 20.0f, 700.0f, 100.0f);
auto mathPortion = System::ExplicitCast<MathPortion>(mathShape->get_TextFrame()->get_Paragraph(0)->get_Portion(0));
auto mathParagraph = mathPortion->get_MathParagraph();
auto limit = System::MakeObject<MathematicalText>(u"lim")
- >SetLowerLimit(u"x→∞")
- >Function(u"x");
mathParagraph->Add(System::MakeObject<MathBlock>(limit));
presentation->Save(u"functions-and-limits.pptx", SaveFormat::Pptx);
presentation->Dispose();
사용자 정의 함수 이름을 지정하려면 현재 요소를 함수 이름으로 만듭니다:
auto customFunction = System::MakeObject<MathematicalText>(u"f")->Function(u"x + 1");
N-ary 연산자 및 적분 추가
Nary를 사용하면 합계, 합집합, 교집합 및 기타 대형 연산자를 만들 수 있습니다. Integral을 사용하면 적분을 만들 수 있으며, 두 메서드 모두 하한 및 상한을 설정할 수 있습니다.

auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto mathShape = slide->get_Shapes()->AddMathShape(20.0f, 20.0f, 700.0f, 120.0f);
auto mathPortion = System::ExplicitCast<MathPortion>(mathShape->get_TextFrame()->get_Paragraph(0)->get_Portion(0));
auto mathParagraph = mathPortion->get_MathParagraph();
auto summationBase = System::MakeObject<MathematicalText>(u"x")
- >SetSuperscript(u"k")
- >Join(System::MakeObject<MathematicalText>(u"a")->SetSuperscript(u"n-k"));
auto summation = summationBase->Nary(MathNaryOperatorTypes::Summation, u"k=0", u"n");
mathParagraph->Add(System::MakeObject<MathBlock>(summation));
presentation->Save(u"nary-operators.pptx", SaveFormat::Pptx);
presentation->Dispose();
N-ary 연산자는 선택적 한계를 갖는 대형 연산자를 위해 사용됩니다. +, -, =와 같은 단순 연산자는 보통 MathematicalText로 추가하고 식에 결합합니다.
적분을 추가하려면 Integral을 사용합니다:
auto integralBase = System::MakeObject<MathematicalText>(u"x")->Join(System::MakeObject<MathematicalText>(u"dx")->ToBox());
auto integral = integralBase->Integral(MathIntegralTypes::Simple, u"0", u"1");
행렬 추가
행과 열을 정의하려면 MathMatrix를 사용합니다. 행렬은 기본적으로 괄호가 없으므로 필요한 경우 괄호, 대괄호 또는 중괄호로 감싸야 합니다.

auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto mathShape = slide->get_Shapes()->AddMathShape(20.0f, 20.0f, 700.0f, 120.0f);
auto mathPortion = System::ExplicitCast<MathPortion>(mathShape->get_TextFrame()->get_Paragraph(0)->get_Portion(0));
auto mathParagraph = mathPortion->get_MathParagraph();
auto matrix = System::MakeObject<MathMatrix>(2, 3);
matrix->idx_set(0, 0, System::MakeObject<MathematicalText>(u"1"));
matrix->idx_set(0, 1, System::MakeObject<MathematicalText>(u"x"));
matrix->idx_set(1, 0, System::MakeObject<MathematicalText>(u"x"));
matrix->idx_set(1, 1, System::MakeObject<MathematicalText>(u"2"));
matrix->idx_set(1, 2, System::MakeObject<MathematicalText>(u"y"));
mathParagraph->Add(System::MakeObject<MathBlock>(matrix));
presentation->Save(u"matrix.pptx", SaveFormat::Pptx);
presentation->Dispose();
수식 배열 추가
정렬된 수식이나 수직 스택이 필요하면 ToMathArray를 사용합니다.

auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto mathShape = slide->get_Shapes()->AddMathShape(20.0f, 20.0f, 700.0f, 140.0f);
auto mathPortion = System::ExplicitCast<MathPortion>(mathShape->get_TextFrame()->get_Paragraph(0)->get_Portion(0));
auto mathParagraph = mathPortion->get_MathParagraph();
auto equationArray = System::MakeObject<MathematicalText>(u"x")
- >Join(u"y")
- >ToMathArray();
mathParagraph->Add(System::MakeObject<MathBlock>(equationArray));
presentation->Save(u"equation-array.pptx", SaveFormat::Pptx);
presentation->Dispose();
삼각함수 추가
인수가 현재 요소이고 함수 이름이 알려져 있을 경우 AsArgumentOfFunction을 사용합니다.

auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto mathShape = slide->get_Shapes()->AddMathShape(20.0f, 20.0f, 700.0f, 100.0f);
auto mathPortion = System::ExplicitCast<MathPortion>(mathShape->get_TextFrame()->get_Paragraph(0)->get_Portion(0));
auto mathParagraph = mathPortion->get_MathParagraph();
auto cosine = System::MakeObject<MathematicalText>(u"2x")
- >AsArgumentOfFunction(MathFunctionsOfOneArgument::Cos);
mathParagraph->Add(System::MakeObject<MathBlock>(cosine));
presentation->Save(u"trigonometric-function.pptx", SaveFormat::Pptx);
presentation->Dispose();
첨자 및 위첨자 추가
인덱스와 거듭 제곱을 위해 첨자·위첨자 헬퍼를 사용합니다. 인덱스를 기준 요소의 왼쪽에 표시해야 할 경우 SetSubSuperscriptOnTheLeft를 사용합니다.

auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto mathShape = slide->get_Shapes()->AddMathShape(20.0f, 20.0f, 700.0f, 100.0f);
auto mathPortion = System::ExplicitCast<MathPortion>(mathShape->get_TextFrame()->get_Paragraph(0)->get_Portion(0));
auto mathParagraph = mathPortion->get_MathParagraph();
auto scripts = System::MakeObject<MathematicalText>(u"Y")
- >SetSubSuperscriptOnTheLeft(u"1", u"n");
mathParagraph->Add(System::MakeObject<MathBlock>(scripts));
presentation->Save(u"subscript-superscript.pptx", SaveFormat::Pptx);
presentation->Dispose();
구분 기호 추가
Enclose를 사용하여 표현식을 구분 기호 안에 넣습니다. 여러 요소를 포함하는 구분 기호 표현식에는 구분 문자도 설정할 수 있습니다.

auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto mathShape = slide->get_Shapes()->AddMathShape(20.0f, 20.0f, 700.0f, 100.0f);
auto mathPortion = System::ExplicitCast<MathPortion>(mathShape->get_TextFrame()->get_Paragraph(0)->get_Portion(0));
auto mathParagraph = mathPortion->get_MathParagraph();
auto delimiter = System::MakeObject<MathematicalText>(u"x")
- >Join(u"y")
- >Join(u"z")
- >Enclose(u'<', u'>', u'|');
mathParagraph->Add(System::MakeObject<MathBlock>(delimiter));
presentation->Save(u"delimiters.pptx", SaveFormat::Pptx);
presentation->Dispose();
테두리 상자 추가
수식 자체에 테두리를 넣으려면 ToBorderBox를 사용합니다.

auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto mathShape = slide->get_Shapes()->AddMathShape(20.0f, 20.0f, 700.0f, 100.0f);
auto mathPortion = System::ExplicitCast<MathPortion>(mathShape->get_TextFrame()->get_Paragraph(0)->get_Portion(0));
auto mathParagraph = mathPortion->get_MathParagraph();
auto boxedEquation = 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"))
- >ToBorderBox();
mathParagraph->Add(System::MakeObject<MathBlock>(boxedEquation));
presentation->Save(u"border-box.pptx", SaveFormat::Pptx);
presentation->Dispose();
그룹화
Group을 사용하여 표현식 위 또는 아래에 그룹화 문자를 배치합니다. 그룹화된 항목에 레이블을 붙이려면 한계를 추가합니다.

auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto mathShape = slide->get_Shapes()->AddMathShape(20.0f, 20.0f, 700.0f, 120.0f);
auto mathPortion = System::ExplicitCast<MathPortion>(mathShape->get_TextFrame()->get_Paragraph(0)->get_Portion(0));
auto mathParagraph = mathPortion->get_MathParagraph();
auto grouped = System::MakeObject<MathematicalText>(u"x + y")
- >Group(u'\u23DF', MathTopBotPositions::Bottom, MathTopBotPositions::Top)
- >SetLowerLimit(u"any text");
mathParagraph->Add(System::MakeObject<MathBlock>(grouped));
presentation->Save(u"grouped-terms.pptx", SaveFormat::Pptx);
presentation->Dispose();
수식 요소 서식 지정
공식의 가독성을 높이는 경우에만 서식 지정 헬퍼를 사용합니다. 예를 들어 Overbar는 수식 요소 위에 바를 추가합니다.

auto presentation = System::MakeObject<Presentation>();
auto slide = presentation->get_Slide(0);
auto mathShape = slide->get_Shapes()->AddMathShape(20.0f, 20.0f, 700.0f, 100.0f);
auto mathPortion = System::ExplicitCast<MathPortion>(mathShape->get_TextFrame()->get_Paragraph(0)->get_Portion(0));
auto mathParagraph = mathPortion->get_MathParagraph();
auto overbar = System::MakeObject<MathematicalText>(u"ABC")->Overbar();
mathParagraph->Add(System::MakeObject<MathBlock>(overbar));
presentation->Save(u"overbar.pptx", SaveFormat::Pptx);
presentation->Dispose();
빠른 참조
| 작업 | 주요 API |
|---|---|
| 수식 텍스트 만들기 | MathematicalText |
| 요소 결합 | IMathElement.Join |
| 분수 만들기 | IMathElement.Divide |
| 위첨자·첨자 추가 | SetSuperscript, SetSubscript |
| 함수 추가 | Function, AsArgumentOfFunction |
| 근호 추가 | IMathElement.Radical |
| 극한 추가 | SetLowerLimit, SetUpperLimit |
| 왼쪽 첨자·위첨자 추가 | SetSubSuperscriptOnTheLeft |
| 합계·적분 추가 | Nary, Integral |
| 행렬 추가 | MathMatrix |
| 수식 배열 추가 | ToMathArray |
| 구분 기호 추가 | Enclose |
| 바·테두리 상자 추가 | Overbar, ToBorderBox |
| 항목 그룹화 | Group |
FAQ
기존 PowerPoint 수식을 편집할 수 있나요?
예. 프레젠테이션을 열고 MathPortion을 포함하는 도형을 찾아 해당 MathParagraph를 가져온 뒤 단락의 수식 블록을 업데이트하면 됩니다.
수식이 편집 가능한 PowerPoint 수식으로 저장되나요?
예. PPTX로 저장할 때 Aspose.Slides는 수식을 편집 가능한 Office 수식 콘텐츠로 기록합니다.
수식을 LaTeX로 내보낼 수 있나요?
예. 수식의 IMathParagraph를 해당 IMathPortion에서 가져와 IMathParagraph::ToLatex를 호출하면 바로 내보낼 수 있습니다. 전체 예제는 Export Math Equations from Presentations in C++를 참고하십시오.