我遇到了一个我无法理解的错误。然而 overleaf 却给了我想要的结果。
\begin{center}
\begin{tabular}{|p{0.5cm}|p{2.5cm}|p{2.5cm}|}
\hline
\centering $k$ & \centering $\mathbb{P}(X = k)$ & $~~~~~~ \mathbb{P}(Z = k)$
\hline
\centering 0 & \centering 0,4213 & $~~~~~~0,4231$ \hline
\centering 1 & \centering 0,3660 & $~~~~~~0,3639$ \hline
\centering 2 & \centering 0,1571 & $~~~~~~0,1564$ \hline
\centering 3 & \centering 0,0444 & $~~~~~~0,0448$ \hline
\end{tabular}
\end{center}
答案1
第一个错误不是该线程标题中提到的错误,但是:
! Misplaced \noalign.
\hline ->\noalign
{\ifnum 0=`}\fi \hrule \@height \arrayrulewidth \futurelet...
l.8 \hline
您必须始终关注第一个错误,因为后续错误可能仅仅是由于从第一个错误进行的恢复不够理想而导致的。
如何理解Misplaced \noalign
:TeX 允许在表格行之间插入垂直材料(通常是行之间的线条)。这是通过\noalign
TeX 基元完成的。此基元可在当前行终止且未打开新行后使用。LaTeX 宏\hline
使用基元在表格行之间插入线条。尽管行尚未终止,\noalign
但您已经使用了它。\hline
第二个错误说:
! Extra alignment tab has been changed to \cr.
<recently read> \endtemplate
l.9 \centering 0 &
\centering 0,4213 & $~~~~~~0,4231$ \hline
这意味着来自 的材料\centering{0}
被添加到最后一列的材料中(因为行没有终止),并且以下字符&
给 TeX 带来了问题。它表示,下一个表项必须在下一个表列中创建。但那将是第四列,而您在表序言中只声明了三列。因此,TeX 报告错误并添加行终止符\cr
。
我理解为什么你不明白这些错误信息:它们是 TeX 错误信息,如果你只用 LaTeX 术语思考,你就无法理解 TeX 消息。TeX 使用\cr
但 LaTeX 在表格中提供\\
,内部更改为\cr
。TeX 使用\noalign
原语,但 LaTeX 没有提到有关此 TeX 原语的任何信息。直接了解 TeX 及其术语通常很有用,因为 LaTeX 只是宏包,而你实际上正在运行的是 TeX。
答案2
正如@anis 答案(+1)中所述,每个表行应以以下内容终止\\
:
\documentclass{article}
\usepackage{amssymb}
\begin{document}
\begin{center}
\begin{tabular}{|p{0.5cm}|p{2.5cm}|p{2.5cm}|}
\hline
\centering $k$ & \centering $\mathbb{P}(X = k)$
& $~~~~~~ \mathbb{P}(Z = k)$ \\
\hline
\centering 0 & \centering 0,4213 & $~~~~~~0,4231$ \\
\hline
\centering 1 & \centering 0,3660 & $~~~~~~0,3639$ \\
\hline
\centering 2 & \centering 0,1571 & $~~~~~~0,1564$ \\
\hline
\centering 3 & \centering 0,0444 & $~~~~~~0,0448$ \\
\hline
\end{tabular}
\end{center}
\end{document}
但是,通过定义新的列带并将列放入数学节点,您的表代码会短得多:
\documentclass{article}
\usepackage{amssymb}
\usepackage{array}
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\begin{document}
\begin{center}
\begin{tabular}{|>{$}C{0.5cm}<{$}|>{$}C{2.5cm}<{$}|>{$}C{2.5cm}<{$}|}
\hline
k & \mathbb{P}(X = k)
& \mathbb{P}(Z = k) \\
\hline
0 & 0,4213 & 0,4231 \\
\hline
1 & 0,3660 & 0,3639 \\
\hline
2 & 0,1571 & 0,1564 \\
\hline
3 & 0,0444 & 0,0448 \\
\hline
\end{tabular}
\end{center}
\end{document}
结果和以前一样。
另一种选择是使用tabularray
和siunitx
包装:
\documentclass{article}
\usepackage{amssymb}
\usepackage{tabularray}
\UseTblrLibrary{siunitx}
\begin{document}
\begin{center}
\sisetup{table-format=1.4,
output-decimal-marker={,}}
\begin{tblr}{hlines, vlines,
colspec={Q[c, wd=0.5cm,$] Q[c, wd=2.5cm,si, $] Q[c, wd=2.5cm,si, $]},
row{1} ={guard}
0 & 0,4213 & 0,4231 \\
1 & 0,3660 & 0,3639 \\
2 & 0,1571 & 0,1564 \\
3 & 0,0444 & 0,0448 \\
\end{tblr}
\end{center}
\end{document}
现在表格变得更美观了:在单元格内容周围添加了小的垂直空间,小数点逗号的间距更好:
答案3
您必须用 来终止行\\
。输出似乎正确,因为 TeX 看到\hline
前面没有\\
,并且在告诉您\cr
(内部命令)缺失后,添加了它。
永远不要忽视错误。
另一方面,有更好的方法来构建您的表:您可以使用包提供的说明符而不是p{<dimen>}
and \centering
(您可能已经注意到,它在最后一列中不起作用)。w{c}{<dimen>}
array
但有了siunitx
它,booktabs
输出就会好得多。
\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{array} % for the first realization
\usepackage{siunitx,booktabs} % for the second realization
\sisetup{output-decimal-marker={,}}
\begin{document}
\begin{center}
\begin{tabular}{|w{c}{0.5cm}|w{c}{2.5cm}|w{c}{2.5cm}|}
\hline
$k$ & $\mathbb{P}(X = k)$ & $\mathbb{P}(Z = k)$ \\
\hline
0 & 0{,}4213 & $0{,}4231$ \\ \hline
1 & 0{,}3660 & $0{,}3639$ \\ \hline
2 & 0{,}1571 & $0{,}1564$ \\ \hline
3 & 0{,}0444 & $0{,}0448$ \\ \hline
\end{tabular}
\end{center}
\begin{center}
\begin{tabular*}{0.5\columnwidth}{
@{\extracolsep{\fill}}
c
S[table-format=1.4]
S[table-format=1.4]
@{}
}
\toprule
$k$ & {$\mathbb{P}(X = k)$} & {$\mathbb{P}(Z = k)$} \\
\midrule
0 & 0,4213 & 0,4231 \\
1 & 0,3660 & 0,3639 \\
2 & 0,1571 & 0,1564 \\
3 & 0,0444 & 0,0448 \\
\bottomrule
\end{tabular*}
\end{center}
\end{document}
答案4
\\
每行末尾都缺少。这是行分隔符。它表示新行开始。
您可以尝试使用LaTex 表格编辑器以便更好地理解它们的工作原理。