% File:      tabularkv.sty
% Version:   2005/07/22 v1.0
% Author:    Heiko Oberdiek
% Email:     <oberdiek@uni-freiburg.de>
%
% Copyright: Copyright (C) 2005 Heiko Oberdiek.
%
%            This work may be distributed and/or modified under
%            the conditions of the LaTeX Project Public License,
%            either version 1.3 of this license or (at your option)
%            any later version. The latest version of this license
%            is in
%              http://www.latex-project.org/lppl.txt
%            and version 1.3 or later is part of all distributions
%            of LaTeX version 2003/12/01 or later.
%
%            This work has the LPPL maintenance status "maintained".
%
%            This Current Maintainer of this work is Heiko Oberdiek.
%
% Function:  This package adds a key value interface for tabular
%            by the new environment "tabularkv". Thus the TeX
%            source code looks better by named parameters,
%            especially if package "tabularht" is used.
%
% Use:       \usepackage{tabularkv}
%
%            The package provides the environment "tabularkv"
%            that takes an optional argument with tabular
%            parameters:
%            * width (width specification, "tabular*" is used)
%            * x (width specification, "tabularx" is used,
%              package "tabularx" must be loaded)
%            * height (height specification, see package tabularht)
%            * valign (vertical positioning, this option is optional)
%              values: top, bottom, center
%
%            Parameter "valign" optional, the following are
%            equivalent:
%            \begin{tabularkv}[..., valign=top]{l}...\end{tabularkv}
%            \begin{tabularkv}[...][t]{l}...\end{tabularkv}
%
% Example:
%            \documentclass{article}
%            \usepackage{tabularkv}
%
%            \begin{document}
%            \fbox{%
%              \begin{tabularkv}[
%                width=4in,
%                height=1in,
%                valign=center
%              ]{@{}l@{\extracolsep{\fill}}r@{}}
%                upper left corner & upper right corner\\%
%                \noalign{\vfill}%
%                \multicolumn{2}{@{}c@{}}{bounding box}\\
%                \noalign{\vfill}%
%                lower left corner & lower right corner\\
%              \end{tabularkv}%
%            }
%            \end{document}
%
% Installation:
%            CTAN location: CTAN:macros/latex/contrib/oberdiek/tabularkv.sty
%            TDS location: TDS:tex/latex/oberdiek/tabularkv.sty
%
% History:   2005/09/22 v1.0:
%              * first public version,
%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{tabularkv}
  [2005/09/22 v1.0 Key value interface for tabular parameters]

\RequirePackage{keyval}
\RequirePackage{tabularht}

\let\tabKV@star@x\@empty
\let\tabKV@width\@empty
\let\tabKV@valign\@empty

\define@key{tabKV}{height}{%
  \setlength{\dimen@}{#1}%
  \edef\@toarrayheight{to\the\dimen@}%
}
\define@key{tabKV}{width}{%
  \def\tabKV@width{{#1}}%
  \def\tabKV@star@x{*}%
}
\define@key{tabKV}{x}{%
  \def\tabKV@width{{#1}}%
  \def\tabKV@star@x{x}%
}
\define@key{tabKV}{valign}{%
  \edef\tabKV@valign{[\@car #1c\@nil]}%
}

\newenvironment{tabularkv}[1][]{%
  \setkeys{tabKV}{#1}%
  \@nameuse{%
    tabular\tabKV@star@x\expandafter\expandafter\expandafter
  }%
  \expandafter\tabKV@width\tabKV@valign
}{%
  \@nameuse{endtabular\tabKV@star@x}%
}

\endinput
