数式表現

Snow Flower Text の軽量マークアップでは、数式は LatexMath と AsciiMath の2つのどちらかのテキスト形式で簡単に表現できます。 数式レイアウトは学術論文の組版で標準的に使用されているドナルドクヌースの TeX に基づいて出版品質を実現しています。

美しい数式表現の例
\[x = \frac{-b \pm \sqrt{ b^2-4ac }}{2a}\]

Snow Flower Text の数式表現は次のような特徴を持っています。

HiDPI サポート

数式表現はベクトル形式で扱われます。どんな表示サイズに拡大しても縮小しても鮮明にレンダリングされます。この特徴はプレビューだけでなく、エクスポートしたPDFや、HTML、EPUB にも引き継がれます。

AsciiDoc と MarkDown の軽量マークアップを自由に選択

Snow Flower Text は軽量マークアップ の違いを出来るかぎり少なくするようにデザインしており、 AsciiDoc と MarkDown で共通の数式プロセッサを使用します。数式プロセッサの LatexMath 対応状況の差異を気にせず軽量マークアップ形式を選ぶことが出来ます。

LatexMath と AsciiMath 形式を自由に選択

LatexMath と AsciiMath で共通のレイアウトエンジンを使用しています。 これによって、レイアウト品質の差異を気にせず形式を選ぶことが出来ます。

1. 使用方法

1.1. LatexMath の使用方法

LatexMath の数式の表示方法は大きくインラインとディスプレイの二つにモードに分類されます。インラインモードはインライン要素として数式を埋め込み文章中の一部として扱われます。ディスプレイモードはブロック要素として数式の前後で改行して中央配置になります。

1.1.1. インライン要素として記述する

AsciiDoc での記述方法

latexmath インラインマクロ(latexmath:[…​])を使用します。

This is an inline equation: latexmath:[e=mc^2].
Markdown での記述方法

\\( …​ \\) で囲みます。

This is an inline equation: \\( e=mc^2 \\)

上記のコードは次のようにレンダリングされます。

This is an inline equation: \(e=mc^2\).

1.1.2. ブロック要素として記述する

AsciiDoc での記述方法

latexmath ブロックマクロを使用します。

[latexmath]
++++
x = \frac{-b \pm \sqrt{ b^2-4ac }}{2a}
++++
Markdown での記述方法

$$ …​ $$ で囲みます。

$$ x = \frac{-b \pm \sqrt{ b^2-4ac }}{2a} $$

上記のコードは次のようにレンダリングされます。

\[x = \frac{-b \pm \sqrt{ b^2-4ac }}{2a}\]

1.2. AsciiMath の使用方法

ほとんどの AsciiMathシンボルは、見た目をテキストで模倣した記述になります。LatexMath と比較して表現できる範囲は減りますが簡潔に記述できます。

1.2.1. インライン要素として記述する

AsciiDoc での記述方法

asciimath インラインマクロ(asciimath:[…​])を使用します。

asciimath:[x=(-b +- sqrt(b^2 – 4ac))/(2a)]
Markdown での記述方法

\\$ …​ \\$ で囲みます。

\\$ x=(-b +- sqrt(b^2 – 4ac))/(2a) \\$

上記のコードは次のようにレンダリングされます。

\$x=(-b +- sqrt(b^2 – 4ac))/(2a)\$

1.2.2. ブロック要素として記述する

AsciiDoc での記述方法

asciimath ブロックを使用します。

[asciimath]
++++
x=(-b +- sqrt(b^2 – 4ac))/(2a)
++++

上記のコードは次のようにレンダリングされます。

\$x=(-b +- sqrt(b^2 – 4ac))/(2a)\$

2. LatexMath 資料

2.1. シンボル一覧

表 1. Operation symbols
コード表示

+

\(+\)

-

\(-\)

\pm

\(\pm\)

\times

\(\times \)

\div

\(\div \)

\setminus

\(\setminus \)

\ast

\(\ast \)

\star

\(\star \)

\cap

\(\cap \)

\bigcap

\(\bigcap \)

\cup

