summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-11 23:52:04 +0000
committerKarl Berry <karl@freefriends.org>2006-01-11 23:52:04 +0000
commitd21901adad62192ce9fff6f2fe7fe862bd99b890 (patch)
treee7b4337057f59f8081cfa44db523452fcbdee598
parentabf0cff974f4b3e51f8beddfd842a58b08ef3458 (diff)
trunk/Master/texmf-dist/source/latex/ctable
git-svn-id: svn://tug.org/texlive/trunk@208 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/source/latex/ctable/ctable.dtx556
-rw-r--r--Master/texmf-dist/source/latex/ctable/ctable.ins23
2 files changed, 579 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/latex/ctable/ctable.dtx b/Master/texmf-dist/source/latex/ctable/ctable.dtx
new file mode 100644
index 00000000000..f43d91762b2
--- /dev/null
+++ b/Master/texmf-dist/source/latex/ctable/ctable.dtx
@@ -0,0 +1,556 @@
+% \iffalse
+% $Id: ctable.dtx,v 1.26 2004/06/19 13:06:01 wybo Exp $
+%%% File: ctable.dtx
+\NeedsTeXFormat{LaTeX2e}
+%<*dtx>
+\ProvidesFile{ctable.dtx}
+%</dtx>
+%<package>\ProvidesPackage{ctable}
+%<driver>\ProvidesFile{ctable.drv}
+%<+abstract> easy centered table and figure floats with footnotes for LaTeX
+% \fi
+%\ProvidesFile{ctable}
+ [2004/06/19 v1.6b LaTeX package ctable]
+%\iffalse
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\usepackage{carom,txfonts,ctable}
+\usepackage[
+ verbose,
+ pdftex,
+ paper=a4paper,
+ bottom=35mm,
+ nohead
+]{geometry}
+
+\parindent0pt
+\begin{document}
+\DocInput{ctable.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \changes{v1.0}{2000/06/01}{First release.}
+% \changes{v1.1}{2001/03/17}{Making use of booktabs package}
+% \changes{v1.2}{2002/06/24}{Using keyval to reduce args to 4}
+% \changes{v1.3}{2002/07/16}{Many syntactic correction,
+% thanks to Johannes Braams}
+% \changes{v1.4}{2003/08/11}{Caption, if empty, will not be typeset
+% rotate option added
+% star option added to use table* and figure*
+% environments}
+% \changes{v1.5}{2003/10/03}{maxwidth option added}
+% \changes{v1.6}{2004/03/20}{left, right and center options added
+% frame{sep,rule,fg,bg} options added
+% error in width-setting corrected}
+% \changes{v1.6a}{2004/04/01}{two errors corrected:
+% made setting fboxsep and fboxrule only temporary
+% removed superfluous space after tabulars}
+% \changes{v1.6b}{2004/06/19}{Added several % at eol to remove superfluous
+% whitespace occurring sometimes}
+% \GetFileInfo{ctable}
+% \MakeShortVerb{\|}
+% \title{The |ctable| package\thanks
+% {This file has version number \fileversion, dated \filedate.}\\
+% for use with \LaTeX2e}
+% \author{Wybo Dekker\\ |wybo@servalys.nl|}
+% \date{\filedate}
+% \maketitle
+% \tableofcontents
+% \listoftables
+% \listoffigures
+%
+% \section{Purpose} The |ctable| package lets you easily typeset
+% captioned table and figure floats with optional
+% footnotes. Both caption and footnotes will be forced within the
+% width of the table.
+%
+% If the width of the table is specified, then tabularx will be used
+% to typeset it, and the |X| column specifier can be used. Otherwise
+% tabular will be used.
+%
+% This package defines the commands |\ctable|,
+% |\tnote| and |\tmark|, as well as 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 |array| and |booktabs|
+% packages, all commands from those packages are available as well.
+%
+% Note that, in line with the comments that Simon Fear made
+% describing his |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{\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 lines} % lines 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.
+% Currently the following option keys have been defined:
+% \\[2ex]
+% \begin{tabularx}{\hsize}{@{}lX@{}}
+% |caption={...}|& table caption; the braces are needed only if your
+% caption contains a comma.\NN
+%
+% |cap={...}| & for a short caption to go to the |\tableofcontents|.\NN
+%
+% |pos=...| & float position, default: |tbp|.\NN
+%
+% |label=...| & for |\label|\NN
+%
+% |width=...| & tabularx will be used to typeset the table at the
+% specified width\,---\,one or more |X| column
+% specifiers must be provided.\NN
+%
+% |maxwidth=...| & 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.\NN
+%
+% |center| & center the table in the available text width; this is
+% the default.\NN
+%
+% |left| & left align the table in the available text width.\NN
+%
+% |right| & right align the table in the available text width.\NN
+%
+% |figure| & produce a figure float instead of a table float.\NN
+%
+% |botcap| & put the caption at the bottom of the float instead
+% of on top of it.\NN
+%
+% |rotate| & rotate table or figure by 90 degrees anticlockwise
+% and put it on a separate page. If you use this option,
+% the |pos| option is not allowed.\NN
+%
+% |star| & 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.\NN
+%
+% |framerule=...|& draw a frame around the table with the given rule
+% thickness. The default is |0pt|, so that no frame
+% will be seen.\NN
+%
+% |framesep=...| & set the distance between the frame and the table
+% to the given dimension. The default is |0pt|.\NN
+%
+% |framefg=|\sl r g b & 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).\NN
+%
+% |framebg=|\sl r g b & 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).\NN
+% \end{tabularx}
+% \\[2ex]
+% 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.
+% \DescribeMacro{\tnote}
+% |\tnote[label]{footnote text}| places {\footnotesize
+% \textsuperscript{\normalfont\textit{label}}\,footnote text}
+% under the table.
+% Can only be used in the foottable parameter 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|.
+% \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$.
+% \par
+% The newline generating commands are a combination of
+% |\tabularnewline| and zero or one of |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\\
+% \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 \\
+% \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 \\
+% \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 \\
+% These macros can be used outside |\ctable| constructs.
+% \par
+% Finally, for completeness, here are some of |booktabs|' commands
+% that may be useful:\\
+% \DescribeMacro{\toprule} |\toprule[<wd>]|
+% where |<wd>| is the optional thinkness of the rule\\
+% \DescribeMacro{\midrule} |\midrule[<wd>]|\\
+% \DescribeMacro{\bottomrule} |\bottomrule[<wd>]|\\
+% \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|\\
+% \DescribeMacro{\morecmidrules} |\morecmidrules|
+% must be used to separate two successive cmidrules\\
+% \DescribeMacro{\addlinespace} |\addlinespace[<wd>]|
+% inserts extra space between rows\\
+% \DescribeMacro{\specialrule}
+% |\specialrule{<wd>}{<abovespace>}{<belowspace>}|\\
+% See the |booktabs| documentation for details.
+% \ctable[
+% cap = The Skewing Angles,
+% caption = The Skewing Angles ($\beta$) for
+% $\fam0 Mu(H)+X_2$ and $\fam0 Mu(H)+HX$~\tmark,
+% label = tab:nowidth,
+% ]{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
+% }
+%
+% \subsection{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,
+% typesetteing the table at the text width with the 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{Examples}
+% \subsection{Tables}
+% Table~\ref{tab:nowidth} is an example taken from the related package
+% threeparttable.sty by Donald Arseneau, with an extra footnote.
+% It was typeset with:
+% \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 = tab:nowidth,
+% ]{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}
+% \ctable[
+% caption = Example with a specified width of 100mm,
+% width = 100mm,
+% pos = b,
+% label = tab:width,
+% 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
+% }
+%
+% Table~\ref{tab:width} is an example with a width specification,
+% taken from the |tabularx| documentation, with the vertical rules
+% removed. By using the trimming parameters of the |\LR|, |\MR|, and
+% |\RR| commands of the |booktabs| package, some of the horizontal
+% splitting was regained. By using the |left| option, the table has
+% been left aligned. It was typeset with:
+% \begin{verbatim}
+% \ctable[
+% caption = Example with a specified width of 100mm,
+% width = 100mm,
+% pos = b,
+% label = tab:width,
+% 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}
+%
+% \subsection{Figures}
+% 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.
+% Figure~\ref{fig} shows a figure that has been produced with the |\ctable|
+% command, in combination with |\usepackage{carom}|;
+% it has been typeset with:
+% \begin{verbatim}
+% \ctable[
+% caption = The di- and tri-bromobenzenes,
+% label = fig,
+% botcap,
+% framebg = .53 .81 .92,
+% framerule = 1pt,
+% framesep = 4ex,
+% figure,
+% ]{ccc}{}{ \NN
+% \bzdrv{1==Br;2==Br}&
+% \bzdrv{1==Br;3==Br}&
+% \bzdrv{1==Br;4==Br} \NN
+% 1,2 & 1,3 & 1,4 \NN[3ex]
+% \bzdrv{1==Br;2==Br;3==Br}&
+% \bzdrv{1==Br;2==Br;4==Br}&
+% \bzdrv{1==Br;3==Br;5==Br} \NN
+% 1,2,3 & 1,2,4 & 1,3,5
+% }
+% \end{verbatim}
+% \ctable[
+% caption = The di- and tri-bromobenzenes,
+% label = fig,
+% botcap,
+% framebg = .53 .81 .92,
+% framerule = 1pt,
+% framesep = 4ex,
+% figure,
+% ]{ccc}{}{ \NN
+% \bzdrv{1==Br;2==Br}&
+% \bzdrv{1==Br;3==Br}&
+% \bzdrv{1==Br;4==Br} \NN
+% 1,2 & 1,3 & 1,4 \NN[3ex]
+% \bzdrv{1==Br;2==Br;3==Br}&
+% \bzdrv{1==Br;2==Br;4==Br}&
+% \bzdrv{1==Br;3==Br;5==Br} \NN
+% 1,2,3 & 1,2,4 & 1,3,5
+% }
+% (The excessive whitespace at the left of the figure is caused by
+% the bounding boxes generated by the \textsl{carom} package.)
+% \StopEventually{}\newpage
+% \section{Implementation}
+% \parskip2ex
+% \begin{macrocode}
+%<*package>
+\RequirePackage{color,keyval,array,tabularx,booktabs,rotating}
+\def\NN{\tabularnewline}
+\def\FL{\toprule}
+\def\ML{\NN\midrule}
+\def\LL{\NN\bottomrule}
+\def\@ctblfgcolor#1 #2 #3={\definecolor{@ctblframefg}{rgb}{#1,#2,#3}}
+\def\@ctblbgcolor#1 #2 #3={\definecolor{@ctblframebg}{rgb}{#1,#2,#3}}
+\newdimen\@ctblframesep
+\newdimen\@ctblframerule
+\newdimen\@ctblwidth
+\newdimen\@ctblmaxwidth
+\newdimen\@ctblw % the final width
+% \end{macrocode}
+% Allocate box registers so that we can determine the widths of the
+% tables
+% \begin{macrocode}
+\newbox\ctbl@tabelx % the width with X columns
+\newbox\ctbl@tabel % the width where X is replaced with l
+\newbox\ctbl@t % the final box will become one of the two above
+% \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 |\@ctblbegin| we put
+% |\begin{table}[tbp]| in it.
+% \begin{macrocode}
+\define@key{ctbl}{caption} {\def\@ctblcaption {#1}}
+\define@key{ctbl}{cap} {\def\@ctblcap {#1}}
+\define@key{ctbl}{label} {\def\@ctbllabel {#1}}
+\define@key{ctbl}{pos} {\def\@ctblpos {#1}
+ \def\@ctblbegin{\@ctblbeg[#1]}}
+\define@key{ctbl}{width} {\@ctblwidth =#1}
+\define@key{ctbl}{maxwidth}{\@ctblmaxwidth =#1}
+\define@key{ctbl}{botcap}[]{\def\@ctblbotcap {1}}
+\define@key{ctbl}{rotate}[]{\def\@ctblrotate {sideways}}
+\define@key{ctbl}{figure}[]{\def\@ctbltaborfig{figure}}
+\define@key{ctbl}{center}[]{\def\@ctblalign {center}}
+\define@key{ctbl}{right} []{\def\@ctblalign {flushright}}
+\define@key{ctbl}{left} []{\def\@ctblalign {flushleft}}
+\define@key{ctbl}{star} []{\def\@ctblstarred {*}}
+\define@key{ctbl}{framerule}{\@ctblframerule =#1}
+\define@key{ctbl}{framesep}{\@ctblframesep =#1}
+\define@key{ctbl}{framefg}{\@ctblfgcolor#1=}
+\define@key{ctbl}{framebg}{\@ctblbgcolor#1=}
+% \end{macrocode}
+% a caption will only be generated if the \textsl{caption} option was used:
+% \begin{macrocode}
+\def\@ctblCaption{
+ \ifx\@ctblcap\empty\let\@ctblcap\@ctblcaption\fi
+ \ifx\@ctblcaption\empty\else
+ \caption[\@ctblcap]{\label{\@ctbllabel}\@ctblcaption}
+ \fi
+}
+\newdimen\@ctbloldsep
+\newdimen\@ctbloldrule
+\def\@ctblframe#1#2#3{%
+ \@ctbloldsep\fboxsep\fboxsep\@ctblframesep%
+ \@ctbloldrule\fboxrule\fboxrule\@ctblframerule%
+ \fcolorbox{#1}{#2}{\fboxsep\@ctbloldsep\fboxrule\@ctbloldrule #3}%
+}
+\newcommand{\tnote}[2][a]{%
+ \hbox{\@textsuperscript{\normalfont\textit{#1}}}&#2\NN}
+\newcommand{\tmark}[1][a]{%
+ \hbox{\@textsuperscript{\normalfont\textit{#1}}}}
+\newcommand{\ctable}[4][]{
+ \def\@ctbltaborfig{table}
+ \def\@ctblalign {center}
+ \def\@ctblrotate {}
+ \def\@ctblpos {}
+ \def\@ctblcaption {}
+ \def\@ctblcap {}
+ \def\@ctbllabel {}
+ \def\@ctblbeg {\begin{\@ctblrotate\@ctbltaborfig\@ctblstarred}}
+ \def\@ctblbegin {\@ctblbeg}
+ \def\@ctblend {\end{\@ctblrotate\@ctbltaborfig\@ctblstarred}}
+ \def\@ctblbotcap {}
+ \def\@ctblstarred {}
+ \definecolor{@ctblframefg}{rgb}{0,0,0}
+ \definecolor{@ctblframebg}{rgb}{1,1,1}
+ \@ctblframerule0pt
+ \@ctblframesep0pt
+ \@ctblwidth=0pt
+ \@ctblmaxwidth=0pt
+ \setkeys{ctbl}{#1}
+% \end{macrocode}
+% It makes no sense to use \textsl{width} together with \textsl{maxwidth} or
+% \textsl{pos} together with \textsl{rotate}
+% \begin{macrocode}
+ \ifdim\@ctblwidth=0pt\else
+ \ifdim\@ctblmaxwidth=0pt\else
+ \PackageError{ctable}{
+ You may not use the width and maxwidth options together}{%
+ Use either width or maxwidth}
+ \fi
+ \fi
+ \ifx\@ctblpos\empty\else
+ \ifx\@ctblrotate\empty\else
+ \PackageError{ctable}{
+ You may not use the pos and rotate options together}{%
+ Rotated tables and figures are always typeset on a separate page}
+ \fi
+ \fi
+ \newcolumntype{Y}{X}% save the X type
+% \end{macrocode}
+% save the table contents in a box, so we can determine its width, one box
+% will contain the table typeset with the tabular environment:
+% \begin{macrocode}
+ \sbox\ctbl@tabel{%
+ \newcolumntype{X}{l}% temporarily make type X = l
+ \@ctblframe{@ctblframefg}{@ctblframebg}{%
+ \begin{tabular}{#2}
+ #4
+ \end{tabular}%
+ }%
+ }
+% \end{macrocode}
+% the other will get the table typeset with the tabularx environment:
+% \begin{macrocode}
+
+ \sbox\ctbl@tabelx{%
+ \newcolumntype{X}{Y}% restore X
+ \@ctblframe{@ctblframefg}{@ctblframebg}{%
+ \begin{tabularx}{\ifdim\@ctblwidth>0pt\@ctblwidth\else\@ctblmaxwidth\fi}{#2}
+ #4
+ \end{tabularx}%
+ }%
+ }
+% \end{macrocode}
+% if no \textsl{maxwidth} was given:
+% \begin{macrocode}
+ \ifdim\@ctblmaxwidth=0pt
+% \end{macrocode}
+% and also no \textsl{width}:
+% \begin{macrocode}
+ \ifdim\@ctblwidth=0pt
+% \end{macrocode}
+% then use the tabular environment:
+% \begin{macrocode}
+ \sbox{\ctbl@t}{\usebox\ctbl@tabel}
+ \else
+% \end{macrocode}
+% if width was given: use the tabularx environment
+% \begin{macrocode}
+ \sbox{\ctbl@t}{\usebox\ctbl@tabelx}
+ \fi
+ \else
+% \end{macrocode}
+% with the \textsl{maxwidth} option, we check if the table, typeset with
+% the tabular environment would get too wide:
+% \begin{macrocode}
+ \ifdim\wd\ctbl@tabel>\@ctblmaxwidth
+% \end{macrocode}
+% if so, we use the tabularx environment:
+% \begin{macrocode}
+ \sbox{\ctbl@t}{\usebox\ctbl@tabelx}
+ \else
+% \end{macrocode}
+% but if within limits, we use the tabular environment:
+% \begin{macrocode}
+ \sbox{\ctbl@t}{\usebox\ctbl@tabel}
+ \fi
+ \fi
+% \end{macrocode}
+% the |ctbl@t| box now contains the table as we want to typeset it;
+% deternmine its width:
+% \begin{macrocode}
+ \@ctblw=\wd\ctbl@t
+% \end{macrocode}
+% |\@ctblbegin| is now defined as something like |\begin{table}[tbp]|.
+% \begin{macrocode}
+ \@ctblbegin
+ \begin{\@ctblalign}
+ \begin{minipage}{\@ctblw}
+ \ifx\@ctblbotcap\empty\@ctblCaption\vspace{2ex}\fi
+ \usebox\ctbl@t % insert the tabular
+ \def\@ctblfootnotes{#3}
+ \ifx#3\empty\else % append footnotes, if any
+ \\
+ \begin{tabularx}{\@ctblw}{r@{\,}>{\footnotesize\raggedright}X}
+ #3
+ \end{tabularx}
+ \fi
+ \ifx\@ctblbotcap\empty\else\@ctblCaption\fi
+ \end{minipage}
+ \end{\@ctblalign}
+ \@ctblend
+}
+%</package>
+% \end{macrocode}
+% \Finale
diff --git a/Master/texmf-dist/source/latex/ctable/ctable.ins b/Master/texmf-dist/source/latex/ctable/ctable.ins
new file mode 100644
index 00000000000..9ab8dbcb217
--- /dev/null
+++ b/Master/texmf-dist/source/latex/ctable/ctable.ins
@@ -0,0 +1,23 @@
+% $Id: ctable.ins,v 1.3 2002/05/20 19:03:10 wybo Exp $
+\def\batchfile{ctable.ins}
+\input docstrip.tex
+
+\keepsilent
+\askforoverwritefalse
+
+\generate{\file{ctable.sty}{\from{ctable.dtx}{package}}
+ \file{ctable.tex}{\from{ctable.dtx}{driver}}
+}
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* files into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space ctable.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the files ending with}
+\Msg{* `.dtx' through pdflatex.}
+\Msg{*}
+\Msg{***********************************************************}
+
+\endinput