下面的代码
\documentclass{article}
\usepackage[dvipsnames]{xcolor}
\usepackage{colortbl}
\definecolor{myGray}{HTML}{F2F2F2}
\newcolumntype{G}{>{\columncolor{myGray}\centering$}m{6mm}<{$}}
\newcolumntype{M}{>{\centering$}m{6mm}<{$}}
\newcolumntype{C}{>{$}c<{$}}
\begin{document}
\begin{tabular}{|G|M|M|M|M|}
\hline
\rowcolor{myGray} \times & 1 & i & j & k \\\hline
1 & 1 & i & j & k \\\hline
i & i & -1 & k & -j \\\hline
j & j & -k & -1 & i \\\hline
k & k & j & -i & -1 \\\hline
\end{tabular}
\end{document}
创建此错误消息:
! LaTeX Error: There's no line here to end.
See the LaTeX manual or LaTeX Companion for explanation.
Type H <return> for immediate help.
...
l.13 ...rowcolor{myGray} \times & 1 & i & j & k \\
\hline
当我将表格的对齐方式从 修改为 时{|G|M|M|M|M|}
,{|G|M|M|M|m|}
它确实起作用了。但我认为 的定义M
没有错。
答案1
问题是 LaTeX 宏\centerig
重新定义\\
:
\DeclareRobustCommand\centering{%
\let\\\@centercr %% <<< this is re-definition of \\
\rightskip\@flushglue\leftskip\@flushglue
\finalhyphendemerits=\z@
\parindent\z@\parfillskip\z@skip}
\protected\def\@centercr{\ifhmode \unskip\else \@nolnerr\fi
\par\@ifstar{\nobreak\@xcentercr}\@xcentercr}
\gdef\@nolnerr{%
\@latex@error{There's no line here to end}\@eha}
测试\ifhmode
失败,因为发生这种情况时您处于数学模式\\
。
一个解决方案是不使用\centering
宏而是使用 TeX 原语,\hfil
因为您只想将单行段落居中:
\newcolumntype{M}{>{\hfil $}m{6mm}<{$}}
答案2
对于您的问题(定义列类型),您可以通过更多方式避免:
- 考虑@Mico 评论,
- 考虑@wipet 的回答,
- 而不是
\\
使用\tabularnewline
- 也可以通过使用
tabularray
包:
\documentclass{article}
\usepackage[dvipsnames]{xcolor}
\definecolor{myGray}{HTML}{F2F2F2}
\usepackage{tabularray}
\begin{document}
\begin{tblr}{hlines, vlines,
colspec = {Q[c,bg=myGray, mode=math] *{4}{Q[c, mode=math]}},
row{1} = {bg=myGray}
}
\times & 1 & i & j & k \\
1 & 1 & i & j & k \\
i & i & -1 & k & -j \\
j & j & -k & -1 & i \\
k & k & j & -i & -1 \\
\end{tblr}
\end{document}