\(\cup \)

\bigcup

\(\bigcup \)

\sum

\(\sum \)

\prod

\(\prod \)

\coprod

\(\coprod \)

\int

\(\int \)

\iint

\(\iint \)

\iiint

\(\iiint \)

\oint

\(\oint \)

\intop

\(\intop \)

\smallint

\(\smallint \)

\wedge

\(\wedge \)

\bigwedge

\(\bigwedge \)

\vee

\(\vee \)

\bigvee

\(\bigvee \)

\sqcup

\(\sqcup \)

\bigsqcup

\(\bigsqcup \)

\otimes

\(\otimes\)

\bigotimes

\(\bigotimes\)

\oplus

\(\oplus \)

\bigoplus

\(\bigoplus \)

\odot

\(\odot \)

\bigodot

\(\bigodot \)

\uplus

\(\uplus \)

\biguplus

\(\biguplus \)

表 2. Miscellaneous symbols
コード表示

vfrac{2}{3}

\(\frac{2}{3}\)

2^3

\(2^3\)

\sqrt x

\(\sqrt x\)

\sqrt[3] x

\(\sqrt[3] x\)

表 3. Relation symbols
コード表示

=

\(= \)

\ne or \neq

\(\ne \)

<

\(< \)

>

\(> \)

\le or \leq

\(\le \)

\ge or \geq

\(\ge \)

\prec

\(\prec \)

\preceq

\(\preceq \)

\succ

\(\succ \)

\succeq

\(\succeq \)

\ll

\(\ll \)

\gg

\(\gg \)

\leqslant

\(\leqslant \)

\geqslant

\(\geqslant \)

\leqq

\(\leqq \)

\geqq

\(\geqq \)

\in

\(\in \)

\notin

\(\notin \)

\subset

\(\subset \)

\supset

\(\supset \)

\subseteq

\(\subseteq \)

\supseteq

\(\supseteq \)

\equiv

\(\equiv \)

\cong

\(\cong \)

\approx

\(\approx \)

\propto

\(\propto \)

表 4. Logical symbols
コード表示

\neg

\(\neg \)

\implies

\(\implies \)

\iff

\(\iff \)

\forall

\(\forall \)

\exists

\(\exists \)

\bot

\(\bot \)

\top

\(\top \)

\vdash

\(\vdash \)

\models

\(\models \)

表 5. Grouping brackets
コード表示

(

\(( \)

)

\() \)

[

\([ \)

]

\(] \)

{

\(\{ \)

}

\(\} \)

\langle

\(\langle \)

\rangle

\(\rangle \)

|x|

\(|x| \)

表 6. Arrows
コード表示

\Downarrow

\(\Downarrow \)

\Downarrow

\(\Downarrow \)

\downarrow

\(\downarrow \)

\get

\(\gets \)

\hookleftarrow

\(\hookleftarrow \)

\hookrightarrow

\(\hookrightarrow \)

\leadsto

\(\leadsto \)

\Leftarrow

\(\Leftarrow \)

\leftarrow

\(\leftarrow \)

\leftharpoondown

\(\leftharpoondown\)

\leftharpoonup

\(\leftharpoonup \)

\Leftrightarrow

\(\Leftrightarrow \)

\leftrightarrow

\(\leftrightarrow \)

\Longleftarrow

\(\Longleftarrow \)

\longleftarrow

\(\longleftarrow \)

\Longleftrightarrow

\(\Longleftrightarrow \)

\longleftrightarrow

\(\longleftrightarrow \)

\longmapsto

\(\longmapsto \)

\Longrightarrow

\(\Longrightarrow \)

\longrightarrow

\(\longrightarrow \)

\mapsto

\(\mapsto \)

\nearrow

\(\nearrow \)

\nwarrow

\(\nwarrow \)

\Rightarrow

\(\Rightarrow \)

\rightarrow

\(\rightarrow \)

\rightharpoondown

\(\rightharpoondown \)

\rightharpoonup

\(\rightharpoonup \)

\rightleftharpoons

\(\rightleftharpoons\)

