次のコードを使用します:
\documentclass[a4paper]{report}
\begin{document}
\begin{center}
\halign{\vrule \hfil # \hfil & \hfil # \hfil \vrule \cr
a & b \cr\noalign{\hrule}
c & d \cr\noalign{\hrule}
}
\end{center}
\end{document}
ページの中央に配置されたシンプルな表が生成されることを期待していました\halign
。しかし、下の図に示すように、そうではありません。
\centering
効果もありません。なぜそうなるのでしょうか?
答え1
LaTeX でも低レベルのコマンドを使用する誘惑にかられるかもしれませんが、それらのコマンドには最初は理解しにくい微妙な点がいくつかあります。
こうした微妙な点の1つは\halign
、垂直コマンドが見つかると垂直モードが開始されます。 をスキャンするときに TeX が水平モードの場合は\halign
、 を発行してそれを終了します\par
。
これは次のテスト ファイル (Plain TeX) によって証明されます。
a\def\par{PAR\endgraf\let\par\endgraf}bc\halign{#\cr HALIGN\cr}def
\bye
出力
の一時的な再定義は、が効果的に実行される\par
ことを示すことを目的としています\par
。
TeX が垂直モードの場合、段落を作らずにボックスを積み重ねるだけです。したがって、\centering
( では有効center
) は段落にのみ影響するため、何も行いません。したがって、 は通常 0\halign
なので、 は左余白と面一に印刷されます。スキャン時に有効なグルーは、 によって形成されるすべてのボックスの左側(配置行ごとに 1 つのボックス) と、別のものが指定されていない限り任意の 2 つの配置セルの間に追加されます。詳細については、TeXbook の第 22 章をお読みください。簡単ではありません。\tabskip
\tabskip
\halign
\halign
\tabskip
\halign
段落の一部にするにはどうすればよいでしょうか。段落の一部にできるものの中に隠して、段落の一部にすることもできます。\vbox
通常は を使用します (Plain TeX で表を中央揃えする最も一般的な方法は を使用することです$$\vbox{\halign{...}}$$
。LaTeX では使用しないでください)。 は\vbox
段落の始まりではありませんが、段落を中断することもありません。
\begin{center}
\leavevmode\vbox{\halign{...}}
\end{center}
配置を中央に合わせます。
を使用してくださいtabular
。そうすれば安全です。
答え2
は\halign
、周囲の垂直リストに配置される水平ボックスを構築します。これは には影響されず、\leftskip
段落\rightskip
ビルダーによって遵守されます。
これを使用して中央揃えを試すことができます:
\documentclass{article}
\begin{document}
\halign{\vrule \hfil # \hfil & \hfil # \hfil \vrule \cr
a & b \cr\noalign{\hrule}
c & d \cr\noalign{\hrule}
}
\tabskip 0pt plus 1000pt minus 1000pt
\halign to \hsize{\tabskip0pt\vrule \hfil # \hfil & \hfil # \hfil \vrule
\tabskip 0pt plus 1000pt minus 1000pt \cr
a & b \cr\noalign{\hrule}
c & d \cr\noalign{\hrule}
}
\end{document}
ただし、幅\hrule
全体に広がります\hsize
。
\halign
を に入れることができます\vbox
。
\bigskip
\centering
\noindent\vbox{\halign{\vrule \hfil # \hfil & \hfil # \hfil \vrule \cr
a & b \cr\noalign{\hrule}
c & d \cr\noalign{\hrule}
}}