在 .NET 中向 PowerPoint 演示文稿添加数学公式
概述
在 PowerPoint 中,您可以编写数学公式或等式并在演示文稿中显示。提供了各种数学符号,可添加到文本或公式中。数学公式构造器用于创建诸如:
- 数学分数
- 数学根号
- 数学函数
- 极限和对数函数
- N 元运算
- 矩阵
- 大运算符
- 正弦、余弦函数
要在 PowerPoint 中添加数学公式,请使用 Insert -> Equation 菜单:

这将在 XML 中创建可在 PowerPoint 中显示的数学文本,如下所示:

PowerPoint 支持广泛的数学符号用于创建公式。然而,在 PowerPoint 中生成复杂的数学公式往往无法得到精致、专业的效果。因此,经常制作数学演示文稿的用户通常会转向第三方解决方案,以获得更美观的数学公式。
使用Aspose.Slides API,您可以在 C# 中以编程方式处理 PowerPoint 演示文稿中的数学公式。创建新的数学表达式或编辑已创建的表达式。对将数学结构导出为图像提供部分支持。
如何创建数学公式
数学元素用于构建任何数学结构,无论嵌套层级如何。线性收集这些元素形成一个数学块,由MathBlock类表示。MathBlock类代表一个独立的数学表达式、公式或等式。MathPortion用于保存数学文本(不同于常规的Portion类),而MathParagraph允许您操作一组MathBlock对象。这些类是通过 Aspose.Slides API 处理 PowerPoint 数学公式的关键。
让我们看看如何使用 Aspose.Slides API 创建以下数学公式:

要向幻灯片添加数学表达式,首先添加一个将容纳数学文本的形状:
using (var presentation = new Presentation())
{
var mathShape = presentation.Slides[0].Shapes.AddMathShape(0, 0, 720, 150);
}
创建形状后,默认已经包含一个带有数学部分的段落。MathPortion类表示包含数学文本的部分。要访问 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 元数学对象,例如求和或积分。它由运算符、基数(或操作数)以及可选的上、下限组成。N 元运算符的例子包括求和、并集、交集和积分。
该类不包括加法、减法等简单运算符,它们由单个文本MathicalText表示。
示例:

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 类:指定分隔符对象,由左、右字符(如圆括号、花括号、方括号或竖线)以及内部的一个或多个数学元素组成,元素之间可使用指定字符分隔。例如:(𝑥²); [𝑥²|𝑦²]。
示例:

- 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 方法均创建并返回由INaryOperator类型表示的 N 元运算符。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 对象,该对象默认包含一个数学部分。随后,从 MathPortion 中获取 MathParagraph,并向其添加 MathBlock 对象。
是否可以创建复杂的嵌套数学表达式?
可以,Aspose.Slides 通过嵌套 MathBlocks 来创建复杂的数学表达式。每个数学元素实现 IMathElement 接口,您可以使用 Join、Divide、Enclose 等操作将元素组合成更复杂的结构。
如何更新或修改已有的数学公式?
要更新公式,需要通过 MathParagraph 访问已有的 MathBlocks。然后使用 Join、Divide、Enclose 等方法修改公式的各个元素。编辑完成后,保存演示文稿即可应用更改。