MathJaxとTeXで行列,長い式,色指定

基本方針

筆者はMathJaxについてもTeXについても初心者。しかし、勉強してから取り組むという余裕なく使っていく必要が出た。そこでの調査と試行錯誤の中で、将来的にも使えそうな部分を記録していく。

MathJaxとTeXで数式を表現する方法は共通な部分が多いと踏んでいたが、そのまま流用できない部分も多いとわかってきた。つまり、MathJaxで作ったものをTeXに書き換えたりその逆を行うためには「移植」的な作業が必要になる。

MathJaxとTeXの違いを意識して最小限かつリーズナブルな移植を可能にする方針で、作業中に出会った課題ごとに解説を作っていく。

amsmathパッケージ

数式の記述の拡張機能のようなものです。

TeXの場合
TeXの基本機能だけでもある程度数式を表現できますが、本格的に使うにはamsmathパッケージを使うことを宣言するという仕組みになっています。\\begin{document}の前(プリアンブルブ部)に次のように宣言します。
\usepackage{amsmath}
MathJaxの場合
MathJaxの場合はすでに使えるようになっていて宣言する必要がありません。

amsmathなしでできることが限られているので、amsmathを使うことを基本とします。

最初の{array}と{equation}はamsmathなしで使えます。この2つの後は、どちらの機能かはこだわらないことにします。

arryを使って行列を

arrayを使って, 2行3列の行列を記述します.

preタグの中はMathJaxは手を付けないようなので, そのまま記述しています. ただし, & だけは & にしています.

\[
A=
\left(\begin{array}{ccc}
a_{11} & a_{12} & a_{13} \\
a_{21} & a_{22} & a_{23}
\end{array}\right)
\]

これで, 次のようになります.

\[ A= \left(\begin{array}{ccc} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \end{array}\right) \]

記述の説明

  1. \\begin{array}から\\end{array}までが行列
  2. {ccc}は全部の列をセンタリングするという指示(r,c,l を組み合わせて指定する)
  3. {c|cc}など、|の位置に縦線を入れることができる
  4. 文中の改行は無視される.
  5. 行列の内容で行の区切りは\\\\, 列の区切りは & とする.
  6. \\left( が左側の大きな開き括弧. \\right) が右側の閉じ括弧
  7. $A=$ との上下位置の調整は自動で処理される.

equation等を別行仕立ての数式に使う

\\[ \\] の代わりに\\begin{equation} \\end{equation} を使うことができます. この方が見た目に数式としての区切りが見えやすい気がします.

TeXでは式の番号が自動で振られるようになりますが, MathJax では特に指示しなければそうなりません。

行数と列数を増やして書いてみます.

\begin{equation}
A=
\left(\begin{array}{cccc}
a_{11} & a_{12} & a_{13} & a_{14}\\
a_{21} & a_{22} & a_{23} & a_{24}\\
a_{31} & a_{32} & a_{33} & a_{34}
\end{array}\right)
\end{equation}

これで, 次のようになります.

\begin{equation} A= \left(\begin{array}{cccc} a_{11} & a_{12} & a_{13} & a_{14}\\ a_{21} & a_{22} & a_{23} & a_{24}\\ a_{31} & a_{32} & a_{33} & a_{34} \end{array}\right) \end{equation}

amsmathの機能で行列はもっと簡単に

\usepackage{amsmath}で追加されるamsmathの中には行列や行列式を簡単に記述する方法が用意されています。

pmatrixを使えば両側の( )は自動で付けてくれます. 列ごとの右寄せやセンタリングはありません.

\begin{equation}
A=
\begin{pmatrix}
a_{11} & a_{12} & a_{13} \\
a_{21} & a_{22} & a_{23}
\end{pmatrix}
\end{equation}

これで, 次のようになります.

