なぜ center は \halign を center しないのですか?

なぜ center は \halign を center しないのですか?

次のコードを使用します:

\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}
}}

箱に入ったハライン

関連情報