Java에서 PowerPoint 프레젠테이션에 수학 방정식 추가

개요

PowerPoint는 방정식을 Office Math Markup Language(OMML)로 저장합니다. Aspose.Slides for Java를 사용하면 다음과 같은 수학 콘텐츠를 프로그래밍 방식으로 만들 수 있습니다: 분수, 근호, 함수, 극한, N-ary 연산자, 행렬, 배열 및 형식이 지정된 수학 블록.

PowerPoint에서 사용자는 일반적으로 Insert > Equation에서 방정식을 추가합니다:

PowerPoint 삽입 탭에서 방정식 명령이 선택된 상태

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

편집 가능한 수학 방정식을 포함한 PowerPoint 슬라이드

Aspose.Slides는 세 가지 주요 객체를 통해 해당 수학 텍스트를 구성합니다:

  • 수학 셰이프는 addMathShape으로 생성되며, 방정식을 포함하는 셰이프입니다.
  • MathPortion은 셰이프 텍스트 프레임 내부에 수학 콘텐츠를 저장합니다.
  • MathParagraph은 하나 이상의 MathBlock 객체를 포함합니다.

아래 대부분의 예제는 MathematicalText와 IMathElement의 유창한 메서드를 사용하여 코드를 간결하고 읽기 쉽게 유지합니다.

MathML 내보내기 시나리오에 대해서는 Java 프레젠테이션에서 수학 방정식 내보내기를 참조하십시오.

방정식 만들기

이 예제는 addMathShape을 사용하여 수학 셰이프를 만들고 피타고라스 정리를 추가합니다:

