為什麼 center 不居中 \halign?

為什麼 center 不居中 \halign?

使用以下程式碼:

\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 中使用低階命令;然而,其中有些微妙之處在一開始時並不容易掌握。

這些微妙之處之一\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)不執行任何操作,因為它只影響段落。因此,您的\halign列印將與左邊距齊平,因為\tabskip通常為零。掃描\tabskip時有效的膠水被加到由(每個對齊行一個框)\halign形成的每個框的左側以及任何兩個對齊單元之間,除非另有指定。請閱讀 TeXbook 中的第 22 章以獲取更多信息,但這並不容易。\halign\tabskip

如何構成\halign段落的一部分?透過將它隱藏在可以並且也可以包含它的東西中:\vbox通常使用 a (在 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}
}}

在盒子裡對齊

相關內容