PowerPoint 数学方程式

概要

PowerPointでは、数学の方程式や数式を書くことができ、プレゼンテーションに表示することができます。そのために、さまざまな数学記号がPowerPointで表現され、テキストや方程式に追加できます。そのために、PowerPointでは数学方程式のコンストラクタが使用され、以下のような複雑な数式を作成するのに役立ちます:

  • 数学的分数
  • 数学的根号
  • 数学関数
  • 極限と対数関数
  • N-進演算
  • 行列
  • 大きな演算子
  • サイン、コサイン関数

PowerPointに数学方程式を追加するには、挿入 -> 数式 メニューを使用します:

todo:image_alt_text

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

todo:image_alt_text

PowerPointは、数学方程式を作成するための多くの数学記号をサポートしています。しかし、PowerPointで複雑な数学方程式を作成することは、しばしば良好でプロフェッショナルな見た目の結果をもたらしません。数学プレゼンテーションを頻繁に作成する必要があるユーザーは、見栄えの良い数式を作成するためにサードパーティのソリューションを利用することがよくあります。

Aspose.Slide APIを使用すると、C++でプログラム的にPowerPointプレゼンテーション内の数学方程式を操作できます。新しい数学表現を作成するか、以前に作成したものを編集します。数学構造の画像へのエクスポートも部分的にサポートされています。

数学方程式の作成方法

数学要素は、あらゆるレベルのネスティングを持つ数学的構成を構築するために使用されます。数学要素の線形コレクションは、MathBlockクラスで表される数学ブロックを形成します。MathBlockクラスは、本質的に独立した数学的表現、数式、または方程式です。MathPortionは数学的部分で、数学テキストを保持するために使用されます(Portionとは混同しないでください)。MathParagraphは、一連の数学ブロックを操作することを可能にします。上記のクラスは、Aspose.Slides APIを介してPowerPointの数学方程式で作業するための鍵です。

Aspose.Slides APIを使用して、以下の数学方程式を作成する方法を見てみましょう:

todo:image_alt_text

スライドに数学的表現を追加するには、まず数学テキストを含む形状を追加します:

auto pres = System::MakeObject<Presentation>();
auto mathShape = pres->get_Slides()->idx_get(0)->get_Shapes()->AddMathShape(0.0f, 0.0f, 720.0f, 150.0f);

作成後、形状にはデフォルトで数学的部分を持つ1つの段落が含まれています。MathPortionクラスは、内部に数学テキストを含む部分です。MathPortion内の数学的内容にアクセスするには、MathParagraph変数を参照します:

 auto mathParagraph = (System::AsCast<MathPortion>(mathShape->get_TextFrame()->get_Paragraphs()->idx_get(0)->get_Portions()->idx_get(0)))->get_MathParagraph();

MathParagraphクラスは、数学要素の組み合わせから構成される数学ブロック(MathBlock)を読み取ったり、追加したり、編集したり削除したりすることを可能にします。たとえば、分数を作成してプレゼンテーションに配置する:

auto fraction = System::MakeObject<MathematicalText>(u"x")->Divide(u"y");
mathParagraph->Add(System::MakeObject<MathBlock>(fraction));

各数学要素は、IMathElementインターフェイスを実装するいくつかのクラスによって表されます。このインターフェイスはいくつかのメソッドを提供し、数学表現を簡単に作成できます。1行のコードでかなり複雑な数学表現を作成できます。たとえば、ピタゴラスの定理は以下のようになります:

auto mathBlock = 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"));

インターフェイスIMathElementの操作は、MathBlockを含む任意のタイプの要素に実装されています。

完全なソースコードサンプル:

auto pres = System::MakeObject<Presentation>();
auto mathShape = pres->get_Slides()->idx_get(0)->get_Shapes()->AddMathShape(0.0f, 0.0f, 720.0f, 150.0f);
auto mathParagraph = (System::AsCast<MathPortion>(mathShape->get_TextFrame()->get_Paragraphs()->idx_get(0)->get_Portions()->idx_get(0)))->get_MathParagraph();

auto fraction = System::MakeObject<MathematicalText>(u"x")->Divide(u"y");
mathParagraph->Add(System::MakeObject<MathBlock>(fraction));

auto mathBlock = 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(mathBlock);

pres->Save(u"math.pptx", SaveFormat::Pptx);

数学要素の種類

数学的表現は、数学要素の配列から形成されます。数学要素の配列は数学ブロックとして表され、数学要素の引数は木のようなネスティングを形成します。

数学ブロックを構築するために使用できる数学要素の種類はたくさんあります。これらの要素のそれぞれは、他の要素に含めることができます(集約)。つまり、要素は実際には他の要素のコンテナとなり、木のような構造を形成します。最も単純なタイプの要素は、他の数学テキスト要素を含まないものです。

