%%
%% multirow.sty  V1.2 (27-May-94)
%%
%% Author:  Jerry Leichter (leichter@cs.rutgers.edu)
%%
%% V1.0 was distributed anonymously, based on a Usenet posting that was
%%      not intended for stand-alone use.
%% V1.1 was modified by Piet van Oostrum <piet@cs.ruu.nl> to allow it to
%%      work without bigstrut.sty.
%% V1.2 was modified by Jerry Leichter for the same goal, but using a
%%      different approach which will work properly in conjunction with
%%      bigstrut.sty.
%
% Make an entry that will span multiple rows of a table.
%
% \multirow{nrows}[bigstruts]{width}[fixup]{text}
%
% nrows is the number of rows to span.  It's up to the user to leave the
%       rows empty, or the stuff created by \multirow will over-write it.
% bigstruts is mainly used if you've used bigstrut.sty.  In that case it
%       is the total number of uses of \bigstrut within the rows being
%       spanned.  Count 2 uses for each \bigstrut, 1 for each \bigstrut[x]
%       where x is either t or b.  The default is 0.
% width is the width to which the text is to be set.
% text is the actual text.  It will be set in LR mode.  You can use \\
%       within text to force linebreaks where you like.  The text is centered
%       vertically within the range spanned by nrows.
% fixup is a length used for fine tuning:  The text will be raised (or
%       lowered, if fixup is negative) by that length above (below) wherever
%       it would otherwise have gone.
%
% For example:
%
% \begin{tabular}{|c|c|}
% \hline
% \multirow{4}{1in}{Common g text} & Column g2a\\
%       & Column g2b \\
%       & Column g2c \\
%       & Column g2d \\
% \hline
% \multirow{3}[6]{1in}{Common g text} & Column g2a\bigstrut\\\cline{2-2}
%       & Column g2b \bigstrut\\\cline{2-2}
%       & Column g2c \bigstrut\\
% \hline
% \multirow{4}[8]{1in}{Common g text} & Column g2a\bigstrut\\\cline{2-2}
%       & Column g2b \bigstrut\\\cline{2-2}
%       & Column g2c \bigstrut\\\cline{2-2}
%       & Column g2d \bigstrut\\
% \hline
% \end{tabular}
%
% If any of the spanned rows are unusually large, or if you're using
% bigstrut.sty and \bigstrut's are used assymetrically about the centerline of
% the spanned rows, the vertical centering may not come out right.  Use the
% fixup argument in this case.
%
% Just before "text" is expanded, the \multirowsetup macro is expanded to
% set up any special environment.  Initially, \multirowsetup contains just
% \raggedright.  It can be redefined with \renewcommand.
%
% Bugs:  It's just about impossible to deal correctly with descenders.  The
% text will be set up centered, but it may then have a baseline that doesn't
% match the baseline of the stuff beside it, in particular if the stuff
% beside it has descenders and "text" does not.  This will result in a small
% missalignment.  About all that can be done is to do a final touchup on
% "text", using the fixup optional argument.  (Hint:  If you use a measure
% like .1ex, there's a reasonable chance that the fixup will still be correct
% when if you change the point size.)
%
% \multirow probably isn't too useful in array, as opposed to table, environ-
% ments.  It will not work well there since the lines have an extra \jot of
% space between them which it won't account for.  Fixing this is difficult in
% general, and doesn't seem worth it.  The bigstruts argument can be (mis)used
% to provide a semi-automatic fix:  Set \bigstrutjot to \jot (only needed if
% your're actually using bigstrut.sty) and then use a value of half the number
% of rows spanned for bigstruts.  This will be close, but probably not exact.
%
\def\multirowsetup{\raggedright} \def\multirow#1{\relax\@ifnextchar
  [{\@multirow{#1}}{\@multirow{#1}[0]}}
\def\@multirow#1[#2]#3{\@ifnextchar [{\@xmultirow{#1}[#2]{#3}}%
  {\@xmultirow{#1}[#2]{#3}[0pt]}}
\def\@xmultirow#1[#2]#3[#4]#5{\@tempcnta=#1%
  \@tempdima\@tempcnta\ht\@arstrutbox
  \advance\@tempdima\@tempcnta\dp\@arstrutbox
  \advance\@tempdima#2\bigstrutjot
  \setbox0\vtop to \@tempdima{\hsize#3\@parboxrestore
                \vfill \multirowsetup #5\par\vfill}%
  \ht0\z@\dp0\z@
  \@tempdima\ht\@arstrutbox \ifnum#2>0 \advance\@tempdima\bigstrutjot \fi
  \advance\@tempdima#4 \vtop{\vskip-\@tempdima\box0\vss}}
\@ifundefined{bigstrutjot}{\newdimen\bigstrutjot \bigstrutjot\jot}{}
