.NET で PowerPoint プレゼンテーションに数式を追加

概要

PowerPointでは、数式や数式記号を書き込み、プレゼンテーションに表示できます。さまざまな数学記号が利用でき、テキストや数式に追加できます。数式コンストラクタは、次のような複雑な式の作成に使用されます。

  • Math fraction
  • Math radical
  • Math function
  • Limits and log functions
  • N-ary operations
  • Matrix
  • Large operators
  • Sin, cos functions

PowerPointで数式を追加するには、Insert -> Equation メニューを使用します:

todo:image_alt_text

これにより、XML 形式の数式テキストが作成され、PowerPoint で次のように表示されます:

todo:image_alt_text

PowerPoint は幅広い数学記号をサポートしていますが、複雑な数式を作成すると見栄えが十分でないことがあります。そのため、頻繁に数式プレゼンテーションを作成するユーザーは、より見栄えの良い数式を提供するサードパーティ製品を利用することが多いです。

Aspose.Slides API を使用すると、C# で PowerPoint の数式をプログラム的に操作できます。新しい数式を作成したり、既存の数式を編集したりできます。数式構造を画像としてエクスポートする部分的なサポートも提供されています。

数式の作成方法

数式要素は、入れ子レベルに関係なく任意の数式構造を構築するために使用されます。これらの要素の線形コレクションが数式ブロックとなり、MathBlock クラスで表されます。MathBlock クラスは、単独の数式、式、または方程式を表します。MathPortion は通常の Portion クラスとは別に、数式テキストを保持するために使用され、MathParagraphMathBlock オブジェクトの集合を操作できるようにします。これらのクラスは、Aspose.Slides API を介して PowerPoint の数式を操作する際に不可欠です。

以下に、Aspose.Slides API を使用して次の数式を作成する方法を示します。

todo:image_alt_text

スライドに数式を追加するには、まず数式テキストを格納するシェイプを追加します:

using (var presentation = new Presentation())
{
    var mathShape = presentation.Slides[0].Shapes.AddMathShape(0, 0, 720, 150);
}

シェイプを作成すると、デフォルトで数式部分を含む段落が 1 つ含まれます。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 インターフェイスを実装するクラスで表されます。このインターフェイスは多数のメソッドを提供し、数式を簡単に作成でき、1 行のコードでかなり複雑な式を構築できます。たとえば、ピタゴラスの定理は次のようになります:

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 クラスは、分子と分母を分数バーで区切った分数オブジェクトを指定します。分数バーは水平または斜めに設定できます。また、分数バーなしで要素を上下に配置するスタック関数としても使用されます。

例:

todo:image_alt_text

MathRadical クラス

MathRadical クラスは、底部とオプションの次数からなる根号関数(数学的根)を指定します。

例:

todo:image_alt_text

MathFunction クラス

MathFunction クラスは、引数の関数を指定します。Name は関数名を、Base は関数の引数を表します。

例:

todo:image_alt_text

MathNaryOperator クラス

MathNaryOperator クラスは、総和や積分などの N 項演算オブジェクトを指定します。演算子、基底(またはオペランド)およびオプションの上限・下限で構成されます。N 項演算の例としては総和、和集合、積集合、積分があります。

このクラスは加算や減算などの単純演算子は含みません。単純演算子は単一テキストの MathematicalText で表されます。

例:

todo:image_alt_text

MathLimit クラス

MathLimit クラスは上限または下限を作成します。ベースライン上のテキストと、そのすぐ上または下に配置された縮小サイズのテキストで構成されます。この要素は「lim」という文字は含まず、式の上部または下部にテキストを配置できます。したがって、次の式は

todo:image_alt_text

以下のように MathFunctionMathLimit 要素の組み合わせで作成されます:

var funcName = new MathLimit(new MathematicalText("lim"), new MathematicalText("𝑥→∞"));
var mathFunc = new MathFunction(funcName, new MathematicalText("𝑥"));

MathSubscriptElement, MathSuperscriptElement, MathRightSubSuperscriptElement, MathLeftSubSuperscriptElement クラス

これらのクラスは下付きまたは上付きインデックスを指定します。引数の左右どちらかに下付きと上付きの両方を同時に設定できますが、右側のみ単体の下付きまたは上付きがサポートされています。MathSubscriptElement は数の次数を設定するためにも使用できます。

例:

todo:image_alt_text

MathMatrix クラス