各タイプの数学要素は、IMathElementインターフェイスを実装しており、異なる種類の数学要素に対して共通の数学操作セットを使用できるようにしています。

MathematicalText クラス

MathematicalTextクラスは数学テキストを表し、すべての数学構造の基本要素です。数学テキストは、オペランドや演算子、変数、その他の任意の線形テキストを表すことができます。

例:𝑎=𝑏+𝑐

MathFraction クラス

MathFractionクラスは分数オブジェクトを指定し、分子と分母が分数バーで区切られています。分数バーは分数プロパティに応じて水平または斜めになります。分数オブジェクトは、1つの要素を他の上に配置するスタック関数を表すためにも使用されます。

例:

todo:image_alt_text

MathRadical クラス

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

例:

todo:image_alt_text

MathFunction クラス

MathFunctionクラスは引数の関数を指定します。メソッドが含まれています:get_Name() - 関数名およびget_Base() - 関数引数。

例:

todo:image_alt_text

MathNaryOperator クラス

MathNaryOperatorクラスは、総和や積分といったN-進数学オブジェクトを指定します。これはオペレーター、基数(またはオペランド)、およびオプションの上限と下限から構成されます。N-進演算子の例には、総和、和集合、交差、積分があります。

このクラスには加算、減算などの単純な演算子は含まれていません。それらは単一のテキスト要素 - MathematicalTextとして表されます。

例:

todo:image_alt_text

MathLimit クラス

MathLimitクラスは上限または下限を作成します。それは、ベースライン上のテキストと、そのすぐ上または下にある小さいサイズのテキストで構成される限界オブジェクトを指定します。この要素は「lim」という単語を含まず、テキストを式の上または下に配置できるようにします。したがって、式

todo:image_alt_text

は以下のようにMathFunctionおよびMathLimit要素の組み合わせを使用して作成されます:

auto funcName = System::MakeObject<MathLimit>(System::MakeObject<MathematicalText>(u"lim"), System::MakeObject<MathematicalText>(u"𝑥→∞"));
auto mathFunc = System::MakeObject<MathFunction>(funcName, System::MakeObject<MathematicalText>(u"𝑥"));

MathSubscriptElement, MathSuperscriptElement, MathRightSubSuperscriptElement, MathLeftSubSuperscriptElement クラス

以下のクラスは下付きインデックスまたは上付きインデックスを指定します。引数の左または右側に同時に下付き文字と上付き文字を設定できますが、単一の下付き文字または上付き文字は右側のみにサポートされています。MathSubscriptElementは、数の数学的次数を設定するためにも使用できます。

例:

todo:image_alt_text

MathMatrix クラス

MathMatrixクラスは、子要素が1つまたは複数の行と列に配置されたマトリックスオブジェクトを指定します。行列には組み込みのデリミタがないことに注意が必要です。行列を括弧に置くには、デリミタオブジェクト - IMathDelimiterを使用する必要があります。ヌル引数は行列の隙間を作成するために使用できます。

例:

todo:image_alt_text

MathArray クラス

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

例:

todo:image_alt_text

数学要素の書式設定

  • MathBorderBoxクラス:数学要素の周りに矩形または他の境界を描画します。

    例: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インターフェイスを実装しています。これは、既存の構造に対して操作を使用し、より複雑な数学表現を形成することを可能にします。すべての操作には2つのパラメータセットがあります:IMathElementまたは文字列を引数として使用します。MathematicalTextクラスのインスタンスは、文字列引数が使用されるときに暗黙的に指定された文字列から作成されます。Aspose.Slidesで利用可能な数学操作は以下の通りです。

Join メソッド

数学要素を結合し、数学ブロックを形成します。たとえば:

auto element1 = System::MakeObject<MathematicalText>(u"x");
    
auto element2 = System::MakeObject<MathematicalText>(u"y");

auto block = element1->Join(element2);

Divide メソッド

指定のタイプでこの分子と指定の分母の分数を作成します。たとえば:

auto numerator = System::MakeObject<MathematicalText>(u"x");
auto fraction = numerator->Divide(u"y", MathFractionTypes::Linear);

Enclose メソッド

要素を指定された文字(括弧や他のキャラクター)で囲みます。

/// <summary>
/// 数学要素を括弧で囲みます
/// </summary>
virtual System::SharedPtr<IMathDelimiter> Enclose() = 0;

/// <summary>
/// この要素を指定された文字で囲まれます
/// </summary>
virtual System::SharedPtr<IMathDelimiter> Enclose(char16_t beginningCharacter, char16_t endingCharacter) = 0;

たとえば:

auto delimiter = System::MakeObject<MathematicalText>(u"x")->Enclose(u'[', u']');
auto delimiter2 = System::ExplicitCast<IMathElement>(System::MakeObject<MathematicalText>(u"elem1")->Join(u"elem2"))->Enclose();

Function メソッド

このインスタンスを関数名として使用し、引数の関数を取得します。

