diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/ctable/ctable.dtx |
Initial commit
Diffstat (limited to 'macros/latex/contrib/ctable/ctable.dtx')
-rw-r--r-- | macros/latex/contrib/ctable/ctable.dtx | 1290 |
1 files changed, 1290 insertions, 0 deletions
diff --git a/macros/latex/contrib/ctable/ctable.dtx b/macros/latex/contrib/ctable/ctable.dtx new file mode 100644 index 0000000000..0469db5410 --- /dev/null +++ b/macros/latex/contrib/ctable/ctable.dtx @@ -0,0 +1,1290 @@ +% \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}}}\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 |