もう迷わない!LaTeX「Dots」のエラーと解決策
水平方向の点 (Horizontal Dots)
水平方向の点は、数式などで数列や行列の途中を省略する際に使用されます。主に以下の3つのコマンドが使われます。
-
\ldots
(または\dots
)- これは「low dots」と呼ばれ、ベースライン上に点が配置されます。通常の文章中や、数式で行列の要素の真ん中など、基線に近い位置での省略によく使われます。
- 例:
$a_1, a_2, \ldots, a_n$
(a1​,a2​,…,an​)
-
\cdots
- これは「centered dots」と呼ばれ、点の中心が数式の高さの中央に配置されます。演算子の間(例:+、=など)や、掛け算の省略などに使われることが多いです。
- 例:
$1 + 2 + \cdots + n$
(1+2+⋯+n)
-
\ddots
- これは「diagonal dots」と呼ばれ、点が対角線上に配置されます。行列の対角成分の省略など、斜め方向の省略に用いられます。
- 例:行列の対角成分の省略 (例: ​a11​​⋱​ann​​​)
これらの水平方向の点コマンドは、LaTeXが文脈を判断して適切なスペースを挿入してくれるため、通常は手動でスペースを調整する必要はありません。
垂直方向の点 (Vertical Dots)
垂直方向の点は、主に大きな行列などで列や行の途中を省略する際に使用されます。
\vdots
- これは「vertical dots」と呼ばれ、点が垂直方向(縦)に配置されます。行列の列や行の途中の省略に用いられます。
- 例:行列の列の省略 (例: ​a11​a21​⋮am1​​​)
以下に、これらのコマンドの使用例を示します。
\documentclass{article}
\usepackage{amsmath} % 数式環境で使用するために必要
\begin{document}
% 水平方向の点
数列の省略: $a_1, a_2, \ldots, a_n$
和の省略: $1 + 2 + \cdots + n$
% 垂直方向の点
行列の省略:
\[
A = \begin{pmatrix}
a_{11} & a_{12} & \cdots & a_{1n} \\
a_{21} & a_{22} & \cdots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{m1} & a_{m2} & \cdots & a_{mn}
\end{pmatrix}
\]
% 対角方向の点
\[
I = \begin{pmatrix}
1 & 0 & \cdots & 0 \\
0 & 1 & \cdots & 0 \\
\vdots & \vdots & \ddots & \vdots \\
0 & 0 & \cdots & 1
\end{pmatrix}
\]
\end{document}
この例では、amsmath
パッケージを使用しています。このパッケージは、より高度な数式組版機能を提供し、点に関するコマンドもこれに含まれています。
\vdots
: 垂直方向の点(行列の行や列の省略)\ddots
: 対角線上の点(行列の対角成分の省略)\cdots
: 中央に配置された点(演算子の間など)\ldots
/\dots
: ベースライン上の点(通常の省略)
点の配置や間隔が意図通りにならない
-
トラブルシューティング:
mathtools
パッケージの使用:amsmath
パッケージを拡張するmathtools
パッケージには、\vdotswithin
,\shortvdotswithin
,\hdotsfor
など、より柔軟な点コマンドが用意されています。\vdotswithin{<記号>}
: 指定した記号(例えば=
) の真上に\vdots
を配置します。これは、連立方程式で=
の下に点を揃えたい場合に非常に便利です。\hdotsfor{<列数>}
: 指定した数の列にわたって水平方向の点を配置します。
- 手動での間隔調整:
\quad
,\qquad
(大きなスペース),\;
(中程度のスペース),\,
(小さなスペース),\!
(負のスペース) などのスペースコマンドを使って、手動で間隔を調整することができます。ただし、これは最後の手段と考えるべきで、可能な限り自動調整に任せるのがベストプラクティスです。 - 数式環境の見直し:
pmatrix
,bmatrix
,align
,alignat
などの数式環境の特性を理解し、適切なものを選ぶことで、点の配置が改善されることがあります。特にalign
環境では、&
の位置がアライメントに影響するため、点を置く位置に注意が必要です。
例(
\vdots
の位置調整):\documentclass{article} \usepackage{amsmath, mathtools} % mathtools は amsmath を読み込む \begin{document} % 通常の \vdots (場合によっては中央揃えにならない) \[ \begin{pmatrix} a_{11} \\ \vdots \\ % ここが左に寄る可能性 a_{n1} \end{pmatrix} \] % mathtools の \vdotswithin を使用 (特定の記号に揃える) \[ \begin{aligned} x_1 &= y_1 + z_1 \\ x_2 &= y_2 + z_2 \\ &\vdotswithin{=} \\ % = の下に点を揃える x_n &= y_n + z_n \end{aligned} \] \end{document}
-
原因:
- 文脈の誤解: LaTeX の点コマンドは、周囲の数式要素のタイプ(演算子、関係記号、カンマなど)に基づいて自動的に適切な間隔を調整しようとします。しかし、場合によっては LaTeX の判断がユーザーの意図と異なることがあります。
- 環境の不適切:
array
やalign
といった数式環境の列配置が、点の配置に影響を与えることがあります。
-
問題点: 数式内で点が正しく中央揃えされなかったり、間隔が広すぎたり狭すぎたりする。特に、行列や連立方程式で
\vdots
を使う際によく見られます。
\ddots の対角線がずれる
- トラブルシューティング:
mathtools
パッケージの使用:\ddots
の配置はamsmath
が自動的に調整してくれますが、まれにうまくいかないことがあります。より新しいnicematrix
パッケージのような、行列組版に特化したパッケージを使うと、より柔軟な制御が可能になる場合があります。- 要素の幅を揃える:
\phantom
コマンドを使って、見えない空白を挿入し、特定の要素と同じ幅や高さを確保することで、点の配置を調整できることがあります。 - 手動での調整: ごくまれに、
\hspace
や\vspace
を使って微調整が必要になることもありますが、これは推奨される方法ではありません。
- 原因: 行列の各要素の幅や高さが均一でない場合に、点の配置がずれることがあります。
- 問題点: 行列で
\ddots
を使用した際に、点が対角線上にきれいに並ばない、または要素と重なってしまう。
不必要なエラーメッセージが出る
- トラブルシューティング:
- 適切な位置での使用: 点コマンドは、原則として数式環境のセル内に配置する必要があります。特に
\vdots
は、列の省略を示すため、適切な列に配置されているか確認してください。 amsmath
パッケージの確認: 点コマンドはamsmath
パッケージによって提供されます。このパッケージがプリアンブルで正しく読み込まれているか(\usepackage{amsmath}
)確認してください。読み込まれていない場合、コマンドが未定義となりエラーが発生します。
- 適切な位置での使用: 点コマンドは、原則として数式環境のセル内に配置する必要があります。特に
- 原因: これらの点コマンドが、
array
やmatrix
環境の内部で、セルの区切り(&
)や行の区切り(\\
)がない場所に誤って置かれた場合に発生しやすいです。 - 問題点: 点関連のコマンドを使った際に、「Misplaced \noalign」のようなエラーメッセージが出ることがある。
基本的な水平方向の点
水平方向の点は、数列や簡単な数式の中で省略を示すために使われます。
\cdots
: 中央に点を配置します。演算子(+
,-
,*
など)の間や、掛け算の省略によく使われます。\ldots
(または\dots
): ベースライン上に点を配置します。通常の文章中や、カンマで区切られた数列によく使われます。
\documentclass{article}
\usepackage{amsmath} % \ldots, \cdots を使用するために必要
\begin{document}
% 数列の省略 (a_1, a_2, ..., a_n)
$a_1, a_2, \ldots, a_n$
% 和の省略 (1 + 2 + ... + n)
$1 + 2 + \cdots + n$
% 積の省略 (x_1 x_2 ... x_n)
$x_1 x_2 \cdots x_n$
% 他の例 (1 - 2 + 3 - ...)
$1 - 2 + 3 - \cdots$
\end{document}
行列での水平・垂直・対角方向の点
行列は、水平方向、垂直方向、対角方向の点をすべて使用する典型的な例です。
\ddots
: 行列の対角線上に点。\vdots
: 行列の列の中央に垂直方向の点。\ldots
: 行列の行の中央に水平方向の点。
pmatrix
環境(括弧 ()
で囲まれた行列)、bmatrix
(角括弧 []
)、vmatrix
(垂直線 ||
)など、amsmath
パッケージが提供する様々な行列環境で使用できます。
\documentclass{article}
\usepackage{amsmath} % pmatrix, \ldots, \vdots, \ddots を使用するために必要
\begin{document}
% 一般的な行列の例
\[
A = \begin{pmatrix}
a_{11} & a_{12} & \ldots & a_{1n} \\
a_{21} & a_{22} & \ldots & a_{2n} \\
\vdots & \vdots & \ddots & \vdots \\
a_{m1} & a_{m2} & \ldots & a_{mn}
\end{pmatrix}
\]
% 対角行列の例
\[
I = \begin{bmatrix}
1 & 0 & \cdots & 0 \\
0 & 1 & \cdots & 0 \\
\vdots & \vdots & \ddots & \vdots \\
0 & 0 & \cdots & 1
\end{bmatrix}
\]
% 列ベクトル
\[
\mathbf{v} = \begin{pmatrix}
v_1 \\
v_2 \\
\vdots \\
v_n
\end{pmatrix}
\]
\end{document}
mathtools パッケージによるより柔軟な点
mathtools
パッケージは、amsmath
の機能を拡張し、特に垂直方向の点や複数列にわたる水平方向の点について、より細かい制御を可能にするコマンドを提供します。
\hdotsfor{<列数>}
: 指定した数の列にわたって水平方向の点を配置します。\vdotswithin{<記号>}
: 指定した記号(例えば=
や+
)の真上に垂直方向の点を配置します。連立方程式などで非常に便利です。
\documentclass{article}
\usepackage{amsmath}
\usepackage{mathtools} % \vdotswithin, \hdotsfor を使用するために必要
\begin{document}
% \vdotswithin の例 (等号に垂直方向の点を揃える)
\[
\begin{aligned}
x_1 + x_2 &= y_1 \\
x_1 + x_2 &= y_2 \\
&\vdotswithin{=} \\ % ここで等号に点を揃える
x_1 + x_2 &= y_n
\end{aligned}
\]
% \hdotsfor の例 (指定した列数にわたって水平方向の点を表示)
% この例では、行列の2行目に3列分の水平ドットを表示
\[
M = \begin{pmatrix}
a_{11} & a_{12} & a_{13} & a_{14} \\
\hdotsfor{3} & \hdotsfor{1} \\ % 最初の \hdotsfor{3} は1-3列目に、2番目は4列目(残りの列)にドット
a_{31} & a_{32} & a_{33} & a_{34}
\end{pmatrix}
\]
% もう一つの \hdotsfor の例
% 例えば、行列の真ん中の行全体を点で埋める場合
\[
B = \begin{pmatrix}
b_{11} & b_{12} & b_{13} \\
\hdotsfor{3} \\ % 3列分の水平ドット
b_{31} & b_{32} & b_{33}
\end{pmatrix}
\]
\end{document}
nicematrix
パッケージは、行列組版をさらに高度に制御するための現代的なソリューションです。これは PGF/TikZ
を内部的に使用するため、複数回のコンパイルが必要になる場合がありますが、非常に美しい結果が得られます。
\Vdotsfor{<行数>}
,\Hdotsfor{<列数>}
:mathtools
のものと似ていますが、より堅牢な配置が可能です。\Ldots
,\Cdots
,\Ddots
,\Vdots
: 基本的な点コマンドに対応しますが、nicematrix
環境内でより正確に配置されます。
\documentclass{article}
\usepackage{nicematrix} % 高度な行列組版
\begin{document}
% nicematrix を使用した行列の例
% \begin{NiceMatrix} は amsmath の \begin{matrix} に相当
\[
C = \begin{bNiceMatrix} % 角括弧つき行列
c_{11} & c_{12} & \Cdots & c_{1n} \\ % \Cdots は \cdots に相当
c_{21} & c_{22} & & c_{2n} \\
\Vdots & & \Ddots & \\ % \Vdots は \vdots, \Ddots は \ddots
c_{m1} & c_{m2} & & c_{mn}
\end{bNiceMatrix}
\]
% nicematrix での \Hdotsfor と \Vdotsfor
\[
D = \begin{pNiceMatrix}
d_{11} & d_{12} & \Hdotsfor{2} \\ % 2列分の水平ドット
d_{21} & d_{22} & & d_{24} \\
\Vdotsfor{2} & & & \\ % 2行分の垂直ドット
d_{41} & d_{42} & d_{43} & d_{44}
\end{pNiceMatrix}
\]
\end{document}
注意
nicematrix
パッケージを使用する場合、通常、pdflatex
を2回以上実行して、すべての参照と配置が正しく解決されるようにする必要があります。
TeXのプリミティブコマンドの使用
LaTeXの点コマンドの多くは、TeXのより基本的なプリミティブコマンドに基づいています。これらを直接使うことは一般的ではありませんが、挙動を深く理解したり、非常に特殊なケースで微調整したりする際に役立つことがあります。
- 手動での点の配置: 非常に単純なケースでは、
\cdot
(中心の点)や\textperiodcentered
(これも中心の点、テキストモード)を複数回使って、自分で点を並べることも理論上は可能です。しかし、これは間隔の調整が非常に面倒で、通常は推奨されません。- 例:
$a_1, a_2, \cdot \cdot \cdot, a_n$
(これは推奨されません) - なぜ推奨されないか: LaTeXの点コマンドは、点の種類(通常、演算子、関係など)に応じて適切なスペースを自動的に計算してくれます。手動で並べると、この自動調整の恩恵を受けられず、見た目が悪くなる可能性が高いです。
- 例:
\dots
の内部構造: 実際、\dots
は通常、TeXの内部で\textdots
や\mathdots
のようなコマンドに展開されます。これらは点の間に特定のスペースを挿入します。
スペース調整による微調整
既存の点コマンドの表示が少しだけずれる場合、\hspace
や\vspace
、または\kern
といった低レベルなコマンドで、スペースを微調整することが考えられます。
\kern<長さ>
: スペースだけでなく、文字間のカーニング(間隔)も調整できます。\vspace{<長さ>}
: 垂直方向のスペースを挿入します(数式環境内ではあまり使われません)。\hspace{<長さ>}
: 水平方向のスペースを挿入します。
使用例 (調整は最小限に留めるべき):
\documentclass{article}
\usepackage{amsmath}
\begin{document}
% \vdots の位置が少しずれる場合に、手動で調整する例
\[
A = \begin{pmatrix}
a_{11} \\
\vdots \\
a_{n1}
\end{pmatrix}
\quad % 1em のスペース
B = \begin{pmatrix}
b_{11} \\
\raisebox{0.5ex}{$\vdots$} \\ % \vdots を少し上に移動させる例(非常にまれ)
b_{n1}
\end{pmatrix}
\]
\end{document}
注意: \raisebox
のようなコマンドは、点のベースラインをずらすため、他の要素とのアライメントを崩す可能性があります。このような手動調整は、最後の手段であり、できる限り避け、パッケージの機能で解決を試みるべきです。
TikZ/PGF を使用したカスタム描画
非常に特殊なケースで、既存の点コマンドでは実現できないような複雑な点のパターンや、点と他のグラフィック要素を組み合わせたい場合、TikZ/PGFといった描画パッケージを使用して、完全にカスタムの点を描画することも可能です。
これは「プログラミング」というよりは「グラフィックス描画」に近いですが、LaTeXの数式と連携させることができます。
- 欠点: コードが複雑になる。数式の自動組版の恩恵を受けられないため、手動での調整が多くなる。コンパイルに時間がかかる場合がある。
- 利点: 描画の自由度が無限大。点のサイズ、形、色、配置など、全てを細かく制御できる。
\documentclass{article}
\usepackage{amsmath}
\usepackage{tikz}
\begin{document}
% TikZ を使ってカスタムの点を描画する例
\[
X = \begin{pmatrix}
x_1 \\
\tikz[baseline=(dot.base)]{\node[inner sep=0pt](dot){$\cdot$}; \node[below=2pt of dot.south, inner sep=0pt]{$\cdot$}; \node[below=2pt of dot.south west, inner sep=0pt]{$\cdot$};} \\ % カスタムの縦方向の点
x_n
\end{pmatrix}
\]
% これは非常に簡略化された例であり、実際の使用ではもっと複雑なTikZコードが必要になります。
\end{document}
注意: 上記のTikZの例は非常に単純化されており、実際の数式組版と連携させるには、さらに複雑なTikZコード(ノードの配置、アンカーの設定など)が必要になります。これは、ほとんどのユーザーにとってオーバーキルであり、通常は推奨されません。
特定の要素の寸法を「無視」させたい場合に、これらのコマンドが役立つことがあります。
\hphantom{<内容>}
: 内容の幅だけを取り、高さと深さはゼロとします。他の要素と同じ幅を持ちたいが、それ自体は何も表示したくない場合に。\vphantom{<内容>}
: 内容の高さと深さだけを取り、幅はゼロとします。他の要素と同じ高さを持ちたいが、それ自体は何も表示したくない場合に。\smash{<内容>}
: 内容の高さと深さを無視し、幅のみを考慮します。要素が隣接する行に影響を与えないようにしたい場合などに。
これらのコマンド自体が点を生成するわけではありませんが、点の周りの要素の寸法を調整することで、点の配置を間接的に改善できることがあります。
ほとんどのLaTeXユーザーにとって、amsmath
パッケージが提供する\ldots
, \cdots
, \vdots
, \ddots
コマンドが、水平および垂直の点を表現する最も簡単で、最も堅牢で、最も推奨される方法です。
mathtools
パッケージは、これらの基本コマンドを補完し、特定のユースケース(例えば、特定の記号に点を揃えるなど)でより優れた制御を提供します。
nicematrix
パッケージは、大規模で複雑な行列において、より洗練された描画と配置を可能にします。