ちょこっと MathJax: 基本的な数式表現

no extension

さて,初期設定は前回で完了したので,今回は基本的な数式の書き方を説明していこう。

  1. ちょこっと MathJax: 初期設定
  2. ちょこっと MathJax: 基本的な数式表現 ← イマココ
  3. ちょこっと MathJax: インライン数式と別行立て数式

数式表現の「お約束」

初っ端からナニだが,数式を書く際には昔からある「お約束」が存在する。

まず最初に,大原則として「数式で使う文字はイタリック体1で書く」というのがある。 たとえば,こんな感じだ。

エネルギーと質量には $$E=mc^2$$ の関係がある。

$E$ や $m$ や $c$ の文字がイタリック体になっているのが分かるだろうか。 この大原則をベースに以下の3つの例外が存在する(『LaTeX2ε美文書作成入門』より引用)。

  • 数字はローマン体にする($\mathit{3.14}$ ではなく $3.14$)
  • 複数文字からなる名前はローマン体にする($sin\,x$ ではなく $\sin x$)
  • 単位記号はローマン体にする($3\,m$ ではなく $3\,\mathrm{m}$)

最初の大原則と併せて,以上の4つのルールを守れば簡単な数式表現は問題ない。 $\mathrm{\TeX}$ ではこのルールを加味した組版を半自動で行い(万能ではない), MathJax についても $\mathrm{\TeX}$ と同様の処理ができる。

たとえば数字に関しては普通に 1+2=3 と書けば $1+2=3$ と表示される。 数字部分がローマン体になっているのが分かるだろう。

$\sin$ 関数のように有名な名前については \sin のようにあらかじめコマンド2 が登録されていて, \sin x と書けば $\sin x$ と表示される。 コマンドがないものについては \mathrm コマンドで文字をローマン体に変更できる。 たとえば $3\,\mathrm{m}$ と表示するには 3\,\mathrm{m} と書けばよい。

その他の数式組版規則

実は ISO や JIS で決められている数式の組版規則はもう少し複雑である。

たとえば円周率 $\pi$ は1文字だけど定数の名前なので

$$ \mathrm{\pi}=3.1415\dots $$

とローマン体にする。 また以下の式について

$$ F(x)=\int\,f(x)\,\mathrm{d}x $$

$\mathrm{d}x$ の d はイタリック体 $d$ ではなくローマン体 $\mathrm{d}$ にする,といった決まりがあるそうだ。

更に数学論文や科学論文では所属する学会や研究会などによってローカル・ルールが存在し,名前についても特定のものについては $\mathrm{Spin}(n)$ ではなく $Spin(n)$ と書きなさい,とか色々あるらしい。 数式を論文などで記述する際は,このような細かいルールにも注意する必要がある。

数式は「空き」が重要

少し遡って,先程 $3\,\mathrm{m}$ と表示するのに 3\,\mathrm{m} と記述したことを覚えているだろうか。 この中の \, は「空き」を意味するコマンドである。

明示的な「空き」は見た目を分かりやすく調整するために重要である。

たとえば $\sqrt{2} \times x$ を表現したい場合,素朴に “\sqrt{2}x” と記述すると $\sqrt{2}x$ となり, $\sqrt{2x}$ なのか $\sqrt{2}\,x$ なのか見た目でわかり辛い。 そこで明示的に「空き」を入れて “\sqrt{2}\,x” と記述することで,はっきりと $\sqrt{2}\,x$ であることを示せる3

「空き」を示すコマンドは他にもあるのだが,とりあえず簡単な数式を書く場合には \, コマンドだけ覚えておけばOKである。

MathJax の制限事項

残念ながら MathJax には $\mathrm{\TeX}$ にない制限が存在する。 ここに2つほど紹介しよう。

Neo-Euler には斜体がない

数式好きの方に人気がある(らしい) Euler 書体は MathJax では Web フォント Neo-Euler として提供されている。 Neo-Euler を利用するためには HTML-CSS オプションを以下のように設定する4

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
  "HTML-CSS": {
    availableFonts: [],
    preferredFont: null,
    webFont: "Neo-Euler"
  }
});
</script>

この設定で以下の数式 (「コンクリートなフォントとか ~Computer Modern の兄弟たち~」より引用)

$$
  \left( \int_0^\infty \frac{\sin x}{\sqrt x}\,\mathrm{d}x \right)^2 =
  \prod_{k=1}^\infty \frac{4k^2}{4k^2-1} \neq \frac{\pi}{2010}
$$

を処理すると以下のような表示になる。

Neo-Euler web fonts
Neo-Euler web fonts

一方,同じものを $\mathrm{\LaTeX}$ で Euler + Concrete を指定して 処理すると以下のようになる。

Euler fonts
Euler fonts

両者の違いが分かるだろうか(文字の大きさとかは無視してね)。 ポイントは数字と $\sin$ 関数である。

実は,現行の Neo-Euler には文字と記号の一部に斜体(slant)が用意されていない5。 このせいで(通常ルールとは異なり)数式表現が「立体(upright)」になるため,名前も変数も数字も同じに見えてしまうのだ(厳密には違うけど)。

Note that not all mathematical characters are available in all fonts (e.g., Neo-Euler does not include italic characters), so some mathematics may work better in some fonts than in others.
via The HTML-CSS output processor

$\mathrm{\LaTeX}$ っぽく $\sin$ の見た目だけでも変えたいのであれば,ちょっと裏技的だが以下のようにする。

