% \iffalse meta-comment
%<*internal>
\iffalse
%</internal>
%<*readme>
|
-------:|:--------------------------------------
 ctable:| Flexible typesetting of table and figure floats using key/value directives
 Author:| Wybo Dekker
 E-mail:| wybo@dekkerdocumenten.nl
License:| Released under the LaTeX Project Public License v1.3c or later
    See:| http://www.latex-project.org/lppl.txt

Short description:
ctable.sty provides commands to easily typeset centered or left or right
aligned tables and (multiple-)figure floats, with footnotes. Instead of an
environment, a command with 4 arguments is used; the first is optional and
is used for key,value pairs generating variations on the defaults and
offering a route for future extensions.

Full documentation:
https://bitbucket.org/wybodekker/ctable/downloads/ctable.pdf

Installation:
Execute the inst script with the --help option for more information.

%</readme>
%<*internal>
\fi
%</internal>
%<*driver>
\ProvidesFile{ctable.dtx}
%</driver>
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{ctable}
%<*package>
    [2015/10/17 v1.31 ctable package for flexible typesetting of table and
     figure floats using key/value directives]
%</package>
%
%<*driver>
\documentclass{ltxdoc}
\usepackage{ctable,txfonts,paralist,desclist}
\usepackage[l2tabu,orthodox]{nag}
\usepackage[a4paper,margin=20mm,left=50mm,nohead]{geometry}
\usepackage[colorlinks]{hyperref}
\usepackage{tocloft}
\setlength\cftparskip{.5ex}
\setlength\cftbeforesecskip{.5ex}
\setlength\cftaftertoctitleskip{1ex}
\graphicspath{{./doc/}}
\definecolor{vbgreen}{rgb}{0,.6,0}
\definecolor{B}{rgb}{0.77, 0.90, 0.96}
\definecolor{Y}{rgb}{1,1,.878}
\def\REF#1{\href{http://www.ctan.org/pkg/#1}{\texttt{#1}}}
\parindent0pt\parskip1ex
\newcommand{\ROW}[3]{\parskip0pt%
  \colorbox{#1}{%
    \parbox{.98\hsize}{%
      \rule{0pt}{1.5ex}\\%
      \parbox{.6\hsize}{\includegraphics{#2}}%
      \parbox{.4\hsize}{\centering{\includegraphics{#3}}}%
      \\\rule{0pt}{1.5ex}%
    }%
  }\par%
}
\AtBeginDocument{\RecordChanges}
\AtEndDocument{\PrintChanges}
\CodelineIndex\EnableCrossrefs
\hypersetup{
     pdftitle = The ctable package,
    pdfauthor = Wybo Dekker,
   pdfsubject = {Typesetting centered, right, and left aligned table and figure
                 floats, with many configuration options},
  pdfkeywords = {
                 table floats,
                 figure floats,
                 key=value options,
                 footnotes,
                 booktabs,
                 tabularx,
                 threeparttable
                },
  bookmarksopen
}
\begin{document}
  \DocInput{ctable.dtx}
  \PrintChanges
  \PrintIndex
\end{document}
%</driver>
% \fi
%
% \CheckSum{0}
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
%
% \changes{v1.00}{2000/06/01}{
%  first release.
% }
% \changes{v1.01}{2001/03/17}{
%  making use of booktabs package
% }
% \changes{v1.02}{2002/06/24}{
%  using keyval to reduce args to 4
% }
% \changes{v1.03}{2002/07/16}{
%  many syntactic corrections, thanks to Johannes Braams
% }
% \changes{v1.04}{2003/08/11}{
% - caption, if empty, will not be typeset\\
% - rotate option added\\
% - star option added to use table* and figure*\\
% - environments
% }
% \changes{v1.06}{2004/03/20}{
% - left, right and center options added\\
% - frame{sep,rule,fg,bg} options added\\
% - error in width-setting corrected
% }
% \changes{v1.05}{2003/10/03}{
%  maxwidth option added
% }
% \changes{v1.06a}{2004/04/01}{
% - made setting fboxsep and fboxrule only temporary\\
% - removed superfluous space after tabulars
% }
% \changes{v1.06b}{2004/06/19}{
%  added several % at eol to remove superfluous whitespace occurring
%  sometimes
% }
% \changes{v1.07}{2005/08/09}{
% - added option sideways, option rotate now obsolete\\
% - added option captionskip
% }
% \changes{v1.08}{2006/04/10}{
% - standardized file setup following
%   http://www.ctan.org/tex-archive/info/dtxtut/dtxtut.pdf\\
% - mincapwidth option added\\
% - moved newdimen definition outside ctable macro
% }
% \changes{v1.09}{2007/03/04}{
% - added option nosuper\\
% - corrected incorrect positioning when table is wider than mincapwidth
% }
% \changes{v1.10}{2007/08/17}{
% - footnote markers now stay superscript with nosuper\\
% - documentation: added many examples for the options\\
% - corrected some unwanted white space in captions\\
% - caption package included to correct booktabs errors in caption
%   position. And for later use of its facilities\\
% - *captionskip option redefined*: 0pt value now corresponds to LaTeX
%   default
% }
% \changes{v1.11}{2007/09/07}{
% - added some percent signs at EOL to prevent whitespace\\
% - removed xspace usage - caused overfull badness
% }
% \changes{v1.12}{2008/04/12}{
%  option notespar added
% }
% \changes{v1.13}{2008/05/01}{
% - cap option with empty argument will not be inserted in lot/lof\\
% - added option continued, for continuation tables: same number as
%   previous table, `(continued)' added to caption
% }
% \changes{v1.14}{2009/09/15}{
% - nosuper propagation to later tables prohibited\\
% - added option doinside\\
% - use of (obsolete) carom.sty for docs discontinued\\
% - empty labels not created\\
% - newcolumntype warnings removed\\
% - caption package not needed anymore
% }
% \changes{v1.15}{2009/09/17}{
% - removed whitespace before tables\\
% - corrected marginpars in the documentation
% }
% \changes{v1.16}{2010/06/26}{
% - option cap={} did not suppress lot/lof entry\\
% - notespar option now generates fully justified notes
% }
% \changes{v1.17}{2010/10/30}{
% - doinside option propagated in subsequent ctable calls
% }
% \changes{v1.18}{2011/04/15}{
% - added setupctable for option defaults\\
% - added complement for several options (topcap, nosideways, et cetera)
% }
% \changes{v1.19}{2011/05/01}{
% - sideways option did not work anymore; corrected
% }
% \changes{v1.20}{2011/08/24}{
% - added options captionsleft, captionsright, captionsinside; (for
%  setupctable only)
% }
% \changes{v1.21}{2011/09/05}{
% - better documentation for sideways, captionsleft/right/inside options
% }
% \changes{v1.22}{2012/05/25}{
% - allow empty lines in last (tabular) argument\\
% - corrected error from hyperref's nameref calls (thanks Marco Daniel!)
% }
% \changes{v1.23}{2012/05/28}{
% - footerwidth option added
% }
% \changes{v1.24}{2013/04/28}{
% - require xcolor instead of color\\
% - added option bgopacity\\
% - added option sidecap (for memoir only)
% }
% \changes{v1.25}{2013/05/24}{
% - url's to CTAN corrected
% }
% \changes{v1.26}{2013/06/15}{
% - footerwidth option was inactive when notespar option was active
% }
% \changes{v1.27}{2013/12/19}{
% - label option did not work with side caption\\
% - disable transparency with warning if tikz package loaded
% }
% \changes{v1.28}{2014/02/20}{
% - added percent characters at EOLs causing whitespace
% }
% \changes{v1.29}{2014/04/20}{
% - reorganized inst script
% }
% \changes{v1.30}{2015/08/29}{
% - tikz' transparency got broken when tikz loaded after ctable\\
% - removed overfull hboxes from documentation
% }
% \changes{v1.31}{2015/10/03}{
% - comments about tmark in captions\\
% - use expandonce from etoolbox\\
% - use \AtBeginDocument, not \AtEndPreamble from etoolbox
%   (problems with tikz)
% }
%
% \GetFileInfo{ctable.dtx}
%
% \DoNotIndex{     \newcommand,   \\,             \,,
% \def,            \definecolor,  \hbox,          \raggedright,
% \else,           \ifdim,        \sbox,          \empty,
% \ifx,            \setkeys,      \end,           \label,
% \specialrule,    \fboxrule,     \let,           \tabularnewline,
% \PackageError,   \fboxsep,      \newbox,        \textit,
% \PackageWarningNoLine, \fcolorbox,    \newcolumntype, \usebox,
% \RequirePackage, \fi,           \newdimen,      \vspace,
% \begin,          \footnotesize, \normalfont,    \wd,
% \define@key,
% }
%
% \title{The \textsf{ctable} package\thanks{This document
%   corresponds to \textsf{ctable}~\fileversion, dated \filedate.}}
% \author{Wybo Dekker \\ \texttt{wybo@dekkerdocumenten.nl}}
%
% \maketitle
% \begin{abstract}\noindent
% The \texttt{ctable} package provides a \texttt{ctable}
% command for the typesetting of table and figure floats. You will
% not need to type the usual nested begin...end sequences, as
% \texttt{ctable} is a command, not an environment. \texttt{ctable}
% has only 4 arguments, but the optional first one may hold many
% \textsl{key=value} pairs and makes \texttt{ctable} very flexible
% and extensible. It uses Simon Fear's \REF{booktabs} package for
% better vertical spacing around horizontal rules and it provides
% facilities for making table footnotes.
% \end{abstract}
% \tableofcontents
% \section{Introduction}
%
% \section{Purpose} The |ctable| package lets you easily typeset
% captioned table and figure floats with optional
% footnotes. Both caption and footnotes will normally be forced within the
% width of the table.
% If the width of the table is specified, then \REF{tabularx} will be used
% to typeset it, and one or more |X| column specifiers should be specified.
% Otherwise tabular will be used.
%
% This package defines the commands |\ctable|, |\tnote| and
% |\tmark|, and four |\tabularnewline| generating
% commands. The latter generate reasonable amounts of whitespace
% around horizontal rules and are also useful for tabulars
% outside this package.
%
% Since the |ctable| package imports the \REF{array} and \REF{booktabs}
% packages, all commands from those packages are available as well.
%
% Note that, in line with the comments that Simon Fear made
% describing his \REF{booktabs} package, vertical rules for column
% separation can be produced with |\ctable|, but no provisions are
% made to have them make contact with horizontal rules.
%
% \section{Usage}
% \DescribeMacro{\setupctable}
% |\ctable| defaults can be set, either in the preamble or in the body, 
% with:\\
%
% |\setupctable{options}  % key=value,...|\\
%
% \DescribeMacro{\ctable}
% |\ctable| is called with 4 parameters, of which the first is optional: \\
%
% |\ctable[options]       % key=value,...|\\
% |       {coldefs}       % for \begin{tabular}|\\
% |       {foottable}     % zero or more \tnote commands (see below)|\\
% |       {table rows}    % rows for the table|\\
%
% Options are given as key=value pairs, separated by comma's.
% Extra comma's, including one behind the last pair, don't hurt.
% Arguments to option should be put between braces if they contain
% comma's or equals signs.
% \section{Options}
% Currently the following option keys have been defined:
% 
% { \marginparwidth25mm
% \DescribeMacro{bgopacity=...\hfill}
% Sets the opacity of the table's background color, where 1 is 100\% opaque
% (the default), and 0 is completely transparent. One application is with
% watermarking: most watermarking packages print their watermark on the
% background. |ctable|'s background color, which is opaque by default, may
% make the watermark (partially) invisible. You can avoid this by setting
% the |bgopacity| option to a value lower than 1. Note that this works only
% in PDF mode, a warning is issued otherwise.\\
% Note: there are two limitations to transparency setting:
% \begin{compactenum}
% \item it works only in PDF mode: so it works in pdflatex and lualatex,
% but is disabled in xelatex.
% \item it disables transparency features in the tikz package; therefore,
% ctable checks if the tikz package is loaded and if so, disables its own 
% transparency with a warning. That helps only if you load tikz
% \textit{before} ctable.
% \end{compactenum}
% 
% \DescribeMacro{botcap\hfill}
% put the caption at the bottom of the float instead of on top of it.
% See also: |topcap|, |sidecap|.
%
% \DescribeMacro{caption=...\hfill}
% table caption; the braces are needed only if your caption contains a
% comma or an equals sign.
%
% \DescribeMacro{cap=...\hfill}
% for a short caption to go to the |\listoftables|. Without the |cap|
% option, the full caption will go into the |\listoftables|. If |cap| is
% given an empty value, \textsl{and you have loaded the |caption| package},
% no entry in the |\listoftables| will be made. This may be useful, for
% example, with the |continued| option.
%
% \DescribeMacro{captionskip=...\hfill}
% moves the caption relative to the table; the default is |0ex|, which puts
% captions at their default \LaTeX\ positions. For the standard \LaTeX\
% classes this means that a top caption's baseline at
% |1ex| above the top rule position of the table and a bottom caption's
% baseline at |4ex| below the bottom rule position. These dimensions may be
% different for other classes or when other packages are included. The
% |memoir| class and the |caption| package, for example, both typeset
% captions differently, and the combination of both even differs from each
% alone.\footnote{I did some measurements on the whitespace between the
% caption and the top of the table with and without using the caption
% package and/or the memoir class: standard LaTeX: 1ex; memoir:
% 2.32ex; caption: 2.69ex; both memoir and caption: 2.68ex. For the
% distances between bottom caption baselines and the table bottom I found,
% respectively: 3.90ex, 3.41ex, 3.72ex and 3.74ex } Keep in mind that when
% you use the |caption| package in the |memoir| class, |memoir|'s caption
% commands are suspended and |caption|'s commands must be used.
%
% \DescribeMacro{captionsleft\hfill} This option is defined for
% |\setupctable| only, and it is effective only where the |sideways| option
% is used. After |\setupctable{captionsleft}| all tables typeset with the
% |sideways| option will have their captions at the left.
%
% \DescribeMacro{captionsright\hfill} This option is defined for
% |\setupctable| only, and it is effective only where the |sideways| option
% is used. After |\setupctable{captionsright}| all tables typeset with the
% |sideways| option will have their captions at the right.
%
% \DescribeMacro{captionsinside\hfill}
% This option is defined for |\setupctable| only, it is the default, and it is effective
% only where the |sideways| option is used. After
% |\setupctable{captionsinside}| all tables typeset with the |sideways|
% option will have their captions at the left in one-sided documents. In
% twosided documents, captions will be on the left for odd-numbered pages
% and on the right for even-numbered pages. This is the default. 
%
% \DescribeMacro{center\hfill}
% center the table in the available text width; this is the default.
% See also: |left|, |right|.
%
% \DescribeMacro{continued=...\hfill}
% if used, the table will be numbered the same as the previous table. If
% used without an argument, the caption will be suffixed with `
% (continued)', if used with an argument, the suffix will be the argument.
%
% \DescribeMacro{doinside=...\hfill}
% command to be run inside, just before the tabular or tabularx
% environment. You can use this, for example, for the adjustment of the
% font size with |\small|.
%
% \DescribeMacro{figure\hfill}
% produce a figure float instead of a table float. See also: |table|.
%
% \DescribeMacro{footerwidth=...\hfill}
% Footnotes are typeset within the width of the table. When you use the
% |mincapwidth| option, presumably because the table is very narrow, footnotes
% are given the same width as the caption. With small footnotes this may not
% be what you want; this option can be used to give the footnotes their own width. 
% Without an argument, they will be typeset within the width of of the table. 
% 
% \DescribeMacro{framebg={\slshape r g b}\hfill}
% set the background color of the frame (the color inside the frame) to the
% given triplet of \textsl{rgb}-values. The values should be numbers
% between 0 and 1. The default is |1 1 1| (white).
%
%
% \DescribeMacro{framefg={\slshape r g b}\hfill}
% set the foreground color of the frame (the rule color) to the given
% triplet of \textsl{rgb}-values. The values should be numbers between 0
% and 1. The default is |0 0 0| (black).
%
%
% \DescribeMacro{framerule=...\hfill}
% draw a frame around the table with the given rule thickness. The default
% is |0pt|, so that no frame will be seen.
%
%
% \DescribeMacro{framesep=...\hfill}
% set the distance between the frame and the table to the given dimension.
% The default is |0pt|.
%
%
% \DescribeMacro{label=...\hfill}
% labels the float with |\label|.
%
% \DescribeMacro{left\hfill}
% left align the table in the available text width. See also: |center|, |right|.
%
% \DescribeMacro{maxwidth=...\hfill}
% like the \textsl{width} option, but any |X| column specifiers will be
% replaced with |l| if the resulting table width would thus stay within the
% specified maximum width. This is especially useful where the \LaTeX\
% source is generated by a script.
%
% \DescribeMacro{mincapwidth=...\hfill}
% sets the minimum width of the float. Without this option, the width is
% set to that of the tabular, and the caption and footnotes are typeset
% within that width. This may be a problem with very narrow tables;
% |mincapwidth| can then be used to give the float a minimum width. The
% tabular will be centered in it. If you don't want the footnotes to be affected
% see the |footerwidth| option.
%
% \DescribeMacro{nonotespar\hfill}
% typeset footnotes in a table; this is the default. See also: |notespar|.
%
% \DescribeMacro{nosideways\hfill}
% undo the sideways option. See also: |sideways|.
%
% \DescribeMacro{nostar\hfill}
% use the un-starred versions of the |table| and |figure| environments;
% this is the default
%
% \DescribeMacro{nosuper\hfill}
% in the footnote table, typeset footnote markers on the line, instead of
% superscripted.
%
% \DescribeMacro{notespar\hfill}
% typeset footnotes in a paragraph instead of in a table.
%
% \DescribeMacro{pos=...\hfill}
% float position, default: |tbp|.
%
% \DescribeMacro{right\hfill}
% right align the table in the available text width.
%
% \DescribeMacro{sidecap\hfill}
% put the caption at the side of the float. Currently, this works only if
% you have loaded the |memoir| class, otherwise an error message is
% generated. The parameters for the caption, such as its vertical
% positioning, width and more, must be set with the appropriate |memoir|
% commands. See also: |botcap|, |topcap|.
%
% \DescribeMacro{sideways\hfill}
% rotate table or figure by 90 degrees anticlockwise and put it on a
% separate page. With the twoside option for the standard \LaTeX\ document
% classes, rotation will be -90 on even pages, unless the options
% |captionleft| or |captionsright| are used. If you use this option, the
% |pos| option is not allowed. See also: |nosideways|, |captionsinside|.
%
% \DescribeMacro{star\hfill}
% use the starred versions of the |table| and |figure| environments, which
% place the float over two columns when the |twocolumn| option or the
% |\twocolumn| command is active. See also: |nostar|.
%
% \DescribeMacro{super\hfill}
% in the footnote table, typeset footnote markers as superscripts; this is
% the default. See also: |nosuper|.
%
% \DescribeMacro{table\hfill}
% produce a table float (this is the default). See also: |figure|.
%
% \DescribeMacro{topcap\hfill}
% put the caption top of the float; this is the default. See also: |botcap|, |sidecap|.
%
% \DescribeMacro{width=...\hfill}
% \REF{tabularx} will be used to typeset the table at the specified
% width\,---\,one or more |X| column specifiers must be provided.
%
% }
%
% \section{The width and maxwidth options}
% When \LaTeX-sources containing tables are generated automatically by a
% script, it is often not known in advance what the maximum size of an
% |l|~column will be. A good solution for this is to use an |X|~specifier,
% typesetting the table at the text width with the \REF{tabularx} package.
% However, this will result in too much white space in cases where the
% column contains small texts only. This problem can be solved by using
% the maxwidth option instead of the width option. The |X|~specifiers will
% then be replaced with |l| as long as the width of the resulting table
% stays with the specified maximum width.
%
% \section{Tables wider than the text width}
% When you make a table wider than |\textwidth|, it will extend in the right margin. 
% If it is a large table, occupying a whole page, you can use the geometry package
% and surround your ctable call with |\newgeometry{width=...,margin=...}| and |\restoregeometry|.
% However, both geometry commands imply |\clearpage|, so your table will appear on an otherwise 
% empty page. 
%
% Alternatively, you can center the table on the paper, extending in both margins, by using the 
% option |doinside=\hspace*{<dimen>}| with an appropriate negative |dimen>|.
%
% \section{Setting option defaults: setupctable}
% Every call of |\ctable| resets the options to their defaults before evaluating the
% first (optional) argument. So if you make two ctables: |\ctable[left,...| and
% |\ctable[...|, the first will be left-aligned on the page, but the second, lacking
% the |left| option, will be centered, because that is the default. If you want all
% your tables left-aligned, it's more practical to change the default by calling
% \DescribeMacro{\setupctable}
% |\setupctable{left}|, either in the preamble or somewhere in the body. In latter
% case only tables following the call will have their defaults changed. \par
% |\setupctable| can set the defaults for all options except (of course) |caption|,
% |cap|, and |label|. Actually, the initial option defaults are set by
% calling |\setupctable| as follows:
% \begin{verbatim}
% \setupctable{
%   captionskip=0pt,        framerule=0pt,    nostar,
%   center,                 framesep=0pt,     pos=tbp,
%   continued=(continued),  maxwidth=0pt,     super,
%   doinside={},            mincapwidth=0pt,  table,
%   framebg=1 1 1,          nonotespar,       topcap,
%   framefg=0 0 0,          nosideways,       width=0pt
% }
% \end{verbatim}
% \section{Other commands}
% \DescribeMacro{\tnote}
% |\tnote[label]{footnote text}| places {\footnotesize
% \textsuperscript{\normalfont\textit{label}}\,footnote text}
% under the table.
% This command can only be used in |\ctable|'s third argument, i.e.\ the foottable
% argument described above. The
% label is optional, the default label is a single $a$. For more
% detailed control, you can also replace this command with something
% like |labeltext&footnotetext\NN|.
% The footnotes are placed under the table, without a rule.
% You therefore probably will want to use the |\LL| (last line)
% command if you use footnotes.
% \par
% \DescribeMacro{\tmark}
% |\tmark[label]| this command places the superscripted label in the
% table. It is equivalent with |$^{label}$|.
% The label is optional, the default label is a single $a$.
% |\tmark| may be used in captions, but only \textit{without} an argument.
% \par
% The newline generating commands are a combination of
% |\tabularnewline| and zero or one of \REF{booktabs} |\toprule|,
% |\midrule| or |\bottomrule|. These combinations have been made, and
% short names have been defined, because source texts for complex
% tables often become very crowded:
% \par
% \DescribeMacro{\NN} Normal Newline, generates just a normal new line.
% An optional dimen parameter inserts extra vertical space under the
% line. Is an alias for |\tabularnewline|
% \par
% \DescribeMacro{\FL} First Line, generates a new line and a thick
% rule with some extra space under it.
% An optional dimen parameter sets the line width; the default is 0.08em.
% Is an alias for |\toprule|
% \par
% \DescribeMacro{\ML} Middle Line: generates a new line and a thin
% rule with some extra space over and under it.
% An optional dimen parameter sets the line width; the default is 0.05em.
% Is an alias for |\tabularnewline\midrule|
% \par
% \DescribeMacro{\LL} Last Line:  generates a new line and a thick
% rule with some extra space over it.
% An optional dimen parameter sets the line width; the default is 0.08em.
% Is an alias for |\tabularnewline\bottomrule|
% \par
% These macros can be used outside |\ctable| constructs.
% \par
% Finally, for completeness, here are some of \REF{booktabs}' commands
% that may be useful:
% \par
% \DescribeMacro{\toprule} |\toprule[<wd>]|
% where |<wd>| is the optional thinkness of the rule.
% \par
% \DescribeMacro{\midrule} |\midrule[<wd>]|.
% \par
% \DescribeMacro{\bottomrule} |\bottomrule[<wd>]|.
% \par
% \DescribeMacro{\cmidrule} |\cmidrule[<wd>](<trim>){a-b}|
% where |<trim>| can be |r|, |l|, or |rl|
% and the rule is drawn over columns |a| through |b|.
% \par
% \DescribeMacro{\morecmidrules} |\morecmidrules|
% must be used to separate two successive cmidrules.
% \par
% \DescribeMacro{\addlinespace} |\addlinespace[<wd>]|
% inserts extra space between rows.
% \par
% \DescribeMacro{\specialrule}
% |\specialrule{<wd>}{<abovespace>}{<belowspace>}|.
% \par
% See the \REF{booktabs} documentation for details.
% \newpage
% \section{Examples}
% Table~\ref{nowidth} is an example taken from the related package
% \REF{threeparttable} by Donald Arseneau, with an extra footnote.
% It was typeset with:
% \color{vbgreen}
% \begin{verbatim}
% \ctable[
%    cap     = The Skewing Angles,
%    caption = The Skewing Angles ($\beta$) for
%              $\fam0 Mu(H)+X_2$ and $\fam0 Mu(H)+HX$~\tmark,
%    label   = nowidth,
%    pos     = h
% ]{rlcc}{
%    \tnote{for the abstraction reaction,
%           $\fam0 Mu+HX \rightarrow MuH+X$.}
%    \tnote[b]{1 degree${} = \pi/180$ radians.}
%    \tnote[c]{this is a particularly long note, showing that
%              footnotes are set in raggedright mode as we don't like
%              hyphenation in table footnotes.}
% }{                                                          \FL
%   &            & $\fam0 H(Mu)+F_2$     & $\fam0 H(Mu)+Cl_2$ \ML
%   &$\beta$(H)  & $80.9^\circ$\tmark[b] & $83.2^\circ$       \NN
%   &$\beta$(Mu) & $86.7^\circ$          & $87.7^\circ$       \LL
% }
% \end{verbatim}
% \color{black}
% \ctable[
%    cap     = The Skewing Angles,
%    caption = The Skewing Angles ($\beta$) for
%              $\fam0 Mu(H)+X_2$ and $\fam0 Mu(H)+HX$~\tmark,
%    label   = nowidth,
%    pos     = h
% ]{rlcc}{
%    \tnote{for the abstraction reaction,
%           $\fam0 Mu+HX \rightarrow MuH+X$.}
%    \tnote[b]{1 degree${} = \pi/180$ radians.}
%    \tnote[c]{this is a particularly long note, showing that
%              footnotes are set in raggedright mode as we don't like
%              hyphenation in table footnotes.}
% }{                                                          \FL
%   &            & $\fam0 H(Mu)+F_2$     & $\fam0 H(Mu)+Cl_2$ \ML
%   &$\beta$(H)  & $80.9^\circ$\tmark[b] & $83.2^\circ$       \NN
%   &$\beta$(Mu) & $86.7^\circ$          & $87.7^\circ$       \LL
% }
% Table~\ref{width} is an example with a width specification,
% taken from the \REF{tabularx} documentation, with the vertical rules
% removed. 
% By using the trimming parameters of the \REF{booktabs} |\cmidrule|
% command, some of the horizontal splitting was regained.
% The |left| option left aligns the table. It was typeset with:
% \color{vbgreen}
% \begin{verbatim}
% \ctable[
%    caption = Example with a specified width of 100mm,
%    label   = width,
%    width   = 100mm,
%    pos     = ht,
%    left
% ]{c>{\raggedright}Xc>{\raggedright}X}{
%    \tnote{footnotes are placed under the table}
% }{                                                         \FL
%    \multicolumn{4}{c}{Example using tabularx}              \ML
%    \multicolumn{2}{c}{Multicolumn entry!} & THREE & FOUR   \NN
%        \cmidrule(r){1-2}\cmidrule(rl){3-3}\cmidrule(l){4-4}
%    one&
%    The width of this column depends on the width of the table.\tmark &
%    three&
%    Column four will act in the same way as column two, with the same width.\LL
% }
% \end{verbatim}
% \color{black}
% \ctable[
%    caption = Example with a specified width of 100mm,
%    label   = width,
%    width   = 100mm,
%    pos     = ht,
%    left
% ]{c>{\raggedright}Xc>{\raggedright}X}{
%    \tnote{footnotes are placed under the table}
% }{                                                         \FL
%    \multicolumn{4}{c}{Example using tabularx}              \ML
%    \multicolumn{2}{c}{Multicolumn entry!} & THREE & FOUR   \NN
%        \cmidrule(r){1-2}\cmidrule(rl){3-3}\cmidrule(l){4-4}
%    one&
%    The width of this column depends on the width of the
%        table.\tmark &
%    three&
%    Column four will act in the same way as
%    column two, with the same width.                        \LL
% }
%
% Figures, even single ones, are always put in tabular cells. This is not
% particularly handy for single pictures, but it eases the construction of
% arrays of pictures, including sub-captions, delineation, and spacing. For a
% small example, which also shows how you can simplify the construction of
% figure arrays, see subsection~\ref{figureexample} on
% page~\pageref{figureexample}.
%
% \section{Option examples}
% In the following, small examples will be shown illustrating the effect of
% options. In the left column the relevant part of the source is shown, in the
% right column you see the result. In most cases you see a standard example on a
% light yellow background, followed by one or more variations on a light blue
% background. Where necessary, the example will show boxes to indicate the page
% and the text body.
%
% \subsection{\ttfamily\bfseries center, left, right}
% These options align the float in the page; the default is |center|:
% \medskip\\
% \ROW{Y}{s02k}{02k}
% \ROW{B}{s02l}{02l}
% \ROW{B}{s02m}{02m}
% 
% \subsection{\ttfamily\bfseries super, nosuper}
% Footnote markers in |ctable| are typeset superscripted by default. Use the
% |nosuper| option to place them on the base line:
% \medskip\\
% \ROW{Y}{s07a}{07a}
% \ROW{B}{s07b}{07b}
% 
% \subsection{\ttfamily\bfseries notespar, nonotespar}
% By default, footnotes in |ctable| are typeset in a table, one line per note. 
% This corresponds with the |nonotespar| option.You can also typeset them in a paragraph,
% one after the other, by using the |notespar| option: 
% \medskip\\
% \ROW{Y}{s12a}{12a}
% \ROW{B}{s12b}{12b}
% 
% \subsection{\ttfamily\bfseries continued}
% The |continued| option suffixes the caption with ` (continued)', and lowers the table
% number by one, so that it obtains the same number as the previous table.
% This option can be given an argument to replace the default suffix:
% \medskip\\
% \ROW{Y}{s13a}{13a}
% \ROW{B}{s13b}{13b}
% \ROW{B}{s13c}{13c}
% 
% \subsection{\ttfamily\bfseries mincapwidth}
% |ctable| forces caption and footnotes to stay within the width of the table.
% Sometimes, however, tables are so narrow, that this is not really what you want.
% In such cases, use the |mincapwidth| option to give caption and footnotes some
% extra room:
% \medskip\\
% \ROW{Y}{s05a}{05a}
% \ROW{B}{s05b}{05b}
% \medskip
% You can set |mincapwidth| to a large value, say |\hsize|, if you want a one-line
% caption. Note, however, that this may influence the horizontal positioning of
% the table: values larger than |\hsize| will move a centered table out of the
% center, a value of |\hsize| will prevent the |left| and |right| options to do
% their work, because the table is already captured between the left and right
% margins. When footnotes are small, you may wish to undo the effect of the
% |mincapwidth| option on them:
% \medskip\\
% \ROW{B}{s05c}{05c}
% \medskip
% 
% \subsection{\ttfamily\bfseries maxwidth}
% When \LaTeX-sources containing tables are generated automatically by a
% script, it is often not known in advance what the maximum size of an |l|
% column will be. A good solution for this is to use an |X| specifier,
% typesetting the table at the text width with the \REF{tabularx} package.
% However, this will result in too much white space in cases where the
% column contains small texts only. This problem can be solved by using
% the maxwidth option instead of the width option. The |X| specifiers will
% then be replaced with |l| as long as the width of the resulting table
% stays with the specified maximum width.
% \medskip\\
% \ROW{Y}{s06a}{06a}
% \ROW{B}{s06b}{06b}
% 
% \subsection{\ttfamily\bfseries framerule}
% The following examples show the use of frames and backgrounds. Every table
% is typeset by |ctable| with a frame around it, but the frame is, by default,
% drawn with a zero width line, and is therefore invisible. You can make it
% visible by either changing the linewidth to a positive value or by giving it a
% background color, which will be used to fill the frame.
% 
% Here is a simple table without a frame, followed by one with a red, |1pt| thick
% frame:
% \medskip\\
% \ROW{Y}{s08a}{08a}
% \ROW{B}{s08b}{08b}
% \medskip
% As you see, the frame fits closely to the first (|\FL|) and last (|\LL|) table
% lines. This can be a reason to either remove those lines, or to introduce some
% whitespace between the frame and the table with the |framesep| option:
% \medskip\\
% \ROW{B}{s09b}{09b}
% \medskip
% And finally, we could also frame the table by giving it a, say, yellow backgound
% instead of a red frame line, or even do both:
% \medskip\\
% \ROW{Y}{s10a}{10a}
% \ROW{B}{s10b}{10b}
% 
% \newpage
% \subsection{\ttfamily\bfseries captionskip}
% The distance between a top caption and the table is \texttt{2ex},
% but it can be varied with \texttt{captionskip}:
% \medskip\\
% \ROW{Y}{s03a}{03a}
% \ROW{B}{s03b}{03b}
% \medskip
% This works for bottom caption, too:
% \medskip\\
% \ROW{Y}{s04a}{04a}
% \ROW{B}{s04b}{04b}
% 
% \subsection{\ttfamily\bfseries figure, botcap}\label{figureexample}
% By default, |ctable| generates a table float, but with the |figure| option, a
% figure float is generated instead. The caption stays on top, so if you are
% accustomed to have bottom caption for your figures, you will probably also need
% the |botcap| option:
% \medskip\\
% \ROW{Y}{s01a}{01a}
% \ROW{B}{s01b}{01b}
% 
% \newpage
% \subsection{\ttfamily\bfseries doinside}
% The argument of doinside is supposed to be a command to be run inside,
% just before the tabular or tabularx environment. You can use this, for
% example, for the adjustment of the font size with |\small|:
% \medskip\\
% \ROW{Y}{s14a}{14a}
% \StopEventually{}
%
% \section{Implementation}
% \begin{macrocode}
\RequirePackage{ifpdf,etoolbox,xcolor,xkeyval,array,tabularx,booktabs,rotating}
%    \end{macrocode}
% The transparency package works only in pdf mode, and if the tikz package is not loaded;
% otherwise define a dummy |\transparent| and issue a warning.
%    \begin{macrocode}
\ifpdf
  \@ifpackageloaded{tikz}{
    \PackageWarning{ctable}{
      Transparency disabled: incompatible with tikz package
    }
    \def\transparent#1{}
  }{
    \RequirePackage{transparent}
  }
\else
  \PackageWarningNoLine{ctable}{\MessageBreak
    Transparency disabled: pdfTeX is not running in PDF mode
  }
  \def\transparent#1{}
\fi
%    \end{macrocode}
% We need to know if the user has loaded tikz after ctable. If so, we have 
% loaded the transparent package already, which then will disturb the tikz
% definitions, so we must quit with an error message.
% Some warnings depend on whether the caption package is loaded or not.
% Here a flag is set to remember that.
%    \begin{macrocode}
\newif\if@CTcaptionloaded
\AtBeginDocument{
  \makeatletter
  \@ifpackageloaded{tikz}{
    \@ifpackageloaded{transparent}{
      \PackageError{ctable}{You must load ctable after tikz}{}
    }
  }{}
  \@ifpackageloaded{caption}{\@CTcaptionloadedtrue}{\@CTcaptionloadedfalse}
  \makeatother
}
\def\NN{\tabularnewline}
\def\FL{\toprule}
\def\ML{\NN\midrule}
\def\LL{\NN\bottomrule}
\def\@dfltCTfgcolor#1 #2 #3={\definecolor{@dfltCTframefg}{rgb}{#1,#2,#3}}
\def\@dfltCTbgcolor#1 #2 #3={\definecolor{@dfltCTframebg}{rgb}{#1,#2,#3}}
\def\@CTfgcolor#1 #2 #3={%
  \definecolor{@CTframefg}{rgb}{#1,#2,#3}
  \def\@CTfgactual{@CTframefg}}
\def\@CTbgcolor#1 #2 #3={%
  \definecolor{@CTframebg}{rgb}{#1,#2,#3}
  \def\@CTbgactual{@CTframebg}}
\def\@CTtextsuperscript#1{%
  \ifx\@CTsuper\@CTtrue\@textsuperscript{#1}\else{\footnotesize#1}\fi
}
%    \end{macrocode}
% define a true and a false value
%    \begin{macrocode}
\def\@CTtrue{1}
\def\@CTfalse{0}
%    \end{macrocode}
% normally we do nothing special inside the float, but that can be changed with the doinside option
%    \begin{macrocode}
\def\@CTdoinside{\relax}
%    \end{macrocode}
% Need three booleans to remember:
%  if we use tabularx,
%  if we are running in the memoir class,
%    \begin{macrocode}
\newif\if@CTusex
\newif\if@CTinmemoir
\@ifclassloaded{memoir}{\@CTinmemoirtrue}{\@CTinmemoirfalse}
%    \end{macrocode}
% Need lots of dimens and their defaults
%    \begin{macrocode}
\newdimen\@CTframesep         \newdimen\@dfltCTframesep
\newdimen\@CTframerule        \newdimen\@dfltCTframerule
\newdimen\@CTwidth            \newdimen\@dfltCTwidth
\newdimen\@CTcaptionskip      \newdimen\@dfltCTcaptionskip
\newdimen\@CTmaxwidth         \newdimen\@dfltCTmaxwidth
\newdimen\@CTmincapwidth      \newdimen\@dfltCTmincapwidth
\newdimen\@CTfooterwidth      \newdimen\@dfltCTfooterwidth
\newdimen\@CTw % the final width
\newdimen\@CTfloatwidth
\newdimen\@CToldsep
\newdimen\@CToldrule
%    \end{macrocode}
%    Allocate box registers so that we can determine the widths of the
%    tables
%    \begin{macrocode}
\newbox\CT@t          % tabular saved and measured here
%    \end{macrocode}
% Option setting commands from keyval. The table position (here, top,
% bottom, page) gets a special treatment, since \LaTeX\ does not expand
% commands there. So instead of putting things like \texttt{tbp} in a
% command like |\@CTbegin| we put
% |\begin{table}[tbp]| in it.
%    \begin{macrocode}

\define@key{suCT}{bgopacity}{\def\@dfltCTbgopacity{#1}}
\define@key{suCT}{botcap}[]{\let\@dfltCTbotcap\@CTtrue}
\define@key{suCT}{captionsinside}[]{\def\rot@LR{-1}
                                      \if@twoside\@rot@twosidetrue
                                      \else\@rot@twosidefalse\fi}
\define@key{suCT}{captionsleft}[]{\@rot@twosidefalse\def\rot@LR{-1}}
\define@key{suCT}{captionsright}[]{\@rot@twosidefalse\def\rot@LR{0}}
\define@key{suCT}{captionskip}{\@dfltCTcaptionskip=#1}
\define@key{suCT}{center}[]{\let\@dfltCTalign\centering}
\define@key{suCT}{continued}{\def\@dflttextcontinued{#1}}
\define@key{suCT}{doinside}{\def\@dfltCTdoinside{#1}}
\define@key{suCT}{figure}[]{\def\@dfltCTtaborfig{figure}}
\define@key{suCT}{framebg}{\@dfltCTbgcolor#1=}
\define@key{suCT}{framefg}{\@dfltCTfgcolor#1=}
\define@key{suCT}{framerule}{\@dfltCTframerule=#1}
\define@key{suCT}{framesep}{\@dfltCTframesep=#1}
\define@key{suCT}{left}[]{\let\@dfltCTalign\raggedright}
\define@key{suCT}{maxwidth}{\@dfltCTmaxwidth=#1}
\define@key{suCT}{mincapwidth}{\@dfltCTmincapwidth=#1}
\define@key{suCT}{footerwidth}[-1pt]{\@dfltCTfooterwidth=#1}
\define@key{suCT}{nonotespar}[]{\let\@dfltCTnotespar\@CTfalse}
\define@key{suCT}{nosideways}[]{\let\@dfltCTsideways\empty}
\define@key{suCT}{nostar}[]{\def\@dfltCTstarred{}}
\define@key{suCT}{nosuper}[]{\let\@dfltCTsuper\@CTfalse}
\define@key{suCT}{notespar}[]{\let\@dfltCTnotespar\@CTtrue}
\define@key{suCT}{pos}{\def\@dfltCTpos{#1}}
\define@key{suCT}{right}[]{\let\@dfltCTalign\raggedleft}
\define@key{suCT}{sideways}[]{\def\@dfltCTsideways{sideways}}
\define@key{suCT}{star}[]{\def\@dfltCTstarred{*}}
\define@key{suCT}{super}[]{\let\@dfltCTsuper\@CTtrue}
\define@key{suCT}{table}[]{\def\@dfltCTtaborfig{table}}
\define@key{suCT}{topcap}[]{\let\@dfltCTbotcap\@CTfalse}
\define@key{suCT}{width}{\@dfltCTwidth=#1}

\newcommand{\setupctable}[1]{\setkeys{suCT}{#1}}
\setupctable{
  bgopacity=1,
  captionskip=0pt,
  center,
  continued=(continued),
  doinside={},
  footerwidth=0pt,
  framebg=1 1 1,
  framefg=0 0 0,
  framerule=0pt,
  framesep=0pt,
  maxwidth=0pt,
  mincapwidth=0pt,
  nonotespar,
  nosideways,
  nostar,
  super,
  table,
  topcap,
  width=0pt,
}

\define@key{CT}{bgopacity}{\def\@CTbgopacity{#1}}
\define@key{CT}{botcap}[]{\let\@CTbotcap\@CTtrue}
\define@key{CT}{captionskip}{\@CTcaptionskip=#1}
\define@key{CT}{caption}{\def\@CTcaption{#1}}
\define@key{CT}{cap}{\def\@CTcap{#1}}
\define@key{CT}{center}[]{\let\@CTalign\centering}
\define@key{CT}{continued}[\@dflttextcontinued]{\def\@CTcontinued{#1}}
\define@key{CT}{doinside}{\def\@CTdoinside{#1}}
\define@key{CT}{figure}[]{\def\@CTtaborfig{figure}}
\define@key{CT}{framebg}{\@CTbgcolor#1=}
\define@key{CT}{framefg}{\@CTfgcolor#1=}
\define@key{CT}{framerule}{\@CTframerule=#1}
\define@key{CT}{framesep}{\@CTframesep=#1}
\define@key{CT}{label}{\def\@CTlabel{#1}}
\define@key{CT}{left}[]{\let\@CTalign\raggedright}
\define@key{CT}{maxwidth}{\@CTmaxwidth=#1}
\define@key{CT}{mincapwidth}{\@CTmincapwidth=#1}
\define@key{CT}{footerwidth}[-1pt]{\@CTfooterwidth=#1}
\define@key{CT}{nonotespar}[]{\let\@CTnotespar\@CTfalse}
\define@key{CT}{nosideways}[]{\let\@CTsideways\empty}
\define@key{CT}{nostar}[]{\def\@CTstarred{}}
\define@key{CT}{nosuper}[]{\let\@CTsuper\@CTfalse}
\define@key{CT}{notespar}[]{\let\@CTnotespar\@CTtrue}
\define@key{CT}{pos}{\def\@CTpos{#1}\def\@CTbegin{\@CTbeg[#1]}}
\define@key{CT}{right}[]{\let\@CTalign\raggedleft}
\define@key{CT}{sidecap}[]{\let\@CTbotcap\undefined}
\define@key{CT}{sideways}[]{\def\@CTsideways{sideways}}
\define@key{CT}{star}[]{\def\@CTstarred{*}}
\define@key{CT}{super}[]{\let\@CTsuper\@CTtrue}
\define@key{CT}{table}[]{\def\@CTtaborfig{table}}
\define@key{CT}{topcap}[]{\let\@CTbotcap\@CTfalse}
\define@key{CT}{width}{\@CTwidth=#1}
%    \end{macrocode}
% A caption will only be generated if the \textsl{caption} option was used, with a
% non-empty value. If so, it goes in the lot/lof, unless the \textsl{cap} option 
% specified a different (probably shorter) value for it. A \textsl{cap} option with
% an empty value inhibits a tof/lof entry.
% The |\expandonce| trick below is from Marco Daniel.
% It expands the arguments of |\caption|
% so that the hyperref command |\nameref| works OK.
% See http://tex.stackexchange.com/questions/57396/
% Note that, in captions, |tmark| may only be used without its optional argument.
%    \begin{macrocode}
\def\@CTCaption{
   \ifx\@CTcaption\empty\else
      \def\@CTcaptionarg{\ifx\@CTlabel\empty\else\label{\@CTlabel}\fi
         \@CTcaption\ \@CTcontinued\strut}
      \begingroup
        \ifx\@CTcap\empty
          \edef\x{\endgroup\noexpand\caption[]{\expandonce\@CTcaptionarg}}
        \else
        \edef\x{\endgroup\noexpand\caption[\expandonce\@CTcap]%
                                          {\expandonce\@CTcaptionarg}}
        \fi
      \x
   \fi
}
%    \end{macrocode}
% Need to redefine X columntype, but the array package would generate a warning.
% So first set the type to be redefined to |\undefined| to suppress the warning.
% Save the standard X type once in the new type Y
%    \begin{macrocode}
\newcolumntype{Y}{X}
\def\@CTXcolumntype#1{%
  \let\NC@find@X\undefined
  \newcolumntype{X}{#1}%
}
\long\def\@CTframe#1#2#3{%
   \@CToldsep\fboxsep\fboxsep\@CTframesep%
   \@CToldrule\fboxrule\fboxrule\@CTframerule%
   \transparent{\@CTbgopacity}%
   \fcolorbox{#1}{#2}{\fboxsep\@CToldsep\fboxrule\@CToldrule\transparent{1}#3}%
}
\newcommand{\tnote}[2][a]{%
   \ifx\@CTnotespar\@CTtrue%
     \@CTtextsuperscript{\normalfont\textit{#1}}\,#2
   \else%
     \hbox{\@CTtextsuperscript{\normalfont\textit{#1}}}&#2\NN
   \fi
}
\newcommand{\tmark}[1][a]{%
   \hbox{\textsuperscript{\normalfont\textit{#1}}}}
\newdimen\@CTcurftwidth
\newcommand{\ctable}[4][]{%
   \let\@CTtaborfig  \@dfltCTtaborfig
   \let\@CTalign     \@dfltCTalign
   \let\@CTsideways  \@dfltCTsideways
   \let\@CTcontinued \empty
   \let\@CTpos       \@dfltCTpos
   \let\@CTcaption   \empty
   \let\@CTcap       \undefined
   \let\@CTlabel     \empty
   \let\@CTbotcap    \@dfltCTbotcap
   \let\@CTstarred   \@dfltCTstarred
   \let\@CTsuper     \@dfltCTsuper
   \let\@CTnotespar  \@dfltCTnotespar
   \let\@CTdoinside  \@dfltCTdoinside
   \let\@CTbgopacity \@dfltCTbgopacity
   \@CTframerule     \@dfltCTframerule
   \@CTcaptionskip   \@dfltCTcaptionskip
   \@CTframesep      \@dfltCTframesep
   \@CTwidth         \@dfltCTwidth
   \@CTmaxwidth      \@dfltCTmaxwidth
   \@CTmincapwidth   \@dfltCTmincapwidth
   \@CTfooterwidth   \@dfltCTfooterwidth
   \def\@CTfgactual {@dfltCTframefg}%
   \def\@CTbgactual {@dfltCTframebg}%
   \def\@CTbeg      {\begin{\@CTsideways\@CTtaborfig\@CTstarred}}%
   \def\@CTbegin    {\@CTbeg}%
   \def\@CTend      {\end{\@CTsideways\@CTtaborfig\@CTstarred}}%
   \setkeys{CT}{#1}%
%    \end{macrocode}
% Make the short caption equal to the caption if it has not been defined
%    \begin{macrocode}
   \ifx\@CTcap\undefined\let\@CTcap\@CTcaption\fi
%    \end{macrocode}
% Issue a warning if the short caption is empty and the caption package is not loaded
%    \begin{macrocode}
   \ifx\@CTcap\empty
     \if@CTcaptionloaded\else
       \PackageWarningNoLine{ctable}{\MessageBreak
          An empty cap= option prevents lot/loc entry only\MessageBreak
          if the caption package is loaded!}
     \fi
   \fi
%    \end{macrocode}
% Currently, the sidecap option can only be used from within the memoir class; 
% here we test if memoir is loaded:
%    \begin{macrocode}
   \if@CTinmemoir\else
      \ifx\@CTbotcap\undefined
         \PackageError{ctable}{\MessageBreak
            You can, currently, use the sidecap option only with\MessageBreak
            memoir documents. Use topcap or botcap only}
      \fi
   \fi  
%    \end{macrocode}
% It makes no sense to use \textsl{width} together with \textsl{maxwidth} or
% \textsl{pos} together with \textsl{sideways}
%    \begin{macrocode}
   \ifdim\@CTwidth=0pt\else
      \ifdim\@CTmaxwidth=0pt\else
         \PackageError{ctable}{\MessageBreak
            You may not use the width and maxwidth options together\MessageBreak
            Use either width or maxwidth}
      \fi
   \fi
   \ifx\@CTpos\empty
      \ifx\@CTsideways\empty\else
      \PackageError{ctable}{\MessageBreak
         You may not use the pos and sideways options together\MessageBreak
         Rotated tables and figures are always typeset on a separate page}
      \fi
   \fi
%    \end{macrocode}
% It makes no sense to label a captionless table, because the label can't
% be placed, leaving the user wondering why references to the table get a ??
%    \begin{macrocode}
   \ifx\@CTcaption\empty
      \ifx\@CTlabel\empty\else
         \PackageError{ctable}{\MessageBreak
            You may not label a captionless table\MessageBreak
            Such a label can't be referenced}
      \fi
   \fi
%    \end{macrocode}
% save the table contents in a box, so we can determine its width,
% initially, save the table typeset with the tabular environment:
%    \begin{macrocode}
   \sbox\CT@t{%
      \@CTXcolumntype{l}% temporarily make  type X = l
      \@CTframe{\@CTfgactual}{\@CTbgactual}{%
         \@CTdoinside
         \begin{tabular}{#2}
            #4%
         \end{tabular}%
      }%
   }%
%    \end{macrocode}
% then look if we'll need the tabularx environment:
%    \begin{macrocode}
   \@CTusexfalse
   \ifdim\@CTmaxwidth=0pt
      \ifdim\@CTwidth=0pt
      \else
         \@CTusextrue
      \fi
   \else
      \ifdim\wd\CT@t>\@CTmaxwidth
         \@CTusextrue
      \fi
   \fi
%
% if so, replace tabular with tabularx:
%
   \if@CTusex
      \sbox\CT@t{%
         \@CTXcolumntype{Y}% restore X
         \@CTframe{\@CTfgactual}{\@CTbgactual}{%
            \@CTdoinside
            \begin{tabularx}{\ifdim\@CTwidth>0pt\@CTwidth\else\@CTmaxwidth\fi}{#2}
               #4%
            \end{tabularx}%
         }%
      }%
   \fi
%    \end{macrocode}
% the |CT@t| box now contains the table as we want to typeset it;
% determine its width:
%    \begin{macrocode}
   \@CTw=\wd\CT@t
%    \end{macrocode}
% Now find the width of the float, |\@CTfloatwidth|; everything in it will
% be centered within that width.
% Normally we'll use the width of the table, |\@CTw|, but if the
% mincapwidth, |\@CTmincapwidth| was set wider than the table, that will be used:
%    \begin{macrocode}
   \@CTfloatwidth=\ifdim\@CTmincapwidth>\@CTw
      \@CTmincapwidth
   \else
      \@CTw
   \fi
%    \end{macrocode}
% |\@CTbegin| is now defined as something like |\begin{table}[tbp]|.
%    \begin{macrocode}
   \@CTbegin
      \ifx\@CTcontinued\empty\else\addtocounter{\@CTtaborfig}{-1}\fi
      \@CTalign
      \begin{minipage}{\@CTfloatwidth}\parindent0pt
         \ifx\@CTbotcap\@CTfalse\@CTCaption\vskip\@CTcaptionskip\fi
         \ifx\@CTbotcap\undefined%
             \begin{sidecaption}[\@CTcap]{\@CTcaption}[\@CTlabel]
         \fi
         \centering{\usebox\CT@t}% insert the tabular
         \def\@CTfootnotes{#3}%
         \ifx#3\empty\else{% append footnotes, if any
%    \end{macrocode}
% Footnotes: if the |footerwidth| is 0pt (the default), typeset the footer as
% wide as the caption (which may be wider than the table because of the
% |mincapwidth| option); if it is -1pt (because |footerwidth| was set without an argument)
% make it as wide as the table; otherwise, give it the width set by the
% |footerwidth| option.
%    \begin{macrocode}
            \@CTcurftwidth=\ifdim\@CTfooterwidth=-1pt\@CTw\else
                                \ifdim\@CTfooterwidth=0pt\hsize\else
                                \@CTfooterwidth\fi\fi
            \footnotesize
            \ifx\@CTnotespar\@CTtrue%
               \\[.2ex]
               \begin{minipage}{\@CTcurftwidth}%
                  #3%
               \end{minipage}%
            \else%
               \\
               \begin{tabularx}{\@CTcurftwidth}{r@{\,}>{\raggedright}X}
                  #3%
               \end{tabularx}%
            \fi
         }
         \fi
         \ifx\@CTbotcap\undefined\end{sidecaption}\fi
         \ifx\@CTbotcap\@CTtrue\vskip\@CTcaptionskip\@CTCaption\fi
      \end{minipage}
   \@CTend
}
%    \end{macrocode}
% \Finale
\endinput
