1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
multirow.sty V2.0 version (2016/09/27)
bigstruts.sty V2.0 version (2016/09/27)
bigdelim.sty V2.0 version (2016/09/27)
Original Author: Jerry Leichter
Current Author: Piet van Oostrum <piet@vanoostrum.org>
This file may be distributed under the terms of the LaTeX Project Public
License, as described in lppl.txt in the base LaTeX distribution.
Either version 1 or, at your option, any later version.
multirow.sty:
Make an entry that will span multiple rows of a table.
\multirow[vpos]{nrows}[bigstruts]{width}[fixup]{text}
vpos is the vertical positioning: t. c. or b.
nrows is the number of rows to span. It's up to you to leave the other
rows empty, or the stuff created by \multirow will over-write it.
With a positive value of nrows the spanned colomns are this row and
(nrows-1) rows below it. With a negative value of nrows they are
this row and (1-nrows) above 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, or * to indicate that
the text argument's natural width is to be used.
text is the actual text. If the width was set explicitly, the text will
be set in a parbox of that width; you can use \\ to force linebreaks
where you like.
If the width was given as * the text will be set in LR mode. If you
want a multiline entry in this case you should use a tabular or array
in the text parameter.
If the width is given as = the width will be taken from the
tabular column in which it appears. This only works for p{}
columns and similar, for example X columns in tabularx, and LCRJ
columns in tabulary.
The text is centered vertically within the range spanned by nrows,
unless a vpos argument is given.
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 (using both multirow and bigstrut)
\newcommand{\minitab}[2][l]{\begin{tabular}{#1}#2\end{tabular}}
\begin{tabular}{|c|c|}
\hline
\multirow{4}{1in}{Common g text} & Column g2a\\
& Column g2b \\
& Column g2c \\
& Column g2d \\
\hline
\multirow{3}[6]*{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
\multirow{4}*{\minitab[c]{Common \\ g text}} & Column g2a\\
& Column g2b \\
& Column g2c \\
& Column g2d \\
\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 may 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
if you change the point size.)
\multirow is mainly designed for use with table, as opposed to array,
environments. It will not work well in an array environment 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 used to provide a semi-automatic fix: First set
\bigstrutjot to .5\jot. Then simply repeat nrows as the bigstruts argument.
This will be close, but probably not exact; you can use the fixup argument
to refine the result. (If you do this repeatedly, you'll probably want to
wrap these steps up in a simple macro. Note that the modified \bigstrutjot
value will not give reasonable results if you have bigstruts and use this
argument for its intended purpose elsewhere. In that case, you might want
to set it locally.)
If you use \multirow with the colortbl package you have to take
precautions if you want to color the column that has the \multirow in it.
colortbl works by coloring each cell separately. So if you use \multirow
with a positive nrows value, colortbl will first color the top cell, then
\multirow will typeset nrows cells starting with this cell, and later
colortbl will color the other cells, effectively hiding the text in that
area. This can be solved by putting the \multirow is the last row with a
negative nrows value.
Example:
\begin{tabular}{l>{\columncolor{yellow}}l}
aaaa & \\
cccc & \\
dddd & \multirow{-3}*{bbbb}\\
\end{tabular}
bigstrut.sty:
\bigstrut[pos] where pos is t or b
Add a bit of space above, below, or both a tabular row. The amount
is determined by \bigstrutjot.
bigdelim.sty:
\ldelim({n}{width}[text]
\rdelim){n}{width}[text]
Put a big delimiter over n rows in a tabular, optionally preceded
(\ldelim) or followed (rdelim) by text.
|