このページでは、SATySFi の math.satyh を使って数式を扱う方法について書きます。
${ ... }
で囲われた部分は数式として扱われます。
コード例
+p {
二次方程式${ax^2 + bx + c = 0}(ただし,${a \neq 0})
}
コード例の組版結果 (SATySFi version 0.0.3)
数式からなるブロック要素を作るには、+math
を使います。末尾にセミコロンが必要です。
コード例
+math (${
x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}
});
コード例の組版結果 (SATySFi version 0.0.3)
中級者向け: +math
は標準の math.satyh で提供されているコマンドであり、組み込みコマンドではありません。このため、やろうと思えば自前で +math
相当のコマンドを作ることができます。
+math
に渡す引数の中にはプログラムを書くことができます。その場限りでよく使う数式を定義するのに便利です。
コード例
+math (
let limx = ${\lim_{x \to 0}} in
${
#limx \frac{x - \sin x}{x^3}
= #limx \frac{1 - \cos x}{3x^2}
= #limx \frac{\sin x}{6x}
= \frac{1}{6}
}
);
コード例の組版結果 (SATySFi version 0.0.3)
math-cmd を作る let-math
を使えば、数式の中で関数適用することもできます。規則的な数式を自動的に生成するとき便利です。
コード例
+math (
let-math \a n =
let odd = ${\mathit-token!(arabic (2 * n + 1))} in
${\frac{\sin #odd t}{#odd}}
in ${
\app{f}{t} = \sin t + \a!(1) + \a!(2) + \a!(3) + \cdots
}
);
コード例の組版結果 (SATySFi version 0.0.3)
中級者向け: let-math
の定義本体部分では自分自身の再帰呼び出しができませんが、下のように let-rec
と併用することで実装できます。
コード例
+math (
let-rec sq n =
if n <= 1 then ${\sqrt{\frac{1}{2}}}
else
let sub = sq (n - 1) in
${\sqrt{\frac{1}{2} + \frac{1}{2} #sub}}
in
let-math \sq n = sq n in
${
\sq!(1) \sq!(2) \sq!(3) \cdots = \frac{2}{\pi}
}
);
コード例の組版結果 (SATySFi version 0.0.3)
複数の数式を縦に並べたブロックを作るには +align
を使います。引数には数式のリストのリストを渡します。それぞれの数式を分割して渡すと、分割位置で縦に揃えて表示されます。下の例では、等号の左側の位置を揃えています。
コード例
+align [
[${\forall a, b, c.\ a \circ \paren{b \circ c}}; ${= \paren{a \circ b} \circ c}];
[${\exists e. \forall a.\ a \circ e}; ${= a}];
[${\forall a. \exists x.\ a \circ x}; ${= e}];
];
コード例の組版結果 (SATySFi version 0.0.3)
メモ: 2018 年 5 月頃に、math list のための糖衣構文が導入されました。${|foo|bar|baz|}
が [${foo}; ${bar}; ${baz}]
になります。この構文を使うと上の例と同等のものを次のように書けます。
コード例
+align [
${| \forall a, b, c.\ a \circ \paren{b \circ c} | = \paren{a \circ b} \circ c |};
${| \exists e. \forall a.\ a \circ e | = a |};
${| \forall a. \exists x.\ a \circ x | = e |};
];
+align
を使う際、1 行の数式を表すリストの要素は交互に右揃え・左揃えになります。それぞれの数式に説明を付けたいときに便利です。
コード例
+align [
[${\forall a, b, c.\ a \circ \paren{b \circ c}}; ${= \paren{a \circ b} \circ c}; ${\text!{(結合律)}}];
[${\exists e. \forall a.\ a \circ e}; ${= a}; ${\text!{(右単位元の存在)}}];
[${\forall a. \exists x.\ a \circ x}; ${= e}; ${\text!{(右逆元の存在)}}];
];
コード例の組版結果 (SATySFi version 0.0.3)
注意: The SATySFibook に載っている Future Work によると、+align : [(math list) list] block-cmd
というインターフェースはぎこちないので将来的には LaTeX の \align
環境のようなインターフェースを用意することが検討されています。