bottomrule 在自制环境中不起作用

bottomrule 在自制环境中不起作用

可能重复:
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}

相关内容