まず HTML-CSS オプションに mtextFontInherit を追加し true をセットする(mtextFontInherit については前回の記事を参照)。

<script type="text/x-mathjax-config">
MathJax.Hub.Config({
  "HTML-CSS": {
    availableFonts: [],
    preferredFont: null,
    webFont: "Neo-Euler",
    mtextFontInherit: true
  }
});
</script>

そして \sin コマンドを \text{sin} に書き換える。 以下がその結果である。

Neo-Euler web fonts 2
Neo-Euler web fonts 2

どうやったかというと \text{sin} によって sin を(数式フォントではなく)本文のフォントに書き換えたのだ。

まぁ,これで見た目はそれっぽくなったが,やはり無理矢理な感じが強いので, MathJaxNeo-Euler を使うのは(今のところ)お薦めできない6

不等号に注意

$\mathrm{\TeX}$ 記法では不等号記号はそのまま <> 文字を使うのだが, HTML ではこれらの文字は要素タグ(<body> など)を指す記号として使われるため,そのまま数式に使うとブラウザによっては誤動作を起こす可能性がある。 そのため MathJax では不等号記号を示すコマンドが用意されている。

たとえば $a \lt b$ は $a \lt b$ と記述する。 同様に $a \gt b$ は $a \gt b$ と記述する。

\lt\gt は標準の $\mathrm{\TeX}$ 記法には存在しないコマンドなので,数式を流用する場合には注意が必要である。 あるいは $\mathrm{\LaTeX}$ 側で

\newcommand{\lt}{<}
\newcommand{\gt}{>}

のようにコマンドを定義しておく手もある。

TeX 記法のメリットは可搬性にある

こうした細かい面倒がありつつも $\mathrm{\TeX}$ 記法を使う理由は,記述の可搬性にある。 数式を $\mathrm{\TeX}$ 記法で書けば,それはそのまま他のブログや論文に流用できるし,式の構成をちょこちょこっと変えて「翻案」するのも簡単である。 これは MathML のような見た目だけを制御する記述形式にはない利点と言える7

というわけで, MathJax で積極的に数式を書いて読んで流用していくのがいいと思う。

ブックマーク

参考図書

photo
[改訂第7版]LaTeX2ε美文書作成入門
奥村 晴彦 黒木 裕介
技術評論社 2017-01-24
評価

LaTeX2e辞典~用法・用例逆引きリファレンス (DESKTOP REFERENCE) 公共政策入門 ミクロ経済学的アプローチ Rで楽しむ統計 (Wonderful R 1) 岩波データサイエンス Vol.5 数学ガールの秘密ノート/積分を見つめて (数学ガールの秘密ノートシリーズ) 岩波データサイエンス Vol.6 独習 LaTeX2ε 具体例から学ぶ 多様体 【改訂第3版】基礎からわかる情報リテラシー はじめて学ぶリー群 ―線型代数から始めよう

ついに第7版が登場。紙の本で買って常に側に置いておくのが吉。

reviewed by Spiegel on 2017-09-27 (powered by G-Tools)


  1. $\mathrm{\TeX}$ ではイタリック体(italics)と斜体(slanted)は異なる字体である。また斜体はしばしばローマン体(Roman)から合成される場合がある。 [return]
  2. $\mathrm{\TeX}$ では \ から始まる文字列をコマンド(『LaTeX2ε美文書作成入門』では「命令」)という。 \sin は $\sin$ 関数を表すコマンドである。主な数式コマンドについては『LaTeX2ε美文書作成入門』の第5章と第6章に解説があるので,とりあえずは参考になるだろう。 [return]
  3. \sin のようなコマンドは演算子と同じ扱いなので “\sin x” と記述しても結果は $\sin x$ となる。ちなみに $x$ を括弧で囲むと $\sin (x)$ となる。 [return]
  4. Web フォントの指定は TeX-AMS_HTML コンフィギュレーションでのみ可能である。 TeX-AMS_CHTML では今のところ "TeX" 固定になっている。 [return]
  5. MathJax のドキュメントには「イタリック体がない」と書かれているが,厳密には「斜体」のことを言っているようだ。そもそも Euler 書体は手書き文字が元になっていて見た目はイタリック体っぽいデザインをしているため,「イタリック体がない」という言い方は誤解を招く。 [return]
  6. $\mathrm{\LaTeX}$ でも Euler を Concrete と組み合わせるのが普通みたいなので, MathJax でも Web フォントを複数指定できるようにするか Concrete + Euler の組み合わせをひとつのフォントセットとして定義しないとダメだと思う。 [return]
  7. 本ブログでは触れないが, MathJaxAsciiMath にも対応している。 AsciiMath にも $\mathrm{\TeX}$ 記法と同様のメリットがある。 AsciiMath と $\mathrm{\TeX}$ 記法の比較記事は時々目にするが,個人的には使いやすい方を使えばいいと思う。私が $\mathrm{\TeX}$, というか $\mathrm{\LaTeX}$ を気に入っているのは,見た目の美麗さだけを追求する(出来の悪いペイント・ツールのごとき)ことではなく,かといって届かない理想ばかりを追いかける潔癖症なシステムでもなく,賢さと泥臭さを上手く融合させている点にある。そうでなければ,ひとつのシステムが(中身が変貌しつつも)40年近くも継続して使われ続ける筈がない。 [return]