可能重复:
bottomrule 在自制环境中不起作用
我的乳胶文档中存在这样的一致表格环境:
\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 的行导致了这个错误,我不明白:
! 放错位置 \noalign。\bottomrule ->\noalign {\ifnum 0=`}\fi \@aboverulesep =\aboverulesep \global... l.27 \end{defaultTable}
当我在环境中使用它时,它可以工作
\begin{defaultTable}{X X}{Blablah Table}
(..)
\bottomrule
\end{defaultTable}
我究竟做错了什么?
答案1
问题是由\noalign
定义中的引起的\bottomrule
。您可以定义一个新版本以\bottomrule
供在环境中使用,然后一切就应该可以正常工作了。(如果您在环境之外使用它,则不应重新定义\bottomrule
。)该定义取自booktabs
源代码。
\documentclass{article}
\usepackage{tabularx,booktabs,colortbl}
\makeatletter
\def\envbottomrule{{\ifnum0=`}\fi
\@aboverulesep=\aboverulesep
\global\@belowrulesep=\belowbottomsep
\global\@thisruleclass=\@ne
\@ifnextchar[{\@BTrule}{\@BTrule[\heavyrulewidth]}}
\newenvironment{defaultTable}[2] {
\@float{table}[h]
\noindent
\tabularx{\textwidth}{#1}
\specialrule{0.5pt}{10pt}{0pt}
\rowcolor[gray]{.9}
\gdef\mycaption{#2}
} {%
\envbottomrule
\endtabularx
\emph{\caption{\mycaption}}
\end@float
}
\makeatother
\begin{document}
\begin{defaultTable}{XX}{A caption}%
foo & bar\\
foo & bar
\end{defaultTable}
\end{document}