/// <summary>
/// このインスタンスを関数名とし、引数の関数を取得します
/// </summary>
/// <param name="functionArgument">関数の引数</param>

virtual System::SharedPtr<IMathFunction> Function(System::SharedPtr<IMathElement> functionArgument) = 0;

virtual System::SharedPtr<IMathFunction> Function(System::String functionArgument) = 0;

たとえば:

auto func = System::MakeObject<MathematicalText>(u"sin")->Function(u"x");

AsArgumentOfFunction メソッド

指定された関数を取得し、現在のインスタンスを引数として使用します。以下のことができます:

  • 文字列を関数名として指定することができます。たとえば「cos」。
  • 列挙体MathFunctionsOfOneArgumentまたはMathFunctionsOfTwoArgumentsの事前定義された値の1つを選択することができます。たとえば MathFunctionsOfOneArgument.ArcSin.
  • IMathElementのインスタンスを選択することができます。

たとえば:


auto funcName = System::MakeObject<MathLimit>(System::MakeObject<MathematicalText>(u"lim"), System::MakeObject<MathematicalText>(u"𝑛→∞"));
    
auto func1 = System::MakeObject<MathematicalText>(u"2x")->AsArgumentOfFunction(funcName);

auto func2 = System::MakeObject<MathematicalText>(u"x")->AsArgumentOfFunction(u"sin");

auto func3 = System::MakeObject<MathematicalText>(u"x")->AsArgumentOfFunction(MathFunctionsOfOneArgument::Sin);

auto func4 = System::MakeObject<MathematicalText>(u"x")->AsArgumentOfFunction(MathFunctionsOfTwoArguments::Log, u"3");

SetSubscript, SetSuperscript, SetSubSuperscriptOnTheRight, SetSubSuperscriptOnTheLeft メソッド

下付き文字と上付き文字を設定します。引数の左または右側に同時に下付き文字と上付き文字を設定できますが、単一の下付き文字または上付き文字は右側のみでサポートされています。上付き文字は数の数学的次数を設定するためにも使用できます。

例:

auto script = System::MakeObject<MathematicalText>(u"y")->SetSubSuperscriptOnTheLeft(u"2x", u"3z");

Radical メソッド

指定された引数から指定された次数の数学的根を指定します。

例:

auto radical = System::MakeObject<MathematicalText>(u"x")->Radical(u"3");

SetUpperLimit と SetLowerLimit メソッド

上限または下限を取得します。ここで、上限と下限は単に引数の基準に対する位置を示しています。

次の式を考えてみましょう:

todo:image_alt_text

このような式は、MathFunctionMathLimitのクラスの組み合わせ、およびIMathElementの操作を使用して次のように作成できます:

auto mathExpression = System::MakeObject<MathematicalText>(u"lim")->SetLowerLimit(u"x→∞")->Function(u"x");

Nary と Integral メソッド

NaryおよびIntegralメソッドは、IMathNaryOperator型で表されるN-進オペレーターを作成して返します。Naryメソッドでは、MathNaryOperatorTypes列挙が演算子の型(総和、和集合など)を指定しますが、積分は含みません。Integralメソッドには、積分型の列挙MathIntegralTypesが含まれています。

例:

auto baseArg = System::MakeObject<MathematicalText>(u"x")->Join(System::MakeObject<MathematicalText>(u"dx")->ToBox());
auto integral = baseArg->Integral(MathIntegralTypes::Simple, u"0", u"1");

ToMathArray メソッド

ToMathArrayは、要素を垂直配列に配置します。この操作がMathBlockインスタンスに対して呼び出されると、すべての子要素が返された配列に配置されます。

例:

auto arrayFunction = System::MakeObject<MathematicalText>(u"x")->Join(u"y")->ToMathArray();

書式設定操作:Accent, Overbar, Underbar, Group, ToBorderBox, ToBox

  • Accentメソッドは、エレメントの上にキャラクターを設定します。
  • OverbarおよびUnderbarメソッドは、上または下にバーを設定します。
  • Groupメソッドは、底の波括弧などのグルーピングキャラクターを使用してグループに配置します。
  • ToBorderBoxメソッドは、ボーダーボックスに配置します。
  • ToBoxメソッドは、視覚的でないボックス(論理グループ化)に配置します。

例:

auto accent = System::MakeObject<MathematicalText>(u"x")->Accent(u'\u0303');
    
auto bar = System::MakeObject<MathematicalText>(u"x")->Overbar();

auto groupChr = System::MakeObject<MathematicalText>(u"x")->Join(u"y")->Join(u"z")->Group(u'\u23E1', MathTopBotPositions::Bottom, MathTopBotPositions::Top);

auto borderBox = System::MakeObject<MathematicalText>(u"x+y+z")->ToBorderBox();

auto boxedOperator = System::MakeObject<MathematicalText>(u":=")->ToBox();