% % 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 }