75 lines
3.2 KiB
TeX
75 lines
3.2 KiB
TeX
%
|
|
% 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 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 \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.
|
|
%
|
|
% \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. A semi-automatic fix is to set
|
|
% \bigstrutjot to \jot and then pass a second argument to \multirow to which
|
|
% is equal to half the number of rows spanned.
|
|
%
|
|
\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\hbox{\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 \raise\@tempdima\box0 }
|
|
|