> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/ja/xiang-xi-ji-shi/15-how-do-tex-engines-typeset-tables-2.md).

# TeXエンジンはどのように表を組版するのか 2

## TeXエンジンはどのように表を組版するのか 2

## TeXエンジンでは表をアラインメントと呼びます

「 [TeXのソースコードの文書](https://www.overleaf.com/latex/examples/typeset-the-source-code-documentation-for-tex-e-tex-or-pdftex/qkgfgyspnhcv) KnuthはTeXの「表を組版する」能力については論じていません。代わりに、いわゆる *アラインメント*。TeXの表組版は、実質的には自動化された箱の整列処理です。つまり、箱（表セル、行、列）を配置して、見栄えのよい長方形のグリッドまたは配列を実現します。もちろん、TeXなので *多くの* 細かなニュアンスがあります。

「alignment」という用語は、すべてのTeXエンジンに組み込まれている2つの表組版コマンドの名前にも反映されています。

* `\halign` （horizontal alignment）、および
* `\valign` （vertical alignment）。

この連載では両方のコマンドを通して見ていきます。まずは、後続の `\halign` と `\valign` 詳細記事の基礎を築くために、形式/構造をより形式的に概観します。

### TeXの表は箱とスペーシング

個々の表セルには通常、テキスト行、数式、図版などさまざまな内容が含まれ、その結果、組版された材料の幅・高さ・深さが異なるセル群ができます。TeXは、内容寸法の異なるこれらのセルを使って、各行が一定の高さを持ち、各列が特定の幅を持つ最終的な表を構成しなければなりません。TeXは、可変サイズの表セルの集合から、各行の高さと各列の幅の適切な値を推定する必要があります。

しかし、TeXはセルの内容が実際に組版されるまで、その真の大きさを知ることができません。そのためTeXは、表全体を通して各セルを組版し、表のレイアウトを完成させるために必要なサイズデータを取得します。そのサイズデータから、TeXは各行の正しい高さと各列の幅を決定できます。またTeXは、空のセルや、ユーザーが複数列または複数行にまたがらせたいセルにも遭遇することがあり、それらすべてを慎重に計算に組み入れなければなりません。こうしたさまざまなセル（箱）のサイズデータを「ふるい分け」て初めて、TeXはある `\halign`あるいは行の高さを `\valign` 決定し、その値を表レイアウトアルゴリズムの最終段階で使用します。

実際には、そして「内部では」、TeXの表組版はいくつかの段階から成ります。概略としては、TeXはまず表の「下書き」または「未完成」版を組版し、その間にセルのサイズデータ、および表で使われている任意の `\span` コマンドのデータを収集・処理します。最終段階でTeXは、その「未完成」版を再処理して、 `\halign` 列幅または `\valign` 行の高さを確定し、完成したレイアウトを得ます。これらすべてをこの連載で見ていきます。

## \halign と \valign: 表を構成する2つの方法

すべてのTeXエンジンは2つの *組み込みの* 表（アラインメント）の組版用に設計されたコマンド（プリミティブ）を提供しています： `\halign` と `\valign`。これらは多くの基本機能を共有していますが、根本的に異なる点もあります。 `\halign` と `\valign` の主な違いは

* `\halign`表を行ごとに組版し、個々の行を縦に積み重ねて表の列を作ります
* `\valign`表を列ごとに組版し、個々の列を横に積み重ねて表の行を作ります

### \halign

次の図は、 `\halign`によって作成された表の構成を示しています。表は行ごとに組版され、個々の行が縦に積み重なります。これには次のような結果があります。

* 表の列は、表の行を縦に積み重ねることで生じる
* ページ区切りは表の行の間で発生しうる
* 非表形式の要素を行の間に挿入できる（ `\nolign`による。これは後で見ます）

![](/files/97ad04c11706be63e8cf8ed19e06cb646bd9078e)

### \valign

次の図は、 `\valign`。表は列ごとに組版され、個々の列が横方向（並列）に積み重なります。これには次のような結果があります。

* 表の行は、表の列を横に積み重ねることで生じる
* 改行は表の列の間で発生しうる
* 非表形式の要素を列の間に挿入できる（ `\noalign`による。これは後で見ます）

![](/files/e6ea028dbc04d5722851115dd25faeda426d9d7e)

### 例

次の例は、行 *対*・列のアプローチである \halign と \valign を強調することを意図しています。

```latex
\documentclass{article}
\begin{document}
\pagestyle{empty}
% 箱の枠をぴったり合わせる
\setlength{\fboxsep}{0pt}

これは \verb|\valign| の表です：
\begingroup
% \hsize は \valign の
% 列幅を制御します。さらに
% \parindent を小さめに設定します
\hsize=30pt
\parindent=10pt
\fbox{\valign{
#&#&#\cr % プリアンブル：後で（詳しく！）扱います
A&B&C\cr % この \valign 表の最初の列
D&E&F\cr
G&H&I\cr
}}
\endgroup

% 注：後で説明する理由により
% \halign は \vbox に入れなければならない
これは \verb|\halign| の表です：\fbox{%
\vbox{\halign{
#&#&#\cr % プリアンブル：後で（詳しく！）扱います
A&B&C\cr % この \halign 表の最初の行
D&E&F\cr
G&H&I\cr
}}}
\end{document}
```

[この例をOverleafで開く](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Basic+table+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%25+Close-fitting+box+borders+%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D%0A%0AHere+is+a+%5Cverb%7C%5Cvalign%7C+table%3A+%0A%5Cbegingroup%0A%25+%5Chsize+controls+the+%5Cvalign+%0A%25+column+widths.+We+also+set+%0A%25+%5Cparindent+to+a+smaller+value%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign%7B%0A%23%26%23%26%23%5Ccr+%25+The+preamble%3A+covered+later+%28in+great+detail%21%29%0AA%26B%26C%5Ccr+%25+The+first+COLUMN+of+this+%5Cvalign+table%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%0A%25+Note%3A+for+reasons+explained+later%0A%25+the+%5Chalign+has+to+be+put+in+a+%5Cvbox%0AHere+is+an+%5Cverb%7C%5Chalign%7C+table%3A+%5Cfbox%7B%25%0A%5Cvbox%7B%5Chalign%7B%0A%23%26%23%26%23%5Ccr+%25+The+preamble%3A+covered+later+%28in+great+detail%21%29%0AA%26B%26C%5Ccr+%25+The+first+ROW+of+this+%5Chalign+table%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%7D%0A%5Cend%7Bdocument%7D)

この例では、次の出力が生成されます: ![](/files/c15cdd53ab20b850fea3a3286d4e78211f510fd0)

次の図は、上記のコードで生成された表に注釈を付けた版を示しています。この連載の後半では、次のようなトピックを扱います：

* 表のプリアンブルとは何か？
* なぜ〜を設定するのか `\hsize` と `\parindent` を `\valign` 表？

ここでは、〜の行対列のアプローチだけに注目してください `\halign` *対*. `\valign` 表の構成：

![](/files/3b8dd78adac1ea2e9b55e38dbe3e72123522bf0f)

## \halign と \valign の一般形

まずは〜の基本的な性質と一般的な形式を確認します `\halign` と `\valign` ただし、まだ詳しい内容には踏み込みません。 [述べたとおり](#intro)、本連載では〜の形式/構造をやや形式的に概観します `\halign` と `\valign` コマンドの形式/構造をやや形式的に概観します。

〜の最も一般的な形は `\halign` と `\valign` コマンドは次のように書けます：

`\halign` $$\langle$$⁠`任意指定`⁠$$\rangle$$ { $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ $$\langle$$⁠`本体`⁠$$\rangle$$ }

`\valign` $$\langle$$⁠`任意指定`⁠$$\rangle$$ { $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ $$\langle$$⁠`本体`⁠$$\rangle$$ }

ご覧のとおり、どちらも `\halign` と `\valign` 3つの主な部分から成ります：

* [$$\langle$$⁠`任意指定`⁠$$\rangle$$](#optspec)
* [$$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$](#preamble)
* [$$\langle$$⁠`本体`⁠$$\rangle$$](#body)

## その $$\langle$$⁠任意指定⁠$$\rangle$$

表の既定のサイズ/広がり、いわゆる「自然サイズ」は、その内容によって決まります。補足すると、ここでいうサイズ/広がりは

* その *幅* 〜によって作られた表の `\halign`、または
* その *高さ* 〜によって作られた表の `\valign`

1つの $$\langle$$⁠`任意指定`⁠$$\rangle$$ は、表の自然サイズを「上書き」するために使え、次の2つの形のいずれかを取ります：

* **`を`** $$\langle$$**⁠`寸法`⁠**$$\rangle$$
* **`spread`** $$\langle$$**⁠`寸法`⁠**$$\rangle$$

ここで

* $$\langle$$**⁠`寸法`⁠**$$\rangle$$ は、pt、mm、cm などTeXが理解する単位で与えられる長さです。長さは、適切な単位で指定された値に展開されるコマンドとして指定することもできます。
* **`を`** と **`spread`** は、自然サイズの「上書き」の種類を指定するTeXキーワードです：
  * **`を`**：表のサイズを指定された $$\langle$$⁠`寸法`⁠$$\rangle$$ 値
  * **`spread`**：指定された $$\langle$$⁠`寸法`⁠$$\rangle$$ 値を表の自然サイズに加えます

〜の効果は $$\langle$$⁠`任意指定`⁠$$\rangle$$ は、組版されている表の種類によって異なります。つまり、ある `\halign` 表の自然 *幅*、またはある `\valign` 表の自然 *高さ*.

例をいくつか示します：

* `\halign **to 100pt**{...}`：〜を設定します `\halign` 表の幅を `100pt`
* `\valign **to 50pt**{...}`：〜を設定します `\valign` 表の高さを `30pt`
* `\halign **spread 30pt**{...}`：30pt を〜に加えます `\halign` 表の自然幅。逆に、 **spread -30pt** と書くと表の幅は30pt減ります。
* `\valign **spread 20pt**{...}`：20pt を〜に加えます `\valign` 表の自然高さ。逆に、 **spread -20pt** と書くと表の高さは20pt減ります。

次のコードは上の表の例を再利用していますが、〜を適用しています $$\langle$$⁠`任意指定`⁠$$\rangle$$ を〜に `\valign` と `\halign` 表：

```latex
\documentclass{article}
\begin{document}
\pagestyle{empty}
% 箱の枠をぴったり合わせる
\setlength{\fboxsep}{0pt}

これは \verb|\valign| の表です：
\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign to 50pt{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup

これは \verb|\halign| の表です：
\fbox{%
\vbox{\halign to 100pt{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}}
\end{document}
```

[この例をOverleafで開く](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Basic+table+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%25+Close-fitting+box+borders+%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D%0A%0AHere+is+a+%5Cverb%7C%5Cvalign%7C+table%3A+%0A%5Cbegingroup%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign+to+50pt%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%0AHere+is+an+%5Cverb%7C%5Chalign%7C+table%3A%0A%5Cfbox%7B%25%0A%5Cvbox%7B%5Chalign+to+100pt%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%7D%0A%5Cend%7Bdocument%7D)

この例の出力は以下のとおりです：

![](/files/b9cea11049136b8b0c8199743367351643d44f3e)

――ただし、どちらの表も内容が「ぎゅっと詰まって」いることに注意してください。その理由は、TeXが内容を引き伸ばして、〜によって与えられた追加スペースを埋めるために使える柔軟な空白（グルー）がないからです **`を`** $$\langle$$**⁠`寸法`⁠**$$\rangle$$。ここでは先に進んで、〜について触れておきます `\tabskip` コマンドで囲めるようになります。

#### \tabskip コマンドの初歩的な紹介

表のレイアウトの見栄えには、行や列の間隔の調整が必要な場合があります。そのため、当然ながらTeXエンジンには `\tabskip` それを可能にするコマンドがあります。 `\tabskip` は、TeXが〜の列の間に置く柔軟な空白（「グルー」）の量を設定（および変更）するために使われます `\halign` または〜の行の間に `\valign`。後続の記事で〜を詳しく見ます `\tabskip` をさらに詳しく扱います。

導入例として、次のコードでは〜の設定を使います `\tabskip` これによりTeXは、〜の行の間に（非常に）柔軟な空白を挿入します `\valign` 表。この柔軟な空白によって行を広げ、〜によって生じた追加スペースを埋めることができます $$\langle$$⁠`任意指定`⁠$$\rangle$$ の **`50ptへ`**:

```latex
\documentclass{article}
\setlength{\fboxsep}{0pt}
\\setlength{\\parindent}{0pt}
\newcommand{\optspec}{\(\langle \texttt{任意指定} \rangle\)}
\begin{document}
\pagestyle{empty}
これは \verb|\valign| の表です：
\vspace{6pt}

\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup
\vspace{6pt}

これは同じ \verb|\valign| の表ですが、\optspec{} が ``\texttt{to 50pt}'' になっています。行の間に利用可能な ``伸縮可能なグルー'' がないため、行が ``詰まって'' いる様子に注目してください：

\vspace{6pt}
\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign to 50pt{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup
\vspace{6pt}

ここでは、\optspec{} が ``\texttt{to 50pt}'' の \verb|\valign| 表を使いますが、\verb|\tabskip| コマンドで ``柔軟な間隔'' を与えます。ここで \verb|\tabskip| は、\verb|\valign| の行が ``広がって'' 利用可能な余分な空間を埋められるだけの ``グルー'' を提供しています。以下が ``広がった'' \verb|\valign| の表です：

\tabskip=0pt plus1fil % これは \tabskip を非常に柔軟なグルーに設定します
\vspace{6pt}

\def\mylen{50pt}
\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign to \mylen{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup
\end{document}
```

[この例をOverleafで開く](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Basic+example+using+tabskip+glue\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D%0A%5Csetlength%7B%5Cparindent%7D%7B0pt%7D%0A%5Cnewcommand%7B%5Coptspec%7D%7B%5C%28%5Clangle+%5Ctexttt%7Boptional+specification%7D+%5Crangle%5C%29%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0AHere+is+a+%5Cverb%7C%5Cvalign%7C+table%3A%0A%5Cvspace%7B6pt%7D%0A%0A%5Cbegingroup%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%5Cvspace%7B6pt%7D%0A%0AHere+is+the+same+%5Cverb%7C%5Cvalign%7C+table+but+with+an+%5Coptspec%7B%7D+of+%60%60%5Ctexttt%7Bto+50pt%7D%27%27.+Note+how+the+rows+are+%60%60bunched+up%27%27+because+there%27s+no+available+%60%60stretchable+glue%27%27+between+the+rows%3A+%0A%0A%5Cvspace%7B6pt%7D%0A%5Cbegingroup%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign+to+50pt%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%5Cvspace%7B6pt%7D%0A%0AWe%27ll+use+the+%5Cverb%7C%5Cvalign%7C+table+with+%5Coptspec%7B%7D+of+%60%60%5Ctexttt%7Bto+50pt%7D%27%27%2C+but+provide+%60%60flexible+spacing%27%27+via+the+%5Cverb%7C%5Ctabskip%7C+command.+Here%2C+%5Cverb%7C%5Ctabskip%7C+is+providing+enough+%60%60glue%27%27+to+enable+the++%5Cverb%7C%5Cvalign%7C+rows+to++%60%60stretch+out%27%27+and+fill+any+available+extra+space.+Here+is+the+%60%60stretched+out%27%27+%5Cverb%7C%5Cvalign%7C+table%3A%0A%0A%5Ctabskip%3D0pt+plus1fil+%25+This+sets+%5Ctabskip+to+a+very+flexible+glue%0A%5Cvspace%7B6pt%7D%0A%0A%5Cdef%5Cmylen%7B50pt%7D%0A%5Cbegingroup%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign+to+%5Cmylen%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

この例では、次の出力が生成されます:

![](/files/0f55e6456ab12c7119673df38f5ff629dfbdb2ad)

## 表の導入 $$\langle$$⁠プリアンブル⁠$$\rangle$$ と $$\langle$$⁠本体⁠$$\rangle$$

この節では表の $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$、および *簡単に* 表に少し触れます $$\langle$$⁠`本体`⁠$$\rangle$$ これは後で [より詳しく検討されます](#bodydetails).

この連載の後続記事では〜を探ります $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ と $$\langle$$⁠`本体`⁠$$\rangle$$ をより詳しく、特にTeXによる表の使用と処理を $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$.

上で述べたように、〜の最も一般的な形式は `\halign` または `\valign` 表は次のように書けます：

`\halign` $$\langle$$⁠`任意指定`⁠$$\rangle$$ { $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ $$\langle$$⁠`本体`⁠$$\rangle$$ }

`\valign` $$\langle$$⁠`任意指定`⁠$$\rangle$$ { $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ $$\langle$$⁠`本体`⁠$$\rangle$$ }

### その $$\langle$$⁠プリアンブル⁠$$\rangle$$

その $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ 節には1つの $$\langle$$⁠`プリアンブル行`⁠$$\rangle$$ であり *終端され* 〜によって `\cr` コマンド。したがって、 $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ は次のように書き換えられます：

$$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$=$$\langle$$⁠`プリアンブル行`⁠$$\rangle$$**`\cr`**

### その $$\langle$$⁠本体⁠$$\rangle$$

同様に、 $$\langle$$⁠本体⁠$$\rangle$$ 節はさらに1つ以上の構成「行」に分解できますが、ここでは各行に2つの選択肢があります：

* ある表を構成するセルの集合からなる行 `\halign` 行、または `\valign` 列；または
* ある `\noalign` ある〜の間に要素を「挿入」するコマンド `\halign`の行または `\valign`の列。

ここでは〜は無視します `\noalign` コマンド（ [この記事の後半を参照](#noalign)参照）とし、〜の各行は $$\langle$$⁠本体⁠$$\rangle$$ セルの集合のデータであり、 *終端され* によって `\cr` コマンドで囲めるようになります。

無視すると `\noalign`で述べたように、 $$\langle$$⁠`本体`⁠$$\rangle$$ 節には、ユーザーの内容を表す行の並びが含まれ、各行を $$\langle$$⁠`本体行`⁠$$\rangle$$ これは *終端され* それに付随する `\cr` コマンドで囲めるようになります。

その $$\langle$$⁠`本体`⁠$$\rangle$$ は次のように書き換えられます：

$$\langle$$⁠本体行$${}\_1$$⁠$$\rangle$$\cr $$\langle$$⁠本体行$${}\_2$$⁠$$\rangle$$\cr $$\langle$$⁠本体行$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$⁠本体行$${}*\mathrm{N}$$⁠$$\rangle$$\cr

これらをまとめると、〜の一般形式を書き換えて `\halign` と `\valign` 次のようになります：

`\halign` $$\langle$$⁠`任意指定`⁠$$\rangle$$ { $$\langle$$⁠`プリアンブル行`⁠$$\rangle$$\cr $$\langle$$⁠本体行$${}\_1$$⁠$$\rangle$$\cr $$\langle$$⁠本体行$${}\_2$$⁠$$\rangle$$\cr $$\langle$$⁠本体行$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$⁠本体行$${}*\mathrm{N}$$⁠$$\rangle$$\cr }

`\valign` $$\langle$$⁠`任意指定`⁠$$\rangle$$ { $$\langle$$⁠`プリアンブル行`⁠$$\rangle$$\cr $$\langle$$⁠本体行$${}\_1$$⁠$$\rangle$$\cr $$\langle$$⁠本体行$${}\_2$$⁠$$\rangle$$\cr $$\langle$$⁠本体行$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$⁠本体行$${}*\mathrm{N}$$⁠$$\rangle$$\cr }

後続の記事で説明する理由により、 $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$、単一の $$\langle$$⁠`プリアンブル行`⁠$$\rangle$$は表内のすべての行とは異なる形式を持ちます $$\langle$$⁠`本体`⁠$$\rangle$$。また、 [〜を再び取り上げます `\noalign` コマンド](#noalign) これは表内でも使うことができます $$\langle$$⁠`本体`⁠$$\rangle$$.

### その $$\langle$$⁠プリアンブル行⁠$$\rangle$$

その $$\langle$$⁠`プリアンブル行`⁠$$\rangle$$ は *極めて重要な* 役割を果たします。なぜなら、表の内容を組版するための一種の「設計図」を提供するからです――`\halign` 行または `\valign` 列――表に含まれる $$\langle$$⁠`本体`⁠$$\rangle$$。 $$\langle$$⁠`プリアンブル行`⁠$$\rangle$$ には、ある〜の行を構成するために使われるセルの「テンプレート」も含めることができます `\halign` またはある〜の列 `\valign`――この話題は詳しく見ていきます。

〜の目的は $$\langle$$⁠`プリアンブル行`⁠$$\rangle$$ には2つあります：

* それは〜を決定します *最大* ある〜の各行あたりのセル数 `\halign` またはある〜の各列あたりのセル数 `\valign`.
* また、格納します *セルテンプレート* これにより、表内のセルに対する書式設定や内容の挿入を自動化できます $$\langle$$⁠`本体`⁠$$\rangle$$。セルテンプレートは任意で、「空」にすることもできますし、特定のセルの実際の内容の前および/または後にTeXが自動で挿入する文字やコマンドを含めることもできます。これにより、それらを適用したい各セルに毎回その文字やコマンドを手で書いたり入れたりする手間を省けます。

**注**：ある `\halign` 行、または `\valign` 列は、〜で指定された最大数より少ないセルしか含められます $$\langle$$⁠`プリアンブル行`⁠$$\rangle$$ が、その最大数を超えて含めることはできません。そうしないとTeXはエラーを出します。ここでは〜の詳細は省略します *循環* プリアンブル。

構造図を続けると、 $$\langle$$⁠`プリアンブル行`⁠$$\rangle$$ を

* 1つの `\halign` 最大〜個の $$\mathrm{K}$$ あたりのセル数を持つ表 *行*、または
* ある `\valign` 最大〜個の $$\mathrm{K}$$ あたりのセル数を持つ表 *列*

は次のように書けます：

$$\langle$$⁠テンプレート$${}\_1$$⁠$$\rangle$$&$$\langle$$⁠テンプレート$${}\_2$$⁠$$\rangle$$&$$\langle$$⁠テンプレート$${}*3$$⁠$$\rangle$$ $$\cdots$$ &$$\langle$$⁠テンプレート$${}*\mathrm{K}$$⁠$$\rangle$$

ここで `&` は *alignment タブ文字* これは1つのセルの終わりと次のセルの始まりを示します。従来、アンパサンド文字（`&`）が alignment tab として使われますが、 [カテゴリコード](/latex/ja/sononotopikku/43-table-of-tex-category-codes.md) カテゴリコード4を持つ任意の文字でも代用できます。

念のため、 $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ は次のように書けます $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$=$$\langle$$⁠`プリアンブル行`⁠$$\rangle$$**`\cr`**、あるいは同等に

$$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$=$$\langle$$⁠テンプレート$${}\_1$$⁠$$\rangle$$&$$\langle$$⁠テンプレート$${}\_2$$⁠$$\rangle$$&$$\langle$$⁠テンプレート$${}*3$$⁠$$\rangle$$ $$\cdots$$ &$$\langle$$⁠テンプレート$${}*\mathrm{K}$$⁠$$\rangle$$**`\cr`**

#### 各セルの構造 $$\langle$$⁠テンプレート⁠$$\rangle$$

各セルは $$\langle$$⁠テンプレート$${}\_i$$⁠$$\rangle$$ は次のように書けます：

$$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ その内訳は次のとおりです：

* $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$ TeXが自動的に挿入する文字またはコマンド（トークン）の集合です *の前に* セルのユーザー提供内容 $$i$$;
* $$\texttt{#}$$ はプレースホルダで、セル内のどこにユーザー提供内容が入るかを示しています $$i$$。繰り返しますが、 `#` 文字は単なる *慣習*です。 [カテゴリコード](/latex/ja/sononotopikku/43-table-of-tex-category-codes.md) カテゴリコード6を持つ任意の文字で代用できます。なお、カテゴリコード6はマクロの引数に使われます。
* $$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ TeXが自動的に挿入する文字またはコマンド（トークン）の集合です *の後に* セルのユーザー提供内容 $$i$$.

すべての〜は $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$ と $$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ は *オプションの*：セルの内容の前後に文字やコマンドを使う必要はありません。

**〜を完成させる** $$\langle$$**⁠プリアンブル⁠**$$\rangle$$

最後に、上の記法を使うと、 $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ を

* 1つの `\halign` 最大〜個の $$\mathrm{K}$$ あたりのセル数を持つ表 *行*、または
* ある `\valign` 最大〜個の $$\mathrm{K}$$ あたりのセル数を持つ表 *列*

は次のように書けます：

$$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$=$$\langle$$⁠`プリアンブル行`⁠$$\rangle$$`**\cr**`

または

$$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$=$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}*3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}*3$$⁠$$\rangle$$$$\cdots$$$$\langle$$⁠$$\texttt{U}*\mathrm{K}$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}*\mathrm{K}$$⁠$$\rangle$$`**\cr**`

**その** $$\langle$$**⁠プリアンブル⁠**$$\rangle$$ **および行と列の数え方**

1つの **`\halign`** 〜を持つ表 $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ を指定する $$\mathrm{K}$$ セルと、 $$\langle$$⁠`本体`⁠$$\rangle$$ を含む $$\mathrm{N}$$ $$\langle$$⁠`本体行`⁠$$\rangle$$ は、〜を持つ表を生成します $$\mathrm{K}$$ *列* と $$\mathrm{N}$$ *行*。次の図に示すとおりです：

![](/files/d4f7d5b01935d8f0eab1e0eae909388843eb3fc8)

1つの **`\valign`** 〜を持つ表 $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ を指定する $$\mathrm{K}$$ セルと、 $$\langle$$⁠`本体`⁠$$\rangle$$ を含む $$\mathrm{N}$$ $$\langle$$⁠`本体行`⁠$$\rangle$$ は、〜を持つ表を生成します $$\mathrm{K}$$ *行* と $$\mathrm{N}$$ *列*。次の図に示すとおりです：

![](/files/277cd5226dd5a353860693357fea2acff489e753)

### 理屈はこれくらいにして、例を見ましょう！

後で詳しく見るように、TeXが表の内容―― [$$\langle$$⁠`本体`⁠$$\rangle$$](#body)表本体に含まれるセル――を処理するとき、プリアンブルで定義されたセルテンプレートの有無を確認します。 $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$なぜならTeXは、ユーザーの内容の前および/または後に挿入されるテンプレートトークンを探しているからです。以下の最小例では、セルテンプレートの使い方を示します $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ ある `\halign` と `\valign` 表。

#### セルテンプレートを使った \halign の表

次の例は、ある `\halign` 表を示します。この表では、セルテンプレートを使って各行の最初のセルの内容の前後に自動的に二重引用符を挿入しています。つまり、最初の列のすべてのセルに影響するテンプレートです：

```latex
\documentclass{article}
\usepackage{parskip} % \parindent を 0pt に設定
% 適当な小さめのページサイズを選ぶ
\usepackage[paperheight=10cm,paperwidth=12cm,textwidth=8cm]{geometry}
\setlength{\tabskip}{20pt} % \halign の列間隔を広げる
\begin{document}
\pagestyle{empty}

これはセルテンプレート \textit{なし} の \verb|\halign| の表です：

\halign{
% <preamble> の各 '#' の前後には何も置かない
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}

これは同じ \verb|\halign| の表ですが、各行の最初のセルに自動的に二重引用符が追加されています。つまり、最初の列のすべてのセルに影響します：

\halign{
% プリアンブル内の引用符テンプレート：
``#''&#&#\cr % 最初の # の前後に二重引用符を付ける
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\end{document}
```

[この例をOverleafで開く](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=halign+example+of+cell+templates\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bparskip%7D+%25+Set+%5Cparindent+to+0pt%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D10cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D8cm%5D%7Bgeometry%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B20pt%7D+%25+Space+out+the+%5Chalign+columns%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%0AHere+is+an+%5Cverb%7C%5Chalign%7C+table+%5Ctextit%7Bwithout%7D+cell+templates%3A+%0A%0A%5Chalign%7B%0A%25+Nothing+before+or+after+each+%27%23%27+in+the+%3Cpreamble%3E%0A%23%26%23%26%23%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%0AHere+is+the+same+%5Cverb%7C%5Chalign%7C+table+but+with+double+quotes+automatically+added+to+the+first+cell+in+each+row%3B+i.e.%2C+it+affects+every+cell+in+the+first+column%3A+%0A%0A%5Chalign%7B%0A%25+Quotation+templates+in+the+preamble%3A%0A%60%60%23%27%27%26%23%26%23%5Ccr+%25+Double+quote+marks+before+and+after+first+%23%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cend%7Bdocument%7D)

この例では、次の出力が生成されます:

![](/files/17b59e9726a22c7d6090ec6998f247b0856cde07)

次の図は、〜の注釈付き版です `\halign` 上の例で生成された表。ここでは、3セルの「形式的」構造を比較します $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$:

$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_3$$⁠$$\rangle$$`**\cr**`

実際の $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ の ` ``#''&#&#**\cr** `セルテンプレートの有無を強調しています：

![](/files/6d5ec8f7fbcf51856482f81b64fecdd5af2d334f)

#### セルテンプレートを使った \valign の表

次の例は、ある `\valign` 表を示します。この表では、すべてのセルに対してテンプレートを使い、ユーザーの内容を囲む数字を自動挿入します。

```latex
\documentclass{article}
\usepackage{parskip} % \parindent を 0pt に設定
% 適当な小さめのページサイズを選ぶ
\usepackage[paperheight=14cm,paperwidth=12cm,textwidth=10cm]{geometry}
\setlength{\tabskip}{8pt} % \valign の行間隔を広げる
\begin{document}
\pagestyle{empty}

これはセルテンプレート \textit{なし} の \verb|\valign| の表です：

\begingroup
\hsize=25pt
\valign{
% 各 '#' の前後には何も置かない
% <preamble> に
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\endgroup

これは同じ \verb|\valign| の表ですが、セルテンプレートを使ってすべてのセルに数字を自動挿入しています：

\begingroup
\hsize=25pt
\valign{
% 各 '#' の前後に数字を挿入
% <preamble> に
1#2&3#4&5#6\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\endgroup
\end{document}
```

[この例をOverleafで開く](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+of+valign+cell+templates\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bparskip%7D+%25+Set+%5Cparindent+to+0pt%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D14cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D10cm%5D%7Bgeometry%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B8pt%7D+%25+Space+out+the+%5Cvalign+rows%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%0AHere+is+a+%5Cverb%7C%5Cvalign%7C+table+%5Ctextit%7Bwithout%7D+cell+templates%3A%0A%0A%5Cbegingroup%0A%5Chsize%3D25pt%0A%5Cvalign%7B%0A%25+Nothing+before+or+after+each+%27%23%27+in+%0A%25+the+%3Cpreamble%3E%0A%23%26%23%26%23%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cendgroup%0A%0AHere+is+the+same+%5Cverb%7C%5Cvalign%7C+table+but+using+cell+templates+to+automatically+insert+digits+into+every+cell%3A+%0A%0A%5Cbegingroup%0A%5Chsize%3D25pt%0A%5Cvalign%7B%0A%25+Digits+inserted+before+and+after+every+%27%23%27+in%0A%25+the+%3Cpreamble%3E%0A1%232%263%234%265%236%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

この例では、次の出力が生成されます:

![](/files/7ada27b8ce0aba56d5bb00804a6fdfacb2b46c50)

次の図は、〜の注釈付き版です `\valign` 上の例で生成された表。ここでは、3セルの「形式的」構造を比較します $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$:

$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_3$$⁠$$\rangle$$`**\cr**`

実際の $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ の `1#2&3#4&5#6**\cr**`セルテンプレートの使用を強調しています $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$:

![](/files/8e715be33f985a905304dc95ed4721621b62274b)

セル用のテンプレートがどのように $$i$$ ($$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$）が適用されるのかを $$i$$各 `\valign` 列の $$i$$番目の *行* セルに適用され、その結果、影響を受ける。

#### セルテンプレートを使ったテキストのスタイル設定

次の例では、以下の $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ （セルテンプレート）を使って、各行または各列に含まれるテキストをスタイル設定します:

`\textbf{#}&\textit{#}&\texttt{#}\cr`

これを $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ 3セルの「正式な」構造と比べると、 $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$:

$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_3$$⁠$$\rangle$$`**\cr**`

次のことがわかります:

$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$=`\textbf{`

$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$=`}`

$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$=`\textit{`

$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$=`}`

$$\langle$$⁠$$\texttt{U}\_3$$⁠$$\rangle$$=`\texttt{`

$$\langle$$⁠$$\texttt{V}\_3$$⁠$$\rangle$$=`}`

これらのセルテンプレートが、例えば `\textbf{#}` 単一のパラメータ（セル内容）を持つマクロに似ていることに注目してください。

```latex
セルテンプレートを使ってテキストをスタイル設定した \verb|\valign| 表:

\begingroup
\hsize=25pt
\valign{
\textbf{#}&\textit{#}&\texttt{#}\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\endgroup

セルテンプレートを使ってテキストをスタイル設定した \verb|\halign| 表:

\halign{
\textbf{#}&\textit{#}&\texttt{#}\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
```

[この例をOverleafで開く](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Styling+with+cell+templates\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bparskip%7D+%25+Set+%5Cparindent+to+0pt%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D14cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%25+Space+out+the+%5Chalign+columns+or+%5Cvalign+rows%0A%5Csetlength%7B%5Ctabskip%7D%7B8pt%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0AA+%5Cverb%7C%5Cvalign%7C+table+with+text+styled+using+cell+templates%3A%0A%0A%5Cbegingroup%0A%5Chsize%3D25pt%0A%5Cvalign%7B%0A%5Ctextbf%7B%23%7D%26%5Ctextit%7B%23%7D%26%5Ctexttt%7B%23%7D%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cendgroup%0A%0AAn+%5Cverb%7C%5Chalign%7C+table+with+text+styled+using+cell+templates%3A%0A%0A%5Chalign%7B%0A%5Ctextbf%7B%23%7D%26%5Ctextit%7B%23%7D%26%5Ctexttt%7B%23%7D%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cend%7Bdocument%7D)

この例では、次の出力が生成されます:

![](/files/e21f5cefd344b9b674ca85c0a51ad2bbc4b21c78)

## 表の詳細 $$\langle$$⁠本体⁠$$\rangle$$

の節で [表の導入 $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ と $$\langle$$⁠`本体`⁠$$\rangle$$](#preamble) 一時的に `\noalign`で述べたように、 $$\langle$$⁠`本体`⁠$$\rangle$$ の `\halign` または `\valign` 表が複数の行から成り、それぞれが $$\langle$$⁠本体行$${}\_j$$⁠$$\rangle$$、次のようになっていることを見ました:

* 各 $$\langle$$⁠本体行$${}\_j$$⁠$$\rangle$$ は次で終了します `\cr` コマンド
* 各 $$\langle$$⁠本体行$${}\_j$$⁠$$\rangle$$ の `\halign` は表の行であり
* 各 $$\langle$$⁠本体行$${}\_j$$⁠$$\rangle$$ の `\valign` は表の列です

行の並び、 $$\langle$$⁠本体行$${}\_j$$⁠$$\rangle$$、次のように $$j=1\ldots\mathrm{N}$$、 $$\mathrm{N}$$ の行を生成し `\halign` または $$\mathrm{N}$$ の列を作成します `\valign`。以下の図に要約されているように、一般的な $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ のような

$$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$=$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}*3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}*3$$⁠$$\rangle$$$$\cdots$$$$\langle$$⁠$$\texttt{U}*\mathrm{K}$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}*\mathrm{K}$$⁠$$\rangle$$`**\cr**`

は、最大 $$\mathrm{K}$$ の各 $$\mathrm{N}$$ $$\langle$$⁠`本体行`⁠$$\rangle$$ のエントリに対してセルテンプレートを指定します $$\langle$$⁠`本体`⁠$$\rangle$$:

![](/files/5eeadadaa597fcb87487d27aa35fb872627b5d3a)

### 各 $$\langle$$⁠本体行$${}\_j$$⁠$$\rangle$$

各行は $$\langle$$⁠本体行$${}\_j$$⁠$$\rangle$$ 表の $$\langle$$⁠本体⁠$$\rangle$$ 最大 $$\mathrm{K}$$ 個のセルの内容を含みます—これは表の $$\langle$$⁠プリアンブル⁠$$\rangle$$によって決まります—そして一般形は次のとおりです:

$$\langle$$⁠本体行$${}\_j$$⁠$$\rangle$$=$$\langle$$⁠セル$${}\_1$$⁠$$\rangle$$$$\texttt{&}$$$$\langle$$⁠セル$${}\_2$$⁠$$\rangle$$$$\texttt{&}$$$$\langle$$⁠セル$${}*3$$⁠$$\rangle$$$$\texttt{&}$$$$\cdots$$$$\texttt{&}$$$$\langle$$⁠セル$${}*\mathrm{K}$$⁠$$\rangle$$`**\cr**`

その内訳は次のとおりです：

* $$\langle$$⁠セル$${}\_i$$⁠$$\rangle$$ は、ある $$i$$の番目のセルに対するユーザーの内容を表します $$\langle$$⁠本体行$${}\_j$$⁠$$\rangle$$
* その **`&`** 文字は *整列タブ* で使用されるものと同じ $$\langle$$⁠プリアンブル⁠$$\rangle$$）と呼ばれ、1つのセルの終わりと次のセルの始まりを示します。繰り返しますが、 **`&`** の使用は単なる伝統（慣例）です。なぜなら、どんな文字でも [カテゴリコード](/latex/ja/sononotopikku/43-table-of-tex-category-codes.md) カテゴリコード4を持つ任意の文字でも代用できます。

各 $$\langle$$⁠本体行$${}\_j$$⁠$$\rangle$$ は最大 $$\mathrm{K}$$ 個のセルを含むことができ（ $$\langle$$⁠プリアンブル⁠$$\rangle$$によって決まり）、それでも *より少ない* 個のセルと、任意の $$\mathrm{K}$$ 内の $$\langle$$⁠セル$${}\_i$$⁠$$\rangle$$ は $$\langle$$⁠本体行$${}\_j$$⁠$$\rangle$$ 空にできるからです。

次の例は、ある $$\langle$$⁠プリアンブル⁠$$\rangle$$ の `#&#&#&#&#\cr` 各行あたり最大5セルを許容するため、 $$\langle$$本文行$$\rangle$$; ただし、組版された表には5セル未満の行も含まれています:

```latex
\verb|\valign| 表で、\textit{列}ごとに1〜5セルを持つもの:

\begingroup
% \hsize は \valign の列幅（組版行のサイズ）を制御します。
\hsize=40pt
\fbox{\valign{
% 1列あたり5セルを許可するプリアンブルを使用
% ほとんどの列では5セル分の内容を与えない
#&#&#&#&#\cr% 1列あたり5セル
\(\mathrm{Cell}{}_1\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)&\(\mathrm{Cell}{}_4\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)&\(\mathrm{Cell}{}_4\)&\(\mathrm{Cell}{}_5\)\cr
}}
\endgroup

% 注：後で説明する理由により
% \halign は \vbox に入れなければならない
各\textit{行}あたり1〜5セルを持つ \verb|\halign| 表:

\fbox{%
\vbox{\halign{
% 1行あたり5セルを許可するプリアンブルを使用
% ほとんどの行では5セル分の内容を与えない
#&#&#&#&#\cr % 1行あたり5セル
\(\mathrm{Cell}{}_1\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)&\(\mathrm{Cell}{}_4\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)&\(\mathrm{Cell}{}_4\)&\(\mathrm{Cell}{}_5\)\cr
}}}
```

[この例をOverleafで開く](/latex/ja/xiang-xi-ji-shi/15-how-do-tex-engines-typeset-tables-2.md)

この例では、次の出力が生成されます:

![](/files/38a4cdd64aeac030c70272bed5dc529a26b8be80)

次の `\halign` 例では、各行のセル数が変わることと、セルを空にできることを示します—空のセルが表内の連続した **`&`** 文字によってどのように生成されるかに注目してください:

```latex
一部の空セルを含む \verb|\halign| 表—表の \(\langle\texttt{body}\rangle\) に連続した \texttt{\&} 文字があることに注目:

\fbox{%
\vbox{\halign{
% 1行あたり5セルを許可するプリアンブルを使用
% ほとんどの行では5セル分の内容を与えない
#&#&#&#&#\cr % 1行あたり5セル
\(\mathrm{Cell}{}_1\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)\cr
\(\mathrm{Cell}{}_1\)&&\(\mathrm{Cell}{}_3\)\cr
&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)&\(\mathrm{Cell}{}_4\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&&&\(\mathrm{Cell}{}_5\)\cr
}}}
```

[この例をOverleafで開く](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Empty+cells+Number+of+cells+per+row\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bparskip%7D+%25+Set+%5Cparindent+to+0pt%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D8cm%5D%7Bgeometry%7D%0A%25+Space+out+the+%5Chalign+columns+and+%5Cvalign+rows%0A%5Csetlength%7B%5Ctabskip%7D%7B8pt%7D+%0A%25+Close-fitting+box+borders+%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D%0A%5Cbegin%7Bdocument%7D%0AAn+%5Cverb%7C%5Chalign%7C+table+with+some+empty+cells---note+there+are+consecutive+%5Ctexttt%7B%5C%26%7D+characters+in+the+table+%5C%28%5Clangle%5Ctexttt%7Bbody%7D%5Crangle%5C%29%3A%0A%0A%5Cfbox%7B%25%0A%5Cvbox%7B%5Chalign%7B%0A%25+Use+a+preamble+that+allows+for+5+cells+per+row%0A%25+Most+rows+don%27t+provide+content+for+5+cells%0A%23%26%23%26%23%26%23%26%23%5Ccr+%25+5+cells+per+row%0A%5C%28%5Cmathrm%7BCell%7D%7B%7D_1%5C%29%5Ccr+%0A%5C%28%5Cmathrm%7BCell%7D%7B%7D_1%5C%29%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_2%5C%29%5Ccr%0A%5C%28%5Cmathrm%7BCell%7D%7B%7D_1%5C%29%26%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_3%5C%29%5Ccr%0A%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_2%5C%29%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_3%5C%29%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_4%5C%29%5Ccr%0A%5C%28%5Cmathrm%7BCell%7D%7B%7D_1%5C%29%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_2%5C%29%26%26%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_5%5C%29%5Ccr%0A%7D%7D%7D%0A%5Cend%7Bdocument%7D)

この例では、次の出力が生成されます:

![](/files/bd5963fde7683d0132a41ec56c7935a61c40884a)

### 表の組版では & と # に特別な意味はありません

TeX が文字 `&` と `#` を使うこと `\halign`、または `\valign`ベースの表組版においては、Knuth の元の plain TeX マクロに由来する伝統です。 `&` と `#` 次の例が示すように、好みの置換文字に適切なカテゴリコードを割り当てることで、

* を `&` で置き換えることは `@` を割り当てることで `@` をカテゴリコード4に
* を `#` で置き換えることは `|` を割り当てることで `|` をカテゴリコード6に（これはマクロのパラメータに使われます）

カテゴリの変更は `\begingroup` と `\endgroup`:

```latex
\documentclass{article}
\begin{document}
\begingroup
\catcode`@=4
\catcode`|=6
\halign{
|@|@|\cr
A@B@C\cr
D@E@F\cr
}
\endgroup
\end{document}
```

[この例をOverleafで開く](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Tables+and+category+codes\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegingroup%0A%5Ccatcode%60%40%3D4%0A%5Ccatcode%60%7C%3D6%0A%5Chalign%7B%0A%7C%40%7C%40%7C%5Ccr%0AA%40B%40C%5Ccr%0AD%40E%40F%5Ccr%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

## \noalign コマンドを再導入する

TeX エンジンは組み込みの（プリミティブな） `\noalign` コマンドを定義しようとする次の例で示されます：

`\noalign{`$$\langle$$⁠`トークン`⁠$$\rangle$$`}`

ここで $$\langle$$⁠`トークン`⁠$$\rangle$$ は文字や TeX/LaTeX コマンドです。 `\noalign` コマンドは `\halign` または `\valign` 表内での使用専用です。これらの外で使うとエラーになります。

の目的は `\noalign` 「挿入」されたテキストや TeX/LaTeX コマンドを許可することです *の間に* の行 `\halign` 表または `\valign` 表の列に。 `\noalign` の最も一般的な用途は

* *水平* 罫線を `\halign` 表の行の間に引くことです
* *垂直* 罫線を `\valign` 表の列

次の点に注意してください:

* その `\noalign` コマンドの一般形は ***\*\*\*\*で終端されません\*\*\*\* ****`\cr`**** \*\*\*\*\*\*\*\*コマンド***
* 内で許可されるコマンドの集合は `\noalign{...}` が使用されている $$\langle$$⁠`本体`⁠$$\rangle$$ の `\halign` または `\valign` 表（つまり、垂直モードか水平モードか）によって異なります。

いまや、表の $$\langle$$⁠`本体`⁠$$\rangle$$ の `\halign` または `\valign` は個々の行から成り $$\langle$$⁠本体行$${}\_i$$⁠$$\rangle$$`\cr` \noalign `\noalign` コマンドが散在している

`\noalign{`$$\langle$$⁠`トークン`⁠$$\rangle$$`}` $$\langle$$⁠本体行$${}\_1$$⁠$$\rangle$$\cr $$\langle$$⁠本体行$${}\_2$$⁠$$\rangle$$\cr `\noalign{`$$\langle$$⁠`さらに多くのトークン`⁠$$\rangle$$`}` $$\langle$$⁠本体行$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$⁠本体行$${}*\mathrm{N}$$⁠$$\rangle$$\cr `\noalign{`$$\langle$$⁠`他のトークン`⁠$$\rangle$$`}`

### \noalign の使用例

この記事シリーズの後半で他の使用例も見ますが、ここでは `\noalign`:

```latex
\setlength{\tabskip}{5pt}

\verb|\noalign| を使って \verb|\halign| 表の行の間に水平罫線を入れる:
\vspace{6pt}

\halign{%
#&#&#&#&#\cr
\noalign{\hrule\kern2pt}
1&2&3&4&5\cr
\noalign{\kern2pt\hrule\kern2pt}
6&7&8&9&10\cr
\noalign{\kern2pt\hrule}
}

\verb|\noalign| を使って \verb|\valign| 表の列の間に垂直罫線を入れる:
\vspace{6pt}

\begingroup % \parindent と \hsize の変更を局所化する
\parindent=0pt
\hsize=50pt
\valign{%
#&#&#&#&#\cr
\noalign{\vrule\kern2pt}
1&2&3&4&5\cr
\noalign{\kern2pt\vrule\kern2pt}
6&7&8&9&10\cr
\noalign{\kern2pt\vrule}
}
\endgroup
```

[この例をOverleafで開く](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+of+the+noalign+command\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D10cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%7D+%0A%5Cusepackage%7Bparskip%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B5pt%7D%0A%0AUsing+%5Cverb%7C%5Cnoalign%7C+to+place+horizontal+rules+between+rows+of+an+%5Cverb%7C%5Chalign%7C+table%3A%0A%5Cvspace%7B6pt%7D%0A%0A%5Chalign%7B%25%0A%23%26%23%26%23%26%23%26%23%5Ccr%0A%5Cnoalign%7B%5Chrule%5Ckern2pt%7D%0A1%262%263%264%265%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%5Ckern2pt%7D%0A6%267%268%269%2610%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%7D%0A%7D%0A%0AUsing+%5Cverb%7C%5Cnoalign%7C+to+place+vertical+rules+between+columns+of+a+%5Cverb%7C%5Cvalign%7C+table%3A%0A%5Cvspace%7B6pt%7D%0A%0A%5Cbegingroup+%25+keep+changes+to+%5Cparindent+and+%5Chsize+local%0A%5Cparindent%3D0pt%0A%5Chsize%3D50pt%0A%5Cvalign%7B%25%0A%23%26%23%26%23%26%23%26%23%5Ccr%0A%5Cnoalign%7B%5Cvrule%5Ckern2pt%7D%0A1%262%263%264%265%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%5Ckern2pt%7D%0A6%267%268%269%2610%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%7D%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

この例では、次の出力が生成されます:

![](/files/6bfaf932d50cc591e899b54605fb83c10dfd4dc1)

## \tabskip を再考する

\tabskip コマンドを `\tabskip` 見ていきます [前節での導入を土台にして](#tabskip).

その `\tabskip` コマンドは、テーブル組版で *専用に* 使われる特別な形式の「空き」（グルー）の値を設定します。その目的は、表の行や列の間にスペースを与えることです:

* を `\halign` 表: `\tabskip` グルーは表の前後（つまり左右）および表の列の間に挿入されます
* を `\valign` 表: `\tabskip` グルーは表の前後（つまり上下）および表の行の間に挿入されます

の値は `\tabskip` LaTeX の `\\setlength` コマンドを定義しようとする次の例で示されます：

`\setlength{\tabskip}{`$$\langle$$⁠`グルー値`⁠$$\rangle$$`}`

ここで $$\langle$$⁠`グルー値`⁠$$\rangle$$ として設定できます:

* たとえば `5pt`, `3mm`、または
* たとえば `3pt plus 2pt minus 1pt`、または
* たとえば `0pt plus1fill`.

また、 `\tabskip` を使わずに `\\setlength`直接設定することもできます

`\tabskip`=$$\langle$$⁠`グルー値`⁠$$\rangle$$

ただし、 `\tabskip` の値を変更しても、その変更が次の場合にのみ表の間隔に影響します:

* 行われる *の前に* その `\halign` または `\valign` コマンドが処理されるようにするために、または
* 表の中で行われる $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$

設定しようとしても `\tabskip` 表の内容内（表のセル内）で $$\langle$$⁠`本体`⁠$$\rangle$$) *影響しません* 表の列や `\halign` 表の行の間隔を `\valign` このような `\tabskip` の振る舞いの理由は $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ テーブル組版中に果たす役割にたどることができます—これについては後ほど詳しく見ていきます。

### 百聞は一見に如かず

表の組版で使われるさまざまな種類のスペース／グルー、特に

* `\tabskip` グルー
* `\baselineskip` グルー
* 手動カーニング（`\kern`)

を可視化するため、Overleaf は表の構成要素に色を付ける LuaTeX ベースのプロジェクトを用意しました。LuaTeX が選ばれたのは、組版された表の内部データ／構造を低レベルで再処理できるからですが、その詳細はここでは扱いません。

ここでは、 `\tabskip`のさまざまな適用例を示すいくつかの例を見ていきます。各例について、実際の出力と LuaTeX によって生成された色付き版を示します。

### \tabskip の例 1

の使い方を見てみましょう `\tabskip` ある `\halign` と `\valign` 表。実際に組版された表を、そのサイズと間隔を視覚化するための枠付きで示し、さらに各表のさまざまなグルー／スペースのサイズが明確にわかる色付き版を含む注釈付き図も示します。

まず、 `\halign`:

```latex
% 表の広がりを視覚化するために枠を付けます
\setlength{\fboxsep}{0pt} % 枠をぴったりにする

% ここでは \tabskip を「直接」設定します
\tabskip5pt % 表の外で初期 \tabskip 値を設定

% 表に枠を付けるには、TeX ボックスに保存する必要があります。
% \halign は \vbox に入れる必要があります。なぜなら \halign は
% 「垂直モード」で処理される必要があり、\hbox では動作しません。
% それは「水平モード」で処理されるからです

\fbox{\vbox{\halign{
\tabskip10pt#&
\tabskip15pt#&
\tabskip20pt#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}}
```

[この例をOverleafで開く](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Tabskip+glue+in+an+halign\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D10cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%7D+%0A%5Cusepackage%7Bparskip%7D+%25+sets+%5Cparindent+to+0pt%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%25+To+visualize+the+table%27s+extent+we%27ll+put+a+border+around+it+%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D+%25+Use+close-fitting+borders%0A%0A%25+Here+we+set+%5Ctabskip+%22directly%22%0A%5Ctabskip5pt+%25+Set+the+initial+%5Ctabskip+value+outside+the+table%0A%0A%25+To+put+a+border+around+the+table+it+has+to+be+saved+to+a+TeX+box.%0A%25+An+%5Chalign+has+to+be+placed+in+a+%5Cvbox+because+%5Chalign+must+be+%0A%25+processed+in+a+%22vertical+mode%22%3A+an+%5Chbox+will+not+work+because%0A%25+that+is+processed+in+a+%22horizontal+mode%22%0A%0A%5Cfbox%7B%5Cvbox%7B%5Chalign%7B%0A%5Ctabskip10pt%23%26%0A%5Ctabskip15pt%23%26%0A%5Ctabskip20pt%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%7D%0A%5Cend%7Bdocument%7D)

この例では、次の出力が生成されます:

![](/files/1b70cf57adaf66cd9931850d241b2e5a32690300)

次の図は、前の例で作成した表を大きくし、色付けし、注釈を付けた版です:

![](/files/283c35fc4fd91652d678f3df6e91edd5fc0f9284)

\tabskip コマンドが4回現れますが、それぞれ表内の特定の位置のスペースに対応しています: `\tabskip` \tabskip5pt

1. `は表の外で使われ、各行の最初のセルの前（左側）に適用される` 値を設定します。 `\tabskip` \tabskip10pt
2. `は` の最初のセルテンプレートに設定され $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ での間隔に影響します $$\langle$$⁠セル$${}\_1$$⁠$$\rangle$$ と $$\langle$$⁠セル$${}\_2$$⁠$$\rangle$$ の
3. `\tabskip15pt` は $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ での間隔に影響します $$\langle$$⁠セル$${}\_2$$⁠$$\rangle$$ と $$\langle$$⁠セル$${}\_3$$⁠$$\rangle$$ の
4. `\tabskip20pt` は $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ の3番目で最後のセルテンプレートに設定され $$\langle$$⁠セル$${}\_3$$⁠$$\rangle$$の後に加えられる間隔に影響します

次に、 `\valign`

```latex
\setlength{\fboxsep}{0pt} % 枠をぴったりにする
\tabskip5pt % 表の外で初期 \tabskip 値を設定

% \hsize の変更を局所化します（グループ内で）
\begingroup
% \hsize が \valign の列幅を決めます
\setlength{\hsize}{50pt}
% \valign は \vbox または \hbox に入れられるので、
% \fbox を直接使えます
\fbox{\valign{
\tabskip10pt#&
\tabskip15pt#&
\tabskip20pt#\cr
A&B&C\cr
E&E&F\cr
G&H&I\cr
}}
\endgroup
```

[この例をOverleafで開く](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+halign\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D10cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%7D+%0A%5Cusepackage%7Bparskip%7D+%25+sets+%5Cparindent+to+0pt%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D+%25+Use+close-fitting+borders%0A%5Ctabskip5pt+%25+Set+the+initial+%5Ctabskip+value+outside+the+table%0A%0A%25+Keep+changes+to+%5Chsize+local+%28in+a+group%29%0A%5Cbegingroup%0A%25+%5Chsize+determines+the+%5Cvalign+column+widths%0A%5Csetlength%7B%5Chsize%7D%7B50pt%7D+%0A%25+Because+%5Cvalign+can+be+placed+in+a+%5Cvbox+or+%5Chbox+we+can+use+%0A%25+%5Cfbox+directly%0A%5Cfbox%7B%5Cvalign%7B%0A%5Ctabskip10pt%23%26%0A%5Ctabskip15pt%23%26%0A%5Ctabskip20pt%23%5Ccr%0AA%26B%26C%5Ccr%0AE%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

この例では、次の出力が生成されます:

![](/files/1a4cfbdc85ea57545ba8539fd46e6af352babe74)

再び、次の図は、前の例で作成した表を大きくし、色付けし、注釈を付けた版です:

![](/files/8e447f698981f1a4612137ae8d32ebda0c6e85b3)

の例と同様に `\halign` コマンドは4回あります。 `\tabskip` ただし、 `\valign` 表では `\tabskip` は表の行の間に挿入されます:

1. `は表の外で使われ、各行の最初のセルの前（左側）に適用される` 値を設定します。 `\tabskip` 各列の最初のセルの前（上）に適用される
2. `は` の最初のセルテンプレートに設定され $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ での間隔に影響します $$\langle$$⁠セル$${}\_1$$⁠$$\rangle$$ と $$\langle$$⁠セル$${}\_2$$⁠$$\rangle$$ 各列の
3. `\tabskip15pt` は $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ での間隔に影響します $$\langle$$⁠セル$${}\_2$$⁠$$\rangle$$ と $$\langle$$⁠セル$${}\_3$$⁠$$\rangle$$ 各列の
4. `\tabskip20pt` は $$\langle$$⁠`プリアンブル内で`⁠$$\rangle$$ の3番目で最後のセルテンプレートに設定され $$\langle$$⁠セル$${}\_3$$⁠$$\rangle$$、各列の最後のセルの後に

**要約／結論**

* ある `\halign` 表では `\tabskip` 表では、グルーは各セルの左と右に配置されるため、表の列間隔が広がります。
* ある `\valign` 表では `\tabskip` 表では、グルーは各セルの上と下に配置されるため、表の行間隔が広がります。

### \tabskip と \noalign

#### \halign を使った

次の `\halign` 例では `\tabskip` グルーに加えて `\noalign` コマンドも示し、それを使って `\halign` 表の行の上下に間隔を空けた罫線を入れます。これらの罫線は `\hrule` （プリミティブ）コマンドと `\kern`:

```latex
\setlength{\tabskip}{5pt} % 表の外で \tabskip を設定

\halign{
#&#&#&#&#\cr % <プリアンブル>
\noalign{\hrule\kern2pt} % 行1の前の間隔付き罫線
1&2&3&4&5\cr % 行1
\noalign{\kern2pt\hrule\kern2pt} % 行1/2の間の間隔付き罫線
6&7&8&9&10\cr % 行2
\noalign{\kern2pt\hrule\kern2pt} % 行2/3の間の間隔付き罫線
11&12&13&14&15\cr % 行3
16&17&18&19&20\cr % 行4---行3/4の間に罫線なし
\noalign{\kern2pt\hrule} % 表末尾の間隔付き罫線
}
```

[この例をOverleafで開く](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+halign\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D10cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%7D+%0A%5Cusepackage%7Bparskip%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B5pt%7D+%25+Set+%5Ctabskip+outside+of+the+table%0A%0A%5Chalign%7B%0A%23%26%23%26%23%26%23%26%23%5Ccr+%25+The+%3Cpreamble%3E%0A%5Cnoalign%7B%5Chrule%5Ckern2pt%7D+%25+Spaced+rule+before+row+1%0A1%262%263%264%265%5Ccr+%25+Row+1%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%5Ckern2pt%7D+%25+Spaced+rule+between+rows+1%2F2+%0A6%267%268%269%2610%5Ccr+%25+Row+2%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%5Ckern2pt%7D+%25+Spaced+rule+between+rows+2%2F3+%0A11%2612%2613%2614%2615%5Ccr+%25+Row+3%0A16%2617%2618%2619%2620%5Ccr+%25+Row+4---no+rules+between+rows+3%2F4%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%7D+%25+Space+rule+at+table+end%0A%7D%0A%5Cend%7Bdocument%7D)

この例では、下に示す表が作成され、(La)TeX コードと番号 (1) 〜 (4) をさらに注釈として付け、 `\noalign` コマンド、そこに含まれる罫線とカーン、および対応する組版出力を列挙しています:

![](/files/c3382c8e0d2d3a7544c10a9b138029129d483acb)

次の図は、表内のさまざまな間隔／グルーを示すラベル付きの色付き版です:

![](/files/8426f2f029bcc015de21128a9d2b517a27962084)

次の点に注意してください:

* の使用 `\noalign` を使って特定の行の間に罫線を挿入することと、 `\kern` の値を手動で使って罫線の前後に少しスペースを入れること。TeX エンジンは `\baselineskip` グルーを組版された罫線の後に挿入しないため、スペースは `\kern` を使って手動で挿入します（他のスペース指定コマンドも使えます）;
* `\baselineskip` グルーは行 3 と 4 の間に自動的に挿入されました。

#### \valign を使った

次の `\valign` 例では前の `\halign`:

```latex
\begingroup
\\setlength{\\parindent}{10pt}
\setlength{\hsize}{50pt}
\setlength{\tabskip}{5pt}
\valign{
#&#&#&#&#\cr
\noalign{\vrule\kern2pt}
1&2&3&4&5\cr
\noalign{\kern2pt\vrule\kern2pt}
6&7&8&9&10\cr
\noalign{\kern2pt\vrule\kern2pt}
11&12&13&14&15\cr
16&17&18&19&20\cr
\noalign{\kern2pt\vrule}
}
\endgroup
```

[この例をOverleafで開く](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+halign\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D10cm%5D%7Bgeometry%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%5Cbegingroup%0A%5Csetlength%7B%5Cparindent%7D%7B10pt%7D%0A%5Csetlength%7B%5Chsize%7D%7B50pt%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B5pt%7D%0A%5Cvalign%7B%0A%23%26%23%26%23%26%23%26%23%5Ccr%0A%5Cnoalign%7B%5Cvrule%5Ckern2pt%7D%0A1%262%263%264%265%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%5Ckern2pt%7D%0A6%267%268%269%2610%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%5Ckern2pt%7D%0A11%2612%2613%2614%2615%5Ccr%0A16%2617%2618%2619%2620%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%7D%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

この例では、下に示す表が作成され、(La)TeX コードと番号 (1) 〜 (4) をさらに注釈として付け、 `\noalign` コマンド、そこに含まれる罫線とカーン、および対応する組版出力を列挙しています:

![](/files/33d72b8c2b6c6f3ff60272aa44c237ca425d4341)

![](/files/23184815bc3eb04b0a15863e02745c90ed0fa8db)

### テキスト行を含む \valign 表

次の例

```latex
\setlength{\tabskip}{5pt}
\begingroup % \parindent と \hsize の変更を局所化
\\setlength{\\parindent}{10pt}
\setlength{\hsize}{75pt}
\valign{
#&#&#\cr
\noalign{\vrule\kern5pt}
\TeX{} は非常に複雑な
表を組版できます。さらに少し
この列のテキストを加えます。そして最後に、
この列に追加の行を入れます。\cr
\noalign{\kern5pt\vrule\kern5pt}
A&B&C\cr
\noalign{\kern5pt\vrule\kern5pt}
D&E&F\cr
G&H&I\cr
\noalign{\kern5pt\vrule}
}
\endgroup
```

[この例をOverleafで開く](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+valign+command\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D16cm%2Ctextwidth%3D12cm%5D%7Bgeometry%7D%0A%5Cbegin%7Bdocument%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B5pt%7D%0A%5Cbegingroup+%25+Keep+changes+to+%5Cparindent+and+%5Chsize+local%0A%5Csetlength%7B%5Cparindent%7D%7B10pt%7D%0A%5Csetlength%7B%5Chsize%7D%7B75pt%7D%0A%5Cvalign%7B%0A%23%26%23%26%23%5Ccr%0A%5Cnoalign%7B%5Cvrule%5Ckern5pt%7D%0A%5CTeX%7B%7D+can+typeset+very+complex%0Atables.%26Here%27s+a+bit+of+extra+%0Atext.%26And%2C+finally%2C+an+extra+line%0Ain+this+column.%5Ccr%0A%5Cnoalign%7B%5Ckern5pt%5Cvrule%5Ckern5pt%7D%0AA%26B%26C%5Ccr%0A%5Cnoalign%7B%5Ckern5pt%5Cvrule%5Ckern5pt%7D%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%5Cnoalign%7B%5Ckern5pt%5Cvrule%7D%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

この例では、次の出力が生成されます:

## 行の幅と列の高さを設定する

## 表についてさらに詳しく $$\langle$$⁠プリアンブル⁠$$\rangle$$


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/ja/xiang-xi-ji-shi/15-how-do-tex-engines-typeset-tables-2.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