MathMatrix クラスは、1 行以上または 1 列以上に配置された子要素からなる行列オブジェクトを指定します。行列には組み込みの区切り記号がないことに注意してください。角括弧で囲むには IMathDelimiter オブジェクトを使用します。Null 引数を使用すると行列内に空白を作成できます。

例:

todo:image_alt_text

MathArray クラス

MathArray クラスは、縦方向の配列(式や任意の数学オブジェクト)を指定します。

例:

todo:image_alt_text

数式要素の書式設定

例:

todo:image_alt_text

  • MathBox クラス: 数式要素の論理的なボックス化(パッケージ化)を指定します。ボックス化されたオブジェクトは、整列ポイントの有無にかかわらず演算子エミュレータとして機能したり、改行点として動作したり、改行を防止するためにグループ化されたりします。たとえば、"==" 演算子は改行を防ぐためにボックス化すべきです。

  • MathDelimiter クラス: 開始文字と終了文字(丸括弧、波括弧、角括弧、縦棒など)で構成され、内部に1 つ以上の数式要素を指定文字で区切って配置します。例: (𝑥2); [𝑥2|𝑦2]。

例:

todo:image_alt_text

  • MathAccent クラス: 基底と結合アクセント記号からなるアクセント機能を指定します。

例: 𝑎́.

  • MathBar クラス: 基底引数と上バーまたは下バーからなるバー機能を指定します。

例:

todo:image_alt_text

  • MathGroupingCharacter クラス: 式の上部または下部に配置され、要素間の関係を強調するためのグルーピング記号を指定します。

例:

todo:image_alt_text

数式操作

各数式要素および MathBlock を介した数式は、IMathElement インターフェイスを実装しています。これにより、既存の構造に対して操作を行い、より複雑な数式を構築できます。すべての操作は、IMathElement または文字列引数のいずれかのセットを受け取ります。文字列引数が使用される場合、指定された文字列から MathematicalText インスタンスが暗黙的に作成されます。Aspose.Slides が提供する数式操作は以下のとおりです。

Join メソッド

これらのメソッドは数式要素を結合し、数式ブロックを形成します。例:

IMathElement element1 = new MathematicalText("x");
IMathElement element2 = new MathematicalText("y");

IMathBlock block = element1.Join(element2);

Divide メソッド

これらのメソッドは、指定された型の分数を分子と分母で作成します。例:

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 メソッド

これらのメソッドは、現在のインスタンスを引数として指定された関数を適用します。可能な操作例:

例:

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 メソッド

これらのメソッドは下付きと上付き文字を設定します。左右どちらかに同時に設定できますが、右側のみ単体の下付きまたは上付きがサポートされています。Superscript は数の次数を設定するためにも使用できます。

例:

var script = new MathematicalText("y").SetSubSuperscriptOnTheLeft("2x", "3z");

Radical メソッド

これらのメソッドは、指定された引数に基づき、指定次数の数学的根を設定します。

例:

var radical = new MathematicalText("x").Radical("3");

SetUpperLimit と SetLowerLimit メソッド

これらのメソッドは上限または下限を設定し、“upper” と “lower” は基底に対する引数の位置を示します。

式の例:

todo:image_alt_text

このような式は、MathFunctionMathLimit クラスの組み合わせ、および IMathElement インターフェイスの操作で作成できます:

var mathExpression = MathText.Create("lim").SetLowerLimit("x→∞").Function("x");

Nary と Integral メソッド

NaryIntegral の両メソッドは、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 メソッドは、要素の上部にアクセント記号(文字)を設定します。
  • OverbarUnderbar メソッドは、上部または下部にバーを設定します。
  • 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();

FAQ

PowerPoint スライドに数式を追加するにはどうすればよいですか?

数式を追加するには、MathShape オブジェクトを作成します。このオブジェクトは自動的に数式部分を含みます。次に、MathPortion から MathParagraph を取得し、MathBlock オブジェクトを追加します。

複雑な入れ子構造の数式を作成できますか?

はい。Aspose.Slides は MathBlock を入れ子にすることで複雑な数式を作成できます。各数式要素は IMathElement インターフェイスを実装しており、Join、Divide、Enclose などの操作で要素を組み合わせてより複雑な構造にできます。

既存の数式を更新または変更するにはどうすればよいですか?

数式を更新するには、MathParagraph を介して既存の MathBlock にアクセスします。その後、Join、Divide、Enclose などのメソッドを使用して個々の要素を変更できます。編集後にプレゼンテーションを保存して変更を適用します。