为什么我的 \otoprule 命令在表格格式中不起作用?

为什么我的 \otoprule 命令在表格格式中不起作用?

入门:我对 LaTeX 还很陌生。我正在table使用以下代码创建一个。以下是表格的一部分:

\usepackage{tabularx, multirow, booktabs}
\begin{table}[tp]
\caption{Rain garden site characteristics}
\label{table:11}
\begin{tabular}{c r @{.} l c r @{.} l r @{.} l r @{.} l r @{.} l}
Site ID &   Surface Area        &   Install Date    &   Roof Catchment Area &   Total Cactchment Area   &   $A_garden$/$A_imper$    &   $A_garden$/$A_total$    \\\otoprule
1   &   10&2    &   2007    &   49&7    &   49&7    &   20&6    &   20&6        \\\midrule
\end{tabular}
\end{table}

我无论如何也想不出为什么它会有问题\otoprule。我在许多表格样式指南,无法弄清楚我遗漏了什么。我得到的错误代码是:

! Undefined control sequence.
<recently read> \otoprule
1.5 ... A_imp$ & $A_garden$/$A_total$ \\\otoprule

谢谢您的任何建议!

答案1

在引用的来源中\otoprule定义如下:

\newcommand{\otoprule}{\midrule[\heavyrulewidth]}

因此您应该添加前面的行以获得所需的结果。

答案2

您缺少的必需定义在文档(第 10 页):

在本文中,表格标题下方的线的粗细始终等于\toprule和,\bottomrule但相对于上下行垂直居中(这是线的典型特征\midrule)。为了获得此结果,使用以下命令定义了一种新的线型

\newcommand{\otoprule}{\midrule[\heavyrulewidth]}

\midrule来自的定义booktabs类似于:

\def\midrule{\noalign{\ifnum0=`}\fi
  \@aboverulesep=\aboverulesep
  \global\@belowrulesep=\belowrulesep
  \global\@thisruleclass=\@ne
  \@ifnextchar[{\@BTrule}{\@BTrule[\lightrulewidth]}}

此定义将即将到来的水平规则上方和下方的分隔设置为相等(\belowrulesep=.65exaboverulesep=.4ex)。它还允许可选地指定规则厚度。\midrule单独默认为\@BTrule[\lightrulewidth],尽管您可以在可选参数中指定规则宽度;\otoprule通过它的定义究竟是什么\midrule[\heavyrulewidth]\heavyrulewidth是用于塑造\toprule和的厚度的长度定义\bottomrule,如文章中所述:

\def\toprule{\noalign{\ifnum0=`}\fi
  \@aboverulesep=\abovetopsep
  \global\@belowrulesep=\belowrulesep %global cos for use in the next noalign
  \global\@thisruleclass=\@ne
  \@ifnextchar[{\@BTrule}{\@BTrule[\heavyrulewidth]}}
\def\bottomrule{\noalign{\ifnum0=`}\fi
  \@aboverulesep=\aboverulesep
  \global\@belowrulesep=\belowbottomsep
  \global\@thisruleclass=\@ne
  \@ifnextchar[{\@BTrule}{\@BTrule[\heavyrulewidth]}}

相关内容