我的 LaTeX 文档中存在以下用于一致表格的环境:
\newenvironment{defaultTable}[2] {
\@float{table}[h]
\noindent
\tabularx{\textwidth}{#1}
\specialrule{0.5pt}{10pt}{0pt}
\rowcolor[gray]{.9}
\gdef\mycaption{#2}
} {
\bottomrule
\endtabularx
\emph{\caption{\mycaption}}
\end@float
}
不幸的是,该行\bottomrule
导致了这个错误,我不明白:
! Misplaced \noalign. \bottomrule
->\noalign
{\ifnum 0=`}\fi \@aboverulesep =\aboverulesep
\global... l.27 \end{defaultTable}
当我在环境中使用它时,它可以工作
\begin{defaultTable}{X X}{Blablah Table}
(..)
\bottomrule
\end{defaultTable}
我究竟做错了什么?
答案1
可以使用以下方法避免此错误environ
包。例如,这是使用\NewEnviron
该包对代码进行的有效修改:
\documentclass{article}
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage[table]{xcolor}
\usepackage{environ}
\makeatletter
\NewEnviron{defaultTable}[2] {
\@float{table}[h]
\noindent
\tabularx{\textwidth}{#1}
\specialrule{0.5pt}{10pt}{0pt}
\rowcolor[gray]{.9}
\gdef\mycaption{#2}
\BODY
\bottomrule}[
\endtabularx
\emph{\caption{\mycaption}}
\end@float
]
\makeatother
\begin{document}
\begin{defaultTable}{X X}{Test Table}
1 & 2 \\
\end{defaultTable}
\end{document}
注意:要么也结束最后一行\\
(要么在之后执行\BODY
)。(在原始环境中定义\\
之前\bottomrule
没有帮助。)