\begin{equation} A= \begin{pmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \end{pmatrix} \end{equation}

vmatrixを使えば両側に| |がついて行列式を表現できます.

\begin{equation}
|A|=
\begin{vmatrix}
a_{11} & a_{12} & a_{13}\\
a_{21} & a_{22} & a_{23}\\
a_{31} & a_{32} & a_{33}
\end{vmatrix}
\end{equation}

これで, 次のようになります.

\begin{equation} |A|= \begin{vmatrix} a_{11} & a_{12} & a_{13}\\ a_{21} & a_{22} & a_{23}\\ a_{31} & a_{32} & a_{33} \end{vmatrix} \end{equation}

この他に、matrix:$\begin{matrix} a & b\\ c & d \end{matrix}\qquad$ bmatrix:$\begin{bmatrix} a & b\\ c & d \end{bmatrix}\qquad$ Bmatrix:$\begin{Bmatrix} a & b\\ c & d \end{Bmatrix}\qquad$ Vmatrix:$\begin{Vmatrix} a & b\\ c & d \end{Vmatrix}\quad$ があります。

長い式(equation)

equation は数式が一行になります。

\begin{equation}
AB=
\begin{pmatrix}
a_{11} & a_{12} & a_{13} \\
a_{21} & a_{22} & a_{23}
\end{pmatrix}
\begin{pmatrix}
b_{11} & b_{12} \\
b_{21} & b_{22} \\
b_{31} & b_{32}
\end{pmatrix}\\  (←この\\による改行指示は無視されます)
=
\begin{pmatrix}
....
\end{pmatrix}
\end{equation}

これで, 次のようになります

\begin{equation} AB= \begin{pmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \end{pmatrix} \begin{pmatrix} b_{11} & b_{12} \\ b_{21} & b_{22} \\ b_{31} & b_{32} \end{pmatrix}\\ = \begin{pmatrix} a_{11}b_{11}+a_{12}b_{21}+a_{13}b_{31} & a_{11}b_{12}+a_{12}b_{22}+a_{13}b_{32} \\ a_{21}b_{11}+a_{22}b_{21}+a_{23}b_{31} & a_{21}b_{12}+a_{22}b_{22}+a_{23}b_{32} \end{pmatrix} \end{equation}

長い式(multline)

multlineは \\ で指定した位置で改行し、最初の行を左寄せ、最後の行を右寄せにします。それ以外の行がセンタリングされます。次の例では3行にするためにcの行列を加えました。

\begin{multline}
AB= 
{一行目の内容}
 ....... \\
= 
{二行目の内容}
 ....... \\
= 
{三行目の内容}
 ....... 
\end{multline}

これで, 次のようになります

\begin{multline} AB= \begin{pmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \end{pmatrix} \begin{pmatrix} b_{11} & b_{12} \\ b_{21} & b_{22} \\ b_{31} & b_{32} \end{pmatrix}\\ = \begin{pmatrix} a_{11}b_{11}+a_{12}b_{21}+a_{13}b_{31} & a_{11}b_{12}+a_{12}b_{22}+a_{13}b_{32} \\ a_{21}b_{11}+a_{22}b_{21}+a_{23}b_{31} & a_{21}b_{12}+a_{22}b_{22}+a_{23}b_{32} \end{pmatrix}\\ = \begin{pmatrix} c_{11} & c_{12} \\ c_{21} & c_{22} \end{pmatrix} \end{multline}

長い式(align)

イコールで揃えたい時は align がいいでしょう。ポイントは & の位置で揃えられるということ。

\begin{align}
AB&= 
{一行目の内容}
 ....... \\
&= 
{二行目の内容}
 ....... \\
&= 
{三行目の内容}
 ....... 
\end{align}

これで, 次のようになります

\begin{align} AB&= \begin{pmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \end{pmatrix} \begin{pmatrix} b_{11} & b_{12} \\ b_{21} & b_{22} \\ b_{31} & b_{32} \end{pmatrix}\\ &= \begin{pmatrix} a_{11}b_{11}+a_{12}b_{21}+a_{13}b_{31} & a_{11}b_{12}+a_{12}b_{22}+a_{13}b_{32} \\ a_{21}b_{11}+a_{22}b_{21}+a_{23}b_{31} & a_{21}b_{12}+a_{22}b_{22}+a_{23}b_{32} \end{pmatrix}\\ &= \begin{pmatrix} c_{11} & c_{12} \\ c_{21} & c_{22} \end{pmatrix} \end{align}

複数の & で揃えることもできますが、align は偶数で大きく隙間を空けようとします。次のような用途に合わせてあります。知らないで使うと「なんで?」となります。

\begin{align}
a&=x+y &b&=x^2+z &c&=x^2+y^2\\
d&=y^3+5z &e&=4x^2+3z &f&=2x^2+z^3
\end{align}

これで, 次のようになります

\begin{align} a&=x+y &b&=x^2+z &c&=x^2+y^2\\ d&=y^3+5z &e&=4x^2+3z &f&=2x^2+z^3 \end{align}

長い式(equation+split)

equation+splitではすべての&が対等に扱われます。

\begin{equation} \begin{split} a&=x+y &b&=x^2+z &c&=x^2+y^2\\ d&=y^3+5z &e&=4x^2+3z &f&=2x^2+z^3 \end{split} \end{equation}

equation+splitとは次のような記述です。

\begin{equation}
\begin{split}
a&=x+y &b&=x^2+z &c&=x^2+y^2\\
d&=y^3+5z &e&=4x^2+3z &f&=2x^2+z^3
\end{split}
\end{equation}

こんなときに使いたくなるかもしれません。

\begin{equation} \begin{split} y&=x^3 &+ (a+b)x^2 &+ a^2b^3x &+abc\\ z&=3x^3 &+ ax^2 &+ (a+2b+3c)x &+1 \end{split} \end{equation}

これは、すべての=,+の前に&を書いて、記号の位置を揃えました。

$x$の累乗を合わせたい場合は次のように array を使うのがいいでしょう。

\begin{equation}
\begin{array}{rrrrr}
y = & x^3+ & (a+b)x^2+ & a^2b^3x+ & abc\\
z = & 3x^3+ & ax^2+ & (a+2b+3c)x + & 1
\end{array}
\end{equation}

これで、次のようになります。

\begin{equation} \begin{array}{rrrrr} y = & x^3+ & (a+b)x^2+ & a^2b^3x+ & abc\\ z = & 3x^3+ & ax^2+ & (a+2b+3c)x + & 1 \end{array} \end{equation}

texでは、arrayはequation内(または\\[ \\]内)で使う必要があります。Mathjaxでは単独で書けてしまいます。

改行幅

equation+splitなどで、行列式が続く場合、改行幅を増したいことがあります。例えば次のような例では縦線がつながって見えます。

\begin{equation} \begin{split} |AB|=& \begin{vmatrix} a_{11}b_{11} & a_{11}b_{12}+a_{12}b_{22}+a_{13}b_{32} \\ a_{21}b_{11} & a_{21}b_{12}+a_{22}b_{22}+a_{23}b_{32} \end{vmatrix} \\ +& \begin{vmatrix} a_{12}b_{21} & a_{11}b_{12}+a_{12}b_{22}+a_{13}b_{32} \\ a_{22}b_{21} & a_{21}b_{12}+a_{22}b_{22}+a_{23}b_{32} \end{vmatrix}\\ +& \begin{vmatrix} a_{13}b_{31} & a_{11}b_{12}+a_{12}b_{22}+a_{13}b_{32} \\ a_{23}b_{31} & a_{21}b_{12}+a_{22}b_{22}+a_{23}b_{32} \end{vmatrix} \end{split} \end{equation}

このようなときには、\\の直後に[長さ]を加えて改行幅を調整します。

\begin{equation} \begin{split} |AB|=& \begin{vmatrix} a_{11}b_{11} & a_{11}b_{12}+a_{12}b_{22}+a_{13}b_{32} \\ a_{21}b_{11} & a_{21}b_{12}+a_{22}b_{22}+a_{23}b_{32} \end{vmatrix} \\[6pt] +& \begin{vmatrix} a_{12}b_{21} & a_{11}b_{12}+a_{12}b_{22}+a_{13}b_{32} \\ a_{22}b_{21} & a_{21}b_{12}+a_{22}b_{22}+a_{23}b_{32} \end{vmatrix}\\[0.5em] +& \begin{vmatrix} a_{13}b_{31} & a_{11}b_{12}+a_{12}b_{22}+a_{13}b_{32} \\ a_{23}b_{31} & a_{21}b_{12}+a_{22}b_{22}+a_{23}b_{32} \end{vmatrix} \end{split} \end{equation}

上の例では次のように指定しています。

\begin{equation}
\begin{split}
|AB|=& 
{一行目の内容}
 ....... \\[6pt]
+&
{二行目の内容}
 ....... \\[0.5em]
+& 
{三行目の内容}
 ....... 
\end{split}
\end{equation}

ptはポイント(1/72インチ)、emは文字の大きさ(不正確な言い方ですが)です。

ただしtexでptは1/72.27インチだということです。htmlで一般的な1/72インチはtexではbpと書きますがMathjaxでは受け付けてくれません。

改行幅指定の単位

次の表の行末には、それぞれその単位で 1 の改行を指定しています。

\begin{equation} \begin{array}{lll} cm & センチメートル & [1cm]\\[1cm] mm & ミリメートル & [1mm]\\[1mm] in & インチ & [1in]\\[1in] pt & ポイント (72.27pt = 1in) & [1pt]\\[1pt] pc & パイカ (1pc = 12pt) & [1pc]\\[1pc] em & 文字サイズ(元はmの幅) & [1em]\\[1em] ex & 現在の文字のxの高さ & [1ex]\\[1ex] bp & ビッグポイント(72bp = 1in) & [Mathjaxでは使えない] \end{array} \end{equation}

htmlと共通に使うのなら、em, ex がおすすめです。

色指定

グレースケールは \textcolor[gray]{0.5}{グレーにしたい部分} など

\begin{equation} \begin{split} x=& \textcolor[gray]{0.7}{ \begin{vmatrix} a_{11} & a_{11}\\ a_{21} & a_{21} \end{vmatrix} b_{11}b_{12} } +& \textcolor[gray]{0.5}{ \begin{vmatrix} a_{11} & a_{12}\\ a_{21} & a_{22} \end{vmatrix} b_{11}b_{22} } +& \textcolor[gray]{0.3}{ \begin{vmatrix} a_{11} & a_{13}\\ a_{21} & a_{23} \end{vmatrix} b_{11}b_{32} } \\ &0.7 &0.5 &0.3 \end{split} \end{equation}

カラーの場合は \textcolor{#990000}{カラーにしたい部分} など。

\begin{align} A= \left(\begin{matrix} \textcolor{#990000}{a_{11}} & a_{12} & a_{13} \\ \textcolor{#990000}{a_{21}} & a_{22} & a_{23} \end{matrix}\right) ,\qquad B= \left(\begin{matrix}%colorbox xx \textcolor{#0099ff}{b_{11}} & \textcolor{#0099ff}{b_{12}} \\ b_{21} & b_{22} \\ b_{31} & b_{32} \end{matrix}\right) \end{align} \begin{equation} |AB|= \begin{vmatrix} \textcolor{#990000}{a_{11}} & a_{12}\\ \textcolor{#990000}{a_{21}} & a_{22} \end{vmatrix} \begin{vmatrix} \textcolor{#0099ff}{b_{11}} & \textcolor{#0099ff}{b_{12}}\\ b_{21} & b_{22} \end{vmatrix} + \begin{vmatrix} a_{11} & a_{13}\\ a_{21} & a_{23} \end{vmatrix} \begin{vmatrix} b_{11} & b_{12}\\ b_{31} & b_{32} \end{vmatrix} + \begin{vmatrix} a_{12} & a_{13} \\ a_{22} & a_{23} \end{vmatrix} \begin{vmatrix} b_{21} & b_{22} \\ b_{31} & b_{32} \end{vmatrix} \end{equation}

水色になっている部分だけを示すと、

...
\textcolor{#0099ff}{b_{11}} & \textcolor{#0099ff}{b_{12}} \\
...