コンテンツへスキップ
Topos Uranos

要約

この講義では、数式モードに入り、そこから適切に出る方法を学ぶ。数式モードではテキストと比べて何が変わるのかを説明する。文字は変数としてイタリックで組まれ、ソースの空白は数えられず、エンジンは各記号の間隔をその種類に応じて計算し、空行は禁止され、二つのモードの一方にしか存在しない記号がある。変数を \textit で書かない理由と、LuaLaTeX でモードの外に書いた数式記号がどうなるかも示す。続いて、$…$ と \(…\) による本文中の数式、その高さの制限、数式内での改行、チルダと句読点を扱い、\[…\] と equation、equation* 環境による別行立て数式を、句読点をつけるべき文の一部として扱う。$$…$$ を使わない理由と、その前に空行を置かない理由も述べる。さらに、\label、\eqref、\numberwithin、\tag による番号づけ、\text と \mathrm による数式中のテキストと明示的な空白、数式モードでの小数点とコンマ、数値と単位のための siunitx パッケージを取り上げる。最後に、ログファイルに現れる典型的なエラーと、避けるべきことをまとめる。

学習目標

  1. 数式モードではテキストと比べて何が変わるかを説明し、誤ったモードで書いた変数、単語、記号の結果を予測する。
  2. 本文中の数式と別行立て数式を選び分け、それぞれを句読点つきの文の一部として、不適切な空行なしに書く。
  3. 別行立て数式に equation で番号をつけ、\eqref で参照し、\numberwithin と \tag による番号を予測する。
  4. 日本の理工系文書の慣行に従って小数と単位つきの量を書き、数式モードが小数点とコンマをどう扱うかを理解する。
  5. ログファイルからエラー「Missing $ inserted」「Bad math environment delimiter」「Missing character」を診断し、ソース中の原因を特定する。

二つの組版モード

ここまでエンジンが組んできたのはテキストである。空白で区切られた単語が、行と段落に配分される。数式は別の規則に従うので、LaTeX は数式を独立した数式モードで組み、区切りによってこのモードに入り、また出る。入ったときに変わることは多く、区切りを見る前にそれを列挙しておく価値がある。この講義の助言のほとんどはそこから導かれるからである。

  • 文字は専用のイタリック、すなわち変数のイタリックで組まれる。その幅と間隔は、単語としてではなく記号として読まれるように設計されている。
  • ソースの空白は数えられない。$x=a-b$ と $x = a - b$ はまったく同じ結果になる。間隔はエンジンが各記号の種類に応じて計算する。通常の記号(文字、数字)、二項演算子(+、-)、関係子(=、<)、句読点(コンマ)、開き括弧と閉じ括弧である。
  • 空行は許されない。空行は段落を終わらせるが、数式は段落の終わりで開いたままでいてはならない。
  • 二つのモードの一方にしか存在しない記号がある。上付き・下付き添字を作る ^ と _、\alpha などのギリシャ文字は数式の記号であり、アクセントつきのラテン文字(é など)はテキストの文字である。漢字や仮名は luatexja のもとではどちらのモードでも組まれるが、数式モードの中でも変数ではない。
例エンジンは記号の種類に応じて間隔をとる
LaTeX コード
テキストとして:x=a-b, y=-b.​数式モードで:$x=a-b$、$y=-b$。​ソースの空白を変えて:$x   =   a-   b$、$y = - b$。
結果
結果

2行目と3行目は、ソースが異なるにもかかわらず同一である。$x=a-b$ のマイナスは両側に被演算子があるので二項演算子であり、中程度の間隔を受ける。$y=-b$ の等号の後では左側に被演算子がないので、単項の記号として扱われ、b に密着する。テキストとして組んだ1行目は何も区別しない。ハイフンはハイフンであり、等号の両側に間隔はない。

変数を textit で書かない理由

以上から、テキストのイタリックと数式モードのイタリックは別物であることがわかる。\textit{x} はテキストのイタリックの文字であり、エンジンが記号に与える間隔をもたない。また、数式モードで書いたラテン文字の単語は単語ではなく、掛け合わされた変数の列であり、それぞれが自分の間隔をもつ。

例テキストのイタリック、数式にした単語、正しい形
LaTeX コード
textitで:\textit{f}(\textit{x}) = \textit{x} + 1、ただし\textit{x} > 0。​数式で:$f(x) = x + 1$、ただし$x > 0$。​数式モードの略語:$GDP = C + I + G$。​テキストとして:$\text{GDP} = C + I + G$。
結果
結果

1行目の間隔は著者が入力した空白だけであり、記号は本文のフォントのものである。文字もテキストのイタリックで、数式の文字とは字形が異なる。数式の中では、エンジンが等号と不等号の両側に関係子の間隔を入れる。3行目の「GDP」は三つの変数の積として読まれ、文字の間隔は不揃いになる。漢字や仮名の場合は事情が違う。luatexja は数式モードの中の和文文字もそのまま組むので、$費用 = 価格 - 割引$ は一見問題なく見える。しかしこれは luatexja の便宜であって数式モード本来の振る舞いではなく、数式中の語句はやはり \text に入れるべきである。amsmath パッケージの \text 命令は、この講義の後半で扱う。

モードの外の数式記号

pdfLaTeX では、本文に \alpha と書くとエラー「Missing $ inserted」になる。この講座のエンジンである LuaLaTeX ではエラーにならない。ギリシャ文字はエラーなしに組まれるが、結果は予測できない。文書中でまだ数式が一つも組まれていなければ文字は消え、すでに数式が組まれていれば、数式フォントから取られて次の語に密着して現れる。命令の後の空白が失われるからである。

例同じギリシャ文字を3回
LaTeX コード
1番目:角 \alpha は鋭角である。​2番目:角 $\alpha$ は鋭角である。​3番目:角 \alpha は鋭角である。
結果
結果

1番目の文は目に見える警告なしに文字を失い、3番目の文はたまたま文字を保つが、「は」に密着し、数式と和文の間にあるべき間隔がない。唯一の痕跡はログファイルにあり、しかも1番目の文についてだけである。

コンパイルログ
Missing character: There is no ^^K (U+000B) in font nullfont!

ソースで \alpha の後の空白は命令名を終わらせ、そのまま読み捨てられる。この空白は省略できない。LuaLaTeX では漢字や仮名も英字と同じく文字とみなされるので、\alphaは は未定義の命令名として読まれてしまう。したがって、LuaLaTeX ではモードの外に書いた数式記号は報告されない。必ず区切りの間に書き、文書を完成とみなす前にログで「Missing character」を検索するのがよい。