c 제곱 = a 제곱 + b 제곱 방정식

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape mathShape = slide.getShapes().addMathShape(20, 20, 700, 120);
    IMathParagraph mathParagraph = ((MathPortion) mathShape.getTextFrame().getParagraphs()
            .get_Item(0).getPortions().get_Item(0)).getMathParagraph();

    IMathBlock equation = new MathematicalText("c")
            .setSuperscript("2")
            .join("=")
            .join(new MathematicalText("a").setSuperscript("2"))
            .join("+")
            .join(new MathematicalText("b").setSuperscript("2"));

    mathParagraph.add(equation);

    presentation.save("pythagorean-theorem.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

분수 추가

divide를 사용하여 분수를 생성합니다. MathFractionTypes를 사용하여 분수 스타일을 선택할 수 있습니다.

1을 x로 나눈 비스듬한 수학 분수

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape mathShape = slide.getShapes().addMathShape(20, 20, 700, 100);
    IMathParagraph mathParagraph = ((MathPortion) mathShape.getTextFrame().getParagraphs()
            .get_Item(0).getPortions().get_Item(0)).getMathParagraph();

    IMathFraction fraction = new MathematicalText("1")
            .divide("x", MathFractionTypes.Skewed);

    mathParagraph.add(new MathBlock(fraction));

    presentation.save("fraction.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

중첩 분수를 만들려면 MathFractionTypes.Bar을 사용합니다:

import com.aspose.slides.*;

IMathFraction stackedFraction = new MathematicalText("x + 1").divide("y - 1", MathFractionTypes.Bar);

근호 추가

radical을 사용하여 제곱근, 세제곱근 또는 기타 근을 생성합니다. 현재 요소가 기반이 되고, 인수가 차수(지수)가 됩니다.

근호 기호 아래에 x가 있는 n번째 근 표현식

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape mathShape = slide.getShapes().addMathShape(20, 20, 700, 100);
    IMathParagraph mathParagraph = ((MathPortion) mathShape.getTextFrame().getParagraphs()
            .get_Item(0).getPortions().get_Item(0)).getMathParagraph();

    IMathRadical radical = new MathematicalText("x")
            .radical("n");

    mathParagraph.add(new MathBlock(radical));

    presentation.save("radical.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

함수 및 극한 추가

asArgumentOfFunction 또는 function을 사용하여 sin(x), log(x)와 같은 함수 또는 사용자 정의 함수 이름을 지정합니다. 극한의 경우 lim을 MathLimit에 넣거나 setLowerLimit를 사용합니다.

x가 무한대로 접근할 때의 극한

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape mathShape = slide.getShapes().addMathShape(20, 20, 700, 100);
    IMathParagraph mathParagraph = ((MathPortion) mathShape.getTextFrame().getParagraphs()
            .get_Item(0).getPortions().get_Item(0)).getMathParagraph();

    IMathFunction limit = new MathematicalText("lim")
            .setLowerLimit("x\u2192\u221E")
            .function("x");

    mathParagraph.add(new MathBlock(limit));

    presentation.save("functions-and-limits.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

사용자 정의 함수 이름의 경우, 함수 이름을 현재 요소로 만들고 해당 인수와 함께 function을 호출합니다:

import com.aspose.slides.*;

IMathFunction customFunction = new MathematicalText("f").function("x + 1");

N-ary 연산자 및 적분 추가

nary를 사용하여 합계, 합집합, 교집합 및 기타 대형 연산자를 구현합니다. integral을 사용하여 적분을 구현합니다. 두 메서드 모두 하한 및 상한을 설정할 수 있습니다.

하한 및 상한이 있는 합계

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape mathShape = slide.getShapes().addMathShape(20, 20, 700, 120);
    IMathParagraph mathParagraph = ((MathPortion) mathShape.getTextFrame().getParagraphs()
            .get_Item(0).getPortions().get_Item(0)).getMathParagraph();

    IMathBlock summationBase = new MathematicalText("x")
            .setSuperscript("k")
            .join(new MathematicalText("a").setSuperscript("n-k"));

    IMathNaryOperator summation = summationBase.nary(MathNaryOperatorTypes.Summation, "k=0", "n");

    mathParagraph.add(new MathBlock(summation));

    presentation.save("nary-operators.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

N-ary 연산자는 선택적 한계가 있는 대형 연산자를 위해 사용됩니다. +, -, =와 같은 단순 연산자는 일반적으로 MathematicalText로 추가되어 식에 결합됩니다.

적분의 경우, integral을 사용합니다:

import com.aspose.slides.*;

IMathBlock integralBase = new MathematicalText("x").join(new MathematicalText("dx").toBox());
IMathNaryOperator integral = integralBase.integral(MathIntegralTypes.Simple, "0", "1");

행렬 추가

행 및 열을 위해 MathMatrix를 사용하십시오. 행렬은 기본적으로 괄호가 포함되지 않으므로, 괄호, 대괄호 또는 중괄호가 필요할 때 행렬을 감싸야 합니다.

한 개의 빈 셀을 포함한 두 행 수학 행렬

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape mathShape = slide.getShapes().addMathShape(20, 20, 700, 120);
    IMathParagraph mathParagraph = ((MathPortion) mathShape.getTextFrame().getParagraphs()
            .get_Item(0).getPortions().get_Item(0)).getMathParagraph();

    MathMatrix matrix = new MathMatrix(2, 3);
    matrix.set_Item(0, 0, new MathematicalText("1"));
    matrix.set_Item(0, 1, new MathematicalText("x"));
    matrix.set_Item(1, 0, new MathematicalText("x"));
    matrix.set_Item(1, 1, new MathematicalText("2"));
    matrix.set_Item(1, 2, new MathematicalText("y"));

    mathParagraph.add(new MathBlock(matrix));

    presentation.save("matrix.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

방정식 배열 추가

정렬된 방정식이나 수식의 수직 스택이 필요할 때는 toMathArray을 사용합니다.

x가 y 위에 있는 수직 수학 배열

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape mathShape = slide.getShapes().addMathShape(20, 20, 700, 140);
    IMathParagraph mathParagraph = ((MathPortion) mathShape.getTextFrame().getParagraphs()
            .get_Item(0).getPortions().get_Item(0)).getMathParagraph();

    IMathArray equationArray = new MathematicalText("x")
            .join("y")
            .toMathArray();

    mathParagraph.add(new MathBlock(equationArray));

    presentation.save("equation-array.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

주변 요소와 배열 정렬

setBaseJustification은 배열의 수직 정렬을 옆의 수학 요소에 상대적으로 제어합니다. 아래 예제는 첫 번째 행, 배열 중앙, 마지막 행과의 정렬을 비교합니다.

다음 예제는 세 개의 동일한 배열을 생성합니다. 각 배열은 세 행과 인접 요소 A= 및 =B를 가집니다. 모든 수학 텍스트는 24포인트 Cambria Math를 사용합니다. 배열 정렬만 변경됩니다.

import com.aspose.slides.*;
import java.awt.Color;

class MathTextFactory {
    MathematicalText createText(String value) {
        MathematicalText text = new MathematicalText(value);
        text.getFormat().setFontHeight(24);
        text.getFormat().setLatinFont(new FontData("Cambria Math"));
        return text;
    }
}

MathTextFactory factory = new MathTextFactory();
Presentation presentation = new Presentation();
try {
    presentation.getSlideSize().setSize(780, 200, SlideSizeScaleType.DoNotScale);
    ISlide slide = presentation.getSlides().get_Item(0);
    
    int[] alignments = { MathVerticalAlignment.Top, MathVerticalAlignment.Center, MathVerticalAlignment.Bottom };
    String[] alignmentNames = { "Top", "Center", "Bottom" };

    for (int i = 0; i < alignments.length; i++) {
        IAutoShape label = slide.getShapes().addAutoShape(ShapeType.Rectangle, 20 + i * 260, 10, 240, 30);
        label.getFillFormat().setFillType(FillType.NoFill);
        label.getLineFormat().getFillFormat().setFillType(FillType.NoFill);
        label.getTextFrame().setText(alignmentNames[i]);
        IPortionFormat labelFormat = label.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0).getPortionFormat();
        labelFormat.setFontHeight(16);
        labelFormat.getFillFormat().setFillType(FillType.Solid);
        labelFormat.getFillFormat().getSolidFillColor().setColor(Color.BLACK);

        IAutoShape mathShape = slide.getShapes().addMathShape(20 + i * 260, 60, 240, 130);
        mathShape.getTextFrame().getTextFrameFormat().setAnchoringType(TextAnchorType.Top);
        IMathParagraph mathParagraph = ((IMathPortion) mathShape.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0)).getMathParagraph();
        mathParagraph.setJustification(MathJustification.LeftJustified);

        IMathElement[] rows = { factory.createText("x+y=3"), factory.createText("x-y=1"), factory.createText("x=2") };
        MathArray equationArray = new MathArray(rows[0]);
        equationArray.getArguments().add(rows[1]);
        equationArray.getArguments().add(rows[2]);
        equationArray.setBaseJustification(alignments[i]);
        MathematicalText leftText = factory.createText("A=");
        MathematicalText rightText = factory.createText("=B");
        IMathBlock equation = new MathBlock(leftText).join(equationArray).join(rightText);
        mathParagraph.add(equation);
    }

    presentation.save("equation-array-alignment.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

다음 비교는 PowerPoint에서 저장된 프레젠테이션을 보여줍니다. 각 배열 옆의 A=와 =B 위치를 확인하십시오.

PowerPoint에서 상단, 중앙, 하단 정렬 및 동일한 인접 요소를 가진 방정식 배열

행 간격 구성

setRowSpacingRule은 배열 내 행에 대한 간격 규칙을 선택합니다. setRowSpacing은 명시적 간격 규칙을 위한 수치 값을 제공하며 사전 설정 규칙에서는 무시됩니다.

정확한 간격의 경우 값은 포인트로 측정됩니다. 비례 간격의 경우 절반 라인 단위로 측정됩니다: 예제의 값 3은 1.5 라인을 의미합니다. 명시적 값을 지정할 때는 두 속성을 모두 설정하십시오; 수치 값만 변경해도 간격 규칙이 선택되지 않습니다.

아래 예제는 동일한 방정식, 정렬 및 글꼴 설정으로 다섯 개의 프레젠테이션을 저장합니다. 처음 세 개는 사전 설정을 사용하고, 마지막 두 개는 명시적 값을 보여줍니다.

import com.aspose.slides.*;

class MathTextFactory {
    MathematicalText createText(String value) {
        MathematicalText text = new MathematicalText(value);
        text.getFormat().setFontHeight(24);
        text.getFormat().setLatinFont(new FontData("Cambria Math"));
        return text;
    }
}

MathTextFactory factory = new MathTextFactory();
int[] rules = { MathRowSpacingRule.SingleLineGap, MathRowSpacingRule.OneAndAHalfLineGap, MathRowSpacingRule.TwoLineGap, MathRowSpacingRule.Exactly, MathRowSpacingRule.Multiple };
int[] spacingValues = { 0, 0, 0, 20, 3 };
String[] ruleNames = { "SingleLineGap", "OneAndAHalfLineGap", "TwoLineGap", "Exactly", "Multiple" };

for (int i = 0; i < rules.length; i++) {
    String fileName = "equation-array-" + ruleNames[i] + ".pptx";
    Presentation presentation = new Presentation();
    try {
        IAutoShape mathShape = presentation.getSlides().get_Item(0).getShapes().addMathShape(20, 20, 600, 300);
        IParagraph paragraph = mathShape.getTextFrame().getParagraphs().get_Item(0);
        paragraph.getParagraphFormat().setSpaceBefore(0);
        paragraph.getParagraphFormat().setSpaceAfter(0);
        IMathParagraph mathParagraph = ((IMathPortion) paragraph.getPortions().get_Item(0)).getMathParagraph();
        mathParagraph.setJustification(MathJustification.LeftJustified);

        IMathElement[] rows = { factory.createText("x+y=3"), factory.createText("x-y=1"), factory.createText("x=2") };
        MathArray equationArray = new MathArray(rows[0]);
        equationArray.getArguments().add(rows[1]);
        equationArray.getArguments().add(rows[2]);
        equationArray.setBaseJustification(MathVerticalAlignment.Center);
        equationArray.setRowSpacingRule(rules[i]);
        equationArray.setRowSpacing(spacingValues[i]);
        MathematicalText leftText = factory.createText("A=");
        MathematicalText rightText = factory.createText("=B");
        IMathBlock equation = new MathBlock(leftText).join(equationArray).join(rightText);
        mathParagraph.add(equation);

        presentation.save(fileName, SaveFormat.Pptx);
    } finally {
        presentation.dispose();
    }
}

배열 행 간격은 단락 간격과 별개입니다. setSpaceBefore와 setSpaceAfter는 배열 행 사이가 아니라 포함하는 단락 주변에 공간을 추가합니다. 마찬가지로 IMathParagraph.setJustification은 전체 수학 단락을 수평으로 배치하며, 배열의 수직 정렬 설정을 대체하지 않습니다.

삼각 함수 추가

인수가 현재 요소이고 함수 이름이 알려진 경우 asArgumentOfFunction을 사용합니다.

2x에 적용된 삼각 함수 cos

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape mathShape = slide.getShapes().addMathShape(20, 20, 700, 100);
    IMathParagraph mathParagraph = ((MathPortion) mathShape.getTextFrame().getParagraphs()
            .get_Item(0).getPortions().get_Item(0)).getMathParagraph();

    IMathFunction cosine = new MathematicalText("2x")
            .asArgumentOfFunction(MathFunctionsOfOneArgument.Cos);

    mathParagraph.add(new MathBlock(cosine));

    presentation.save("trigonometric-function.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

첨자 및 위첨자 추가

인덱스와 지수를 위해 첨자 및 위첨자 도우미를 사용합니다. 인덱스를 기반의 왼쪽에 표시해야 할 경우 setSubSuperscriptOnTheLeft을 사용하십시오.

왼쪽에 첨자 1과 위첨자 n이 있는 대문자 Y

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape mathShape = slide.getShapes().addMathShape(20, 20, 700, 100);
    IMathParagraph mathParagraph = ((MathPortion) mathShape.getTextFrame().getParagraphs()
            .get_Item(0).getPortions().get_Item(0)).getMathParagraph();

    IMathLeftSubSuperscriptElement scripts = new MathematicalText("Y")
            .setSubSuperscriptOnTheLeft("1", "n");

    mathParagraph.add(new MathBlock(scripts));

    presentation.save("subscript-superscript.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

구분 기호 추가

enclose을 사용하여 표현식을 구분 기호 안에 넣습니다. 여러 요소를 포함하는 구분 기호 표현식에는 구분 문자도 설정할 수 있습니다.

x, y, z를 수직 막대로 구분한 구분 기호 표현식

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape mathShape = slide.getShapes().addMathShape(20, 20, 700, 100);
    IMathParagraph mathParagraph = ((MathPortion) mathShape.getTextFrame().getParagraphs()
            .get_Item(0).getPortions().get_Item(0)).getMathParagraph();

    IMathDelimiter delimiter = new MathematicalText("x")
            .join("y")
            .join("z")
            .enclose('<', '>');
    delimiter.setSeparatorCharacter('|');

    mathParagraph.add(new MathBlock(delimiter));

    presentation.save("delimiters.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

구분 기호 크기 및 정렬

true를 setGrowToMatchOperandHeight에 전달하면 큰 피연산자 주위에 괄호가 확장됩니다. false를 전달하면 정상 크기로 유지됩니다. 두 가지 MathDelimiterShape 값 중 하나와 함께 setDelimiterShape을 사용하십시오. Centered는 등호 기호 중간을 통과하는 수학 축에 괄호를 중앙에 배치합니다. Match는 포함된 내용에 맞게 정렬합니다. 두 설정은 구분 기호에만 영향을 미치며 내부 표현식은 그대로 유지됩니다.

예제는 x의 지수에 분수를 배치하여 표현식이 기준선 위쪽으로 더 많이 확장되도록 합니다. 네 개의 방정식 모두 동일한 괄호와 글꼴 설정을 사용합니다.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);
    for (int row = 0; row < 2; row++) {
        for (int column = 0; column < 2; column++) {
            IMathFraction fraction = new MathematicalText("a + b").divide("c + d");
            IMathSuperscriptElement power = new MathematicalText("x").setSuperscript(fraction);
            IMathDelimiter delimiter = power.enclose('(', ')');
            delimiter.setGrowToMatchOperandHeight(row == 0);
            delimiter.setDelimiterShape(column == 0 ? MathDelimiterShape.Centered : MathDelimiterShape.Match);

            IAutoShape mathShape = slide.getShapes().addMathShape(20 + 330 * column, 20 + 120 * row, 300, 100);
            MathPortion portion = (MathPortion) mathShape.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0);
            portion.getPortionFormat().setFontHeight(32);
            IMathBlock equation = new MathematicalText("y = ").join(delimiter);
            portion.getMathParagraph().add(equation);
        }
    }
    presentation.save("delimiter-sizing.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

PowerPoint에서 행을 비교하여 확장 효과를 확인하십시오. 상단 행에서는 괄호가 지수를 둘러싸도록 확장되어 두 형태가 동일하게 보입니다. 하단 행에서는 확장이 꺼져 있습니다. 왼쪽의 작은 괄호(Centered)는 등호에 맞추어 정렬되고, 오른쪽의 괄호(Match)는 표현식 위쪽에 높게 배치됩니다.

PowerPoint에서 위쪽에 구분 기호 확장이 활성화되고 아래쪽에 비활성화된 네 개의 방정식, 왼쪽은 Centered, 오른쪽은 Match

테두리 상자 추가

분수에 toBorderBox를 호출하면 전체 표현식을 테두리로 감쌀 수 있습니다. 반환된 IMathBorderBox는 기본적으로 네 면을 모두 표시합니다. 개별 면을 제거하려면 setHideTop, setHideBottom, setHideLeft, setHideRight를 사용하십시오.

예제는 동일한 분수를 한 슬라이드에 여섯 개 배치합니다. 취소 표시를 위해 네 면을 모두 숨기고 setStrikethroughBottomLeftToTopRight에 true를 전달하여 상승 대각선(↗)을, setStrikethroughTopLeftToBottomRight에 true를 전달하여 하강 대각선(↘)을 표시합니다. 또한 setStrikethroughHorizontal 또는 setStrikethroughVertical을 사용하여 보이는 면의 조합을 지정할 수 있습니다.

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    presentation.getSlideSize().setSize(540, 220, SlideSizeScaleType.DoNotScale);
    ISlide slide = presentation.getSlides().get_Item(0);

    class FractionBuilder {
        IMathBorderBox addFraction(float x, float y, boolean hideBorder) {
            IMathFraction fraction = new MathematicalText("x+1").divide("y+2");
            IMathBorderBox box = fraction.toBorderBox();
            box.setHideTop(hideBorder);
            box.setHideBottom(hideBorder);
            box.setHideLeft(hideBorder);
            box.setHideRight(hideBorder);

            IAutoShape shape = slide.getShapes().addMathShape(x, y, 160, 90);
            MathPortion portion = (MathPortion) shape.getTextFrame().getParagraphs().get_Item(0).getPortions().get_Item(0);
            portion.getPortionFormat().setFontHeight(28);
            portion.getMathParagraph().add(new MathBlock(box));
            return box;
        }
    }

    FractionBuilder builder = new FractionBuilder();
    builder.addFraction(10, 10, false);

    IMathBorderBox partial = builder.addFraction(190, 10, false);
    partial.setHideTop(true);
    partial.setHideRight(true);

    builder.addFraction(370, 10, true).setStrikethroughBottomLeftToTopRight(true);
    builder.addFraction(10, 120, true).setStrikethroughTopLeftToBottomRight(true);
    builder.addFraction(190, 120, true).setStrikethroughHorizontal(true);
    builder.addFraction(370, 120, false).setStrikethroughVertical(true);

    presentation.save("border-box.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

PowerPoint의 편집 가능한 여섯 개 분수. 상단 행: 전체 테두리, 하단 및 왼쪽 면, 상승 대각선. 하단 행: 하강 대각선, 수평 스트라이크, 전체 테두리가 있는 수직 스트라이크.

이 분수에서는 수평 스트라이크가 분수 막대와 겹칩니다. 수직 스트라이크는 분자와 분모를 모두 가로지르며 주변 테두리는 그대로 보입니다. 이러한 선은 전체 표현식을 장식합니다. 일반 텍스트 취소선은 텍스트 실행의 문자에 적용됩니다. PowerPoint에서 프레젠테이션을 다시 열어도 분자와 분모를 독립적으로 편집할 수 있습니다.

용어 그룹화

group을 사용하여 표현식 위 또는 아래에 그룹화 문자를 배치합니다. 그룹화된 용어에 레이블을 지정하려면 한계를 추가하십시오.

아래에 레이블이 있는 x + y 표현식이 그룹화됨

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape mathShape = slide.getShapes().addMathShape(20, 20, 700, 120);
    IMathParagraph mathParagraph = ((MathPortion) mathShape.getTextFrame().getParagraphs()
            .get_Item(0).getPortions().get_Item(0)).getMathParagraph();

    IMathLimit grouped = new MathematicalText("x + y")
            .group('\u23DF', MathTopBotPositions.Bottom, MathTopBotPositions.Top)
            .setLowerLimit("any text");

    mathParagraph.add(new MathBlock(grouped));

    presentation.save("grouped-terms.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

수학 요소 서식 지정

서식 도우미는 공식의 명확성을 높이는 경우에만 사용하십시오. 예를 들어, overbar은 수학 요소 위에 바를 놓습니다.

ABC 수학 표현식에 위바가 있음

import com.aspose.slides.*;

Presentation presentation = new Presentation();
try {
    ISlide slide = presentation.getSlides().get_Item(0);

    IAutoShape mathShape = slide.getShapes().addMathShape(20, 20, 700, 100);
    IMathParagraph mathParagraph = ((MathPortion) mathShape.getTextFrame().getParagraphs()
            .get_Item(0).getPortions().get_Item(0)).getMathParagraph();

    IMathBar overbar = new MathematicalText("ABC").overbar();

    mathParagraph.add(new MathBlock(overbar));

    presentation.save("overbar.pptx", SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

기존 방정식의 텍스트 서식 지정

기존 방정식 전체의 텍스트 서식을 지정하려면 각 수학 블록의 요소 트리를 순회합니다. IMathElement.getChildren은 즉시 하위 요소만 반환하므로, 재귀적으로 호출하여 분수, 스크립트, 근호 및 기타 중첩 구조 내부의 텍스트에 도달합니다. 현재 요소가 MathematicalText인 경우 시작 요소를 포함하도록 현재 요소와 자식 요소를 모두 확인하십시오.

이 예제는 input.pptx에 z = xᵢ / ∛y와 같은 방정식이 포함되어 있다고 가정합니다. 여기서 분수는 분자에 첨자, 분모에 근을 포함합니다. 블록의 최상위 요소만 처리하면 분수 내부 텍스트가 누락됩니다. 예제는 슬라이드 텍스트 프레임에서 수학 부분을 찾아 IMathPortion.getMathParagraph을 통해 블록에 접근하고, 각 텍스트 요소의 getFormat 메서드를 통해 setFontHeight을 사용하여 글꼴 크기를 28포인트로 설정합니다.

import com.aspose.slides.*;

class MathTextFormatter {
    void formatMathText(IMathElement element) {
        if (element instanceof MathematicalText) {
            MathematicalText text = (MathematicalText) element;
            text.getFormat().setFontHeight(28);
        }

        for (IMathElement child : element.getChildren()) {
            formatMathText(child);
        }
    }
}

MathTextFormatter formatter = new MathTextFormatter();
Presentation presentation = new Presentation("input.pptx");
try {
    for (ISlide slide : presentation.getSlides()) {
        for (IShape shape : slide.getShapes()) {
            if (!(shape instanceof IAutoShape)) {
                continue;
            }

            IAutoShape autoShape = (IAutoShape) shape;
            if (autoShape.getTextFrame() == null) {
                continue;
            }

            for (IParagraph paragraph : autoShape.getTextFrame().getParagraphs()) {
                for (IPortion portion : paragraph.getPortions()) {
                    if (portion instanceof IMathPortion) {
                        IMathPortion mathPortion = (IMathPortion) portion;
                        for (IMathBlock block : mathPortion.getMathParagraph()) {
                            formatter.formatMathText(block);
                        }
                    }
                }
            }
        }
    }

    presentation.save("formatted-equations.pptx", SaveFormat.Pptx);
} finally {
    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

자주 묻는 질문

기존 PowerPoint 방정식을 편집할 수 있나요?

예. 프레젠테이션을 열고, MathPortion을 포함하는 셰이프를 찾은 다음, getMathParagraph을 호출하고 해당 단락의 수학 블록을 업데이트합니다.

방정식이 편집 가능한 PowerPoint 수학으로 저장되나요?

예. PPTX로 저장하면 Aspose.Slides가 방정식을 편집 가능한 Office 수학 콘텐츠로 기록합니다.

방정식을 LaTeX로 내보낼 수 있나요?

예. 방정식의 IMathParagraph을 해당 IMathPortion에서 가져온 다음, IMathParagraph.toLatex을 호출하여 직접 내보낼 수 있습니다. 전체 예제는 Java 프레젠테이션에서 수학 방정식 내보내기를 참조하십시오.