\searrow

\(\searrow \)

\swarrow

\(\swarrow \)

\to

\(\to \)

\Uparrow

\(\Uparrow \)

\uparrow

\(\uparrow \)

\Updownarrow

\(\Updownarrow \)

\updownarrow

\(\updownarrow \)

表 7. アクセント
コード表示

a'

\(a’\)

a''

\(a”\)

a^{\prime}

\(a^{\prime}\)

\acute{a}

\(\acute{a}\)

\bar{y}

\(\bar{y}\)

\breve{a}

\(\breve{a}\)

\check{a}

\(\check{a}\)

\dot{a}

\(\dot{a}\)

\ddot{a}

\(\ddot{a}\)

\grave{a}

\(\grave{a}\)

\hat{\theta}

\(\hat{\theta}\)

\widehat{ac}

\(\widehat{ac}\)

\tilde{a}

\(\tilde{a}\)

\widetilde{ac}

\(\widetilde{ac}\)

\vec{F}

\(\vec{F}\)

\overline{AB}

\(\overline{AB}\)

\underline{AB}

\(\underline{AB}\)

\overleftarrow{AB}

\(\overleftarrow{AB}\)

\underleftarrow{AB}

\(\underleftarrow{AB}\)

\overleftrightarrow{AB}

\(\overleftrightarrow{AB}\)

\underleftrightarrow{AB}

\(\underleftrightarrow{AB}\)

\overrightarrow{AB}

\(\overrightarrow{AB}\)

\underrightarrow{AB}

\(\underrightarrow{AB}\)

\overbrace{AB}

\(\overbrace{AB}\)

\underbrace{AB}

\(\underbrace{AB}\)

表 8. ギリシャ文字
コード表示

\alpha

\(\alpha\)

\beta

\(\beta\)

\gamma

\(\gamma\)

\Gamma

\(\Gamma\)

\delta

\(\delta\)

\Delta

\(\Delta\)

\epsilon

\(\epsilon\)

\varepsilon

\(\varepsilon\)

\zeta

\(\zeta\)

\eta

\(\eta\)

\theta

\(\theta\)

\vartheta

\(\vartheta\)

\Theta

\(\Theta\)

\iota

\(\iota\)

\kappa

\(\kappa\)

\lambda

\(\lambda\)

\Lambda

\(\Lambda\)

\mu

\(\mu\)

\nu

\(\nu\)

\xi

\(\xi\)

\Xi

\(\Xi\)

\omicron

\(\omicron\)

\pi

\(\pi\)

\Pi

\(\Pi\)

\rho

\(\rho\)

\sigma

\(\sigma\)

\Sigma

\(\Sigma\)

\tau

\(\tau\)

\upsilon

\(\upsilon\)

\phi

\(\phi\)

\Phi

\(\Phi\)

\varphi

\(\varphi\)

\chi

\(\chi\)

\psi

\(\psi\)

\omega

\(\omega\)

\Omega

\(\Omega\)

2.2. フォント

2.2.1. フォントファミリー

LatexMath は デフォルトでイタリック体が使われるため、元素記号や単 位などを書く場合などでは \mathrm コマンドでフォントを変更する方が良いでしょう。

[latexmath]
++++
\mathrm{H_2+\frac{1}{2}O_2 = H_2O(l)+268kJ}
++++
フォントを変更しない場合
\[H_2+\frac{1}{2}O_2 = H_2O(l)+268kJ\]
\mathrm コマンドでフォントを変更した場合
\[\mathrm{H_2+\frac{1}{2}O_2 = H_2O(l)+268kJ}\]
表 9. フォント対応表
コードサンプル説明

\mathrm

\(\mathrm{ABCDEF\ abcdef\ 123456}\)

Serif

\mathbf

\(\mathbf{ABCDEF\ abcdef\ 123456}\)

Bold font

\mathit

\(\mathit{ABCDEF\ abcdef\ 123456}\)

Italic font

\mathsf

\(\mathsf{ABCDEF\ abcdef\ 123456}\)

Sans-serif

\mathtt

