[243] | 1 | %% |
---|
| 2 | %% multirow.sty V1.6 version (5-May-2004) |
---|
| 3 | %% |
---|
| 4 | %% Author: Jerry Leichter <jerrold.leichter@smarts.com> |
---|
| 5 | %% Piet van Oostrum <piet@cs.uu.nl> |
---|
| 6 | %% |
---|
| 7 | %% This file may be distributed under the terms of the LaTeX Project Public |
---|
| 8 | %% License, as described in lppl.txt in the base LaTeX distribution. |
---|
| 9 | %% Either version 1 or, at your option, any later version. |
---|
| 10 | %% |
---|
| 11 | %% V1.0 was distributed anonymously, based on a Usenet posting that was |
---|
| 12 | %% not intended for stand-alone use. |
---|
| 13 | %% V1.1 was modified by Piet van Oostrum <piet@cs.uu.nl> to allow it to |
---|
| 14 | %% work without bigstrut.sty. |
---|
| 15 | %% V1.2 was modified by Jerry Leichter for the same goal, but using a |
---|
| 16 | %% different approach which will work properly in conjunction with |
---|
| 17 | %% bigstrut.sty. |
---|
| 18 | %% V1.2a was modified by Piet van Oostrum <piet@cs.uu.nl> to use \vskip |
---|
| 19 | %% instead of \raise in positioning, avoiding making rows too high |
---|
| 20 | %% when the adjustment is large. |
---|
| 21 | %% V1.3 was modified by Piet van Oostrum to work properly in a p{} column |
---|
| 22 | %% (\leavevmode added) |
---|
| 23 | %% V1.4 was modified by Piet van Oostrum to check for the special case that |
---|
| 24 | %% the width is given as an *. In this case the natural |
---|
| 25 | %% width of the text argument will be used and the argument |
---|
| 26 | %% is processed in LR-mode. |
---|
| 27 | %% V1.5 was modified by Piet van Oostrum: Added a % after \hbox{#5}\vfill}. |
---|
| 28 | %% Added \struts around #5 for better vertical positioning. |
---|
| 29 | %% Additional coding for negative value of nrows. |
---|
| 30 | %% V1.6 was modified by Piet van Oostrum: Replace a space by \relax after |
---|
| 31 | %% \advance\@tempdima#4. |
---|
| 32 | %% |
---|
| 33 | % Make an entry that will span multiple rows of a table. |
---|
| 34 | % |
---|
| 35 | % \multirow{nrows}[bigstruts]{width}[fixup]{text} |
---|
| 36 | % |
---|
| 37 | % nrows is the number of rows to span. It's up to you to leave the other |
---|
| 38 | % rows empty, or the stuff created by \multirow will over-write it. |
---|
| 39 | % With a positive value of nrows the spanned colomns are this row and |
---|
| 40 | % (nrows-1) rows below it. With a negative value of nrows they are |
---|
| 41 | % this row and (1-nrows) above it. |
---|
| 42 | % |
---|
| 43 | % bigstruts is mainly used if you've used bigstrut.sty. In that case it |
---|
| 44 | % is the total number of uses of \bigstrut within the rows being |
---|
| 45 | % spanned. Count 2 uses for each \bigstrut, 1 for each \bigstrut[x] |
---|
| 46 | % where x is either t or b. The default is 0. |
---|
| 47 | % width is the width to which the text is to be set, or * to indicate that |
---|
| 48 | % the text argument's natural width is to be used. |
---|
| 49 | % |
---|
| 50 | % text is the actual text. If the width was set explicitly, the text will |
---|
| 51 | % be set in a parbox of that width; you can use \\ to force linebreaks |
---|
| 52 | % where you like. |
---|
| 53 | % |
---|
| 54 | % If the width was given as * the text will be set in LR mode. If you |
---|
| 55 | % want a multiline entry in this case you should use a tabular or array |
---|
| 56 | % in the text parameter. |
---|
| 57 | % |
---|
| 58 | % The text is centered vertically within the range spanned by nrows. |
---|
| 59 | % |
---|
| 60 | % fixup is a length used for fine tuning: The text will be raised (or |
---|
| 61 | % lowered, if fixup is negative) by that length above (below) wherever |
---|
| 62 | % it would otherwise have gone. |
---|
| 63 | % |
---|
| 64 | % For example (using both multirow and bigstrut) |
---|
| 65 | % |
---|
| 66 | % \newcommand{\minitab}[2][l]{\begin{tabular}{#1}#2\end{tabular}} |
---|
| 67 | % \begin{tabular}{|c|c|} |
---|
| 68 | % \hline |
---|
| 69 | % \multirow{4}{1in}{Common g text} & Column g2a\\ |
---|
| 70 | % & Column g2b \\ |
---|
| 71 | % & Column g2c \\ |
---|
| 72 | % & Column g2d \\ |
---|
| 73 | % \hline |
---|
| 74 | % \multirow{3}[6]*{Common g text} & Column g2a\bigstrut\\\cline{2-2} |
---|
| 75 | % & Column g2b \bigstrut\\\cline{2-2} |
---|
| 76 | % & Column g2c \bigstrut\\ |
---|
| 77 | % \hline |
---|
| 78 | % \multirow{4}[8]{1in}{Common g text} & Column g2a\bigstrut\\\cline{2-2} |
---|
| 79 | % & Column g2b \bigstrut\\\cline{2-2} |
---|
| 80 | % & Column g2c \bigstrut\\\cline{2-2} |
---|
| 81 | % & Column g2d \bigstrut\\ |
---|
| 82 | % \hline |
---|
| 83 | % \multirow{4}*{\minitab[c]{Common \\ g text}} & Column g2a\\ |
---|
| 84 | % & Column g2b \\ |
---|
| 85 | % & Column g2c \\ |
---|
| 86 | % & Column g2d \\ |
---|
| 87 | % \hline |
---|
| 88 | % \end{tabular} |
---|
| 89 | % |
---|
| 90 | % If any of the spanned rows are unusually large, or if you're using |
---|
| 91 | % bigstrut.sty and \bigstrut's are used assymetrically about the centerline of |
---|
| 92 | % the spanned rows, the vertical centering may not come out right. Use the |
---|
| 93 | % fixup argument in this case. |
---|
| 94 | % |
---|
| 95 | % Just before "text" is expanded, the \multirowsetup macro is expanded to |
---|
| 96 | % set up any special environment. Initially, \multirowsetup contains just |
---|
| 97 | % \raggedright. It can be redefined with \renewcommand. |
---|
| 98 | % |
---|
| 99 | % Bugs: It's just about impossible to deal correctly with descenders. The |
---|
| 100 | % text will be set up centered, but it may then have a baseline that doesn't |
---|
| 101 | % match the baseline of the stuff beside it, in particular if the stuff |
---|
| 102 | % beside it has descenders and "text" does not. This may result in a small |
---|
| 103 | % missalignment. About all that can be done is to do a final touchup on |
---|
| 104 | % "text", using the fixup optional argument. (Hint: If you use a measure |
---|
| 105 | % like .1ex, there's a reasonable chance that the fixup will still be correct |
---|
| 106 | % if you change the point size.) |
---|
| 107 | % |
---|
| 108 | % \multirow is mainly designed for use with table, as opposed to array, |
---|
| 109 | % environments. It will not work well in an array environment since the lines |
---|
| 110 | % have an extra \jot of space between them which it won't account for. Fixing |
---|
| 111 | % this is difficult in general, and doesn't seem worth it. The bigstruts |
---|
| 112 | % argument can be used to provide a semi-automatic fix: First set |
---|
| 113 | % \bigstrutjot to .5\jot. Then simply repeat nrows as the bigstruts argument. |
---|
| 114 | % This will be close, but probably not exact; you can use the fixup argument |
---|
| 115 | % to refine the result. (If you do this repeatedly, you'll probably want to |
---|
| 116 | % wrap these steps up in a simple macro. Note that the modified \bigstrutjot |
---|
| 117 | % value will not give reasonable results if you have bigstruts and use this |
---|
| 118 | % argument for its intended purpose elsewhere. In that case, you might want |
---|
| 119 | % to set it locally.) |
---|
| 120 | % |
---|
| 121 | % If you use \multirow with the colortbl package you have to take |
---|
| 122 | % precautions if you want to color the column that has the \multirow in it. |
---|
| 123 | % colortbl works by coloring each cell separately. So if you use \multirow |
---|
| 124 | % with a positive nrows value, colortbl will first color the top cell, then |
---|
| 125 | % \multirow will typeset nrows cells starting with this cell, and later |
---|
| 126 | % colortbl will color the other cells, effectively hiding the text in that |
---|
| 127 | % area. This can be solved by putting the \multirow is the last row with a |
---|
| 128 | % negative nrows value. |
---|
| 129 | % Example: |
---|
| 130 | % |
---|
| 131 | % \begin{tabular}{l>{\columncolor{yellow}}l} |
---|
| 132 | % aaaa & \\ |
---|
| 133 | % cccc & \\ |
---|
| 134 | % dddd & \multirow{-3}*{bbbb}\\ |
---|
| 135 | % \end{tabular} |
---|
| 136 | % |
---|
| 137 | \def\multirowsetup{\raggedright} |
---|
| 138 | \def\multirow#1{\relax\@ifnextchar |
---|
| 139 | [{\@multirow{#1}}{\@multirow{#1}[0]}} |
---|
| 140 | \def\@multirow#1[#2]#3{\@ifnextchar [{\@xmultirow{#1}[#2]{#3}}% |
---|
| 141 | {\@xmultirow{#1}[#2]{#3}[0pt]}} |
---|
| 142 | \def\@xmultirow#1[#2]#3[#4]#5{\@tempcnta=#1% |
---|
| 143 | \@tempdima\@tempcnta\ht\@arstrutbox |
---|
| 144 | \advance\@tempdima\@tempcnta\dp\@arstrutbox |
---|
| 145 | \ifnum\@tempcnta<0\@tempdima=-\@tempdima\fi |
---|
| 146 | \advance\@tempdima#2\bigstrutjot |
---|
| 147 | \if*#3\setbox0\vtop to \@tempdima{\vfill\multirowsetup |
---|
| 148 | \hbox{\strut#5\strut}\vfill}% |
---|
| 149 | \else |
---|
| 150 | \setbox0\vtop to \@tempdima{\hsize#3\@parboxrestore |
---|
| 151 | \vfill \multirowsetup \strut#5\strut\par\vfill}% |
---|
| 152 | \fi |
---|
| 153 | \ht0\z@\dp0\z@ |
---|
| 154 | \ifnum\@tempcnta<0\advance\@tempdima-\dp\@arstrutbox |
---|
| 155 | \else\@tempdima=\ht\@arstrutbox |
---|
| 156 | \ifnum#2>0 \advance\@tempdima\bigstrutjot \fi |
---|
| 157 | \fi |
---|
| 158 | \advance\@tempdima#4\relax\leavevmode\vtop{\vskip-\@tempdima\box0\vss}} |
---|
| 159 | \@ifundefined{bigstrutjot}{\newdimen\bigstrutjot \bigstrutjot\jot}{} |
---|