\(\mathtt{ABCDEF\ abcdef\ 123456}\)

Monospace

\textrm

\(\textrm{ABCDEF abcdef 123456}\)

\textbf

\(\textbf{ABCDEF abcdef 123456}\)

\textit

\(\textit{ABCDEF abcdef 123456}\)

\textsf

\(\textsf{ABCDEF abcdef 123456}\)

\texttt

\(\texttt{ABCDEF abcdef 123456}\)

\rm

\(\rm{ABCDEF}\)

\bf

\(\bf{ABCDEF}\)

\it

\(\it{ABCDEF}\)

\sf

\(\sf{ABCDEF}\)

\tt

\(\tt{ABCDEF\ abcdef\ 123456}\)

\Bbb

\(\Bbb{ABCDEF}\)

\mathcal

\(\mathcal{ABCDEF}\)

Calligraphy

\frak

\(\frak{ABCDEF\ abcdef\ 123456}\)

Fraktur

\boldsymbol

\(\boldsymbol{ABCDEF}\)

\mathbb

\(\mathbb{ABCDEF}\)

Blackboard bold

\mathscr

\(\mathscr{ABCDEF}\)

Script

\mathfrak

\(\mathfrak{ABCDEF\ abcdef\ 123456}\)

Fraktur

2.2.2. フォントサイズ

[latexmath]
++++
\Huge Lorem Ipsum
++++

これは次のように描画されます。

\[\Huge Lorem\ Ipsum\]
コード表示

\Huge

\(\Huge{Lorem\ Ipsum}\)

\huge

\(\huge{Lorem\ Ipsum}\)

\LARGE

\(\LARGE{Lorem\ Ipsum}\)

\Large

\(\Large{Lorem\ Ipsum}\)

\Large

\(\Large{Lorem\ Ipsum}\)

\normalsize

\(\normalsize{Lorem\ Ipsum}\)

\small

\(\small{Lorem\ Ipsum}\)

\scriptsize

\(\scriptsize{Lorem\ Ipsum}\)

\tiny

\(\tiny{Lorem\ Ipsum}\)

2.3. レイアウト

2.3.1. 括弧の高さの調整

括弧内の数式にあわせて自動的に括弧の大きさを拡大して調節したい場合に、\left と \right コマンドで高さを自動調整することができます。

例えばカッコ内の式が分数の場合に括弧の高さが足りなくなります。

\begin{align}
[\frac{3}{5} ] \\
(\frac{3}{5} ) \\
\{\frac{x+1}{y^2}\}
\end{align}
\[\begin{align} [\frac{3}{5} ] \\ (\frac{3}{5} ) \\ \{\frac{x+1}{y^2}\} \end{align}\]

次のように \left と \right コマンドを使用することで高さが調整されます。

\begin{align}
\left[ \frac{3}{5} \right] \\
\left( \frac{3}{5} \right) \\
\left\{\frac{x+1}{y^2}\right\}
\end{align}
\[\begin{align} \left[ \frac{3}{5} \right] \\ \left( \frac{3}{5} \right) \\ \left\{\frac{x+1}{y^2}\right\} \end{align}\]

2.3.2. 修飾記号の高さの調整

\mathstrut コマンドは修飾記号の高さを揃えます。

次の例では、文字の高さに依存してルート記号の高さがまちまちになります。

\sqrt{a} + \sqrt{b} + \sqrt{c} + \sqrt{d}
\[\sqrt{a} + \sqrt{b} + \sqrt{c} + \sqrt{d}\]

\mathstrut コマンドを使うことで次のように高さが揃います。

\sqrt{\mathstrut a} + \sqrt{\mathstrut b} + \sqrt{\mathstrut c} + \sqrt{\mathstrut d}
\[\sqrt{\mathstrut a} + \sqrt{\mathstrut b} + \sqrt{\mathstrut c} + \sqrt{\mathstrut d}\]

2.3.3. テキストの開始位置の調整

f(n) = \left\{
\begin{array}{l l}
n/2 \quad \text{if $n$ is even}\\
-(n+1)/2 \quad \text{if $n$ is odd}\\
\end{array}
\right.
\[f(n) = \left\{ \begin{array}{l l} n/2 \quad \text{if $n$ is even}\\ -(n+1)/2 \quad \text{if $n$ is odd}\\ \end{array} \right.\]
f(n) = \left\{
\begin{array}{l l}
n/2 & \quad \text{if $n$ is even}\\
-(n+1)/2 & \quad \text{if $n$ is odd}\\
\end{array}
\right.
\[f(n) = \left\{ \begin{array}{l l} n/2 & \quad \text{if $n$ is even}\\ -(n+1)/2 & \quad \text{if $n$ is odd}\\ \end{array} \right.\]

テキストの開始位置が揃いました。

2.3.4. インラインで ブロックモードに変更する

\sum_{k=1}^{n}k^2

\(\sum_{k=1}^{n}k^2\)

\displaystyle \sum_{k=1}^{n}k^2

\(\displaystyle \sum_{k=1}^{n}k^2\)

2.3.5. 式番号

\frac{3}{5} \tag{5}
\[\displaystyle \frac{3}{5} \tag{5}\]

3. LatexMath サンプル

The Lorenz Equations
\begin{align}
\dot{x} & = \sigma(y-x) \\
\dot{y} & = \rho x - y - xz \\
\dot{z} & = -\beta z + xy
\end{align}
\[\begin{align} \dot{x} & = \sigma(y-x) \\ \dot{y} & = \rho x – y – xz \\ \dot{z} & = -\beta z + xy \end{align}\]
The Cauchy-Schwarz Inequality
\left( \sum_{k=1}^n a_k b_k \right)^{\!\!2} \leq
\left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right)
\[\left( \sum_{k=1}^n a_k b_k \right)^{\!\!2} \leq \left( \sum_{k=1}^n a_k^2 \right) \left( \sum_{k=1}^n b_k^2 \right)\]
A Cross Product Formula
\mathbf{V}_1 \times \mathbf{V}_2 =
\begin{vmatrix}
\mathbf{i} & \mathbf{j} & \mathbf{k} \\
\frac{\partial X}{\partial u} & \frac{\partial Y}{\partial u} & 0 \\
\frac{\partial X}{\partial v} & \frac{\partial Y}{\partial v} & 0 \\
\end{vmatrix}
\[\mathbf{V}_1 \times \mathbf{V}_2 = \begin{vmatrix} \mathbf{i} & \mathbf{j} & \mathbf{k} \\ \frac{\partial X}{\partial u} & \frac{\partial Y}{\partial u} & 0 \\ \frac{\partial X}{\partial v} & \frac{\partial Y}{\partial v} & 0 \\ \end{vmatrix}\]
A Rogers-Ramanujan Identity
1 +  \frac{q^2}{(1-q)}+\frac{q^6}{(1-q)(1-q^2)}+\cdots =
\prod_{j=0}^{\infty}\frac{1}{(1-q^{5j+2})(1-q^{5j+3})},
\quad\quad \text{for $|q|<1$}.
\[1 + \frac{q^2}{(1-q)}+\frac{q^6}{(1-q)(1-q^2)}+\cdots = \prod_{j=0}^{\infty}\frac{1}{(1-q^{5j+2})(1-q^{5j+3})}, \quad\quad \text{for $|q|<1$}.\]
An Identity of Ramanujan
\frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} =
1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}}
{1+\frac{e^{-8\pi}} {1+\ldots} } } }
\[\frac{1}{\Bigl(\sqrt{\phi \sqrt{5}}-\phi\Bigr) e^{\frac25 \pi}} = 1+\frac{e^{-2\pi}} {1+\frac{e^{-4\pi}} {1+\frac{e^{-6\pi}} {1+\frac{e^{-8\pi}} {1+\ldots} } } }\]

4. AsciiMath サンプル

x=(-b +- sqrt(b^2 – 4ac))/(2a)
\$x=(-b +- sqrt(b^2 – 4ac))/(2a)\$

6. 参考

Download on the Mac App Store