texlive[42160] Master/texmf-dist: multirow (27sep16)
commits+karl at tug.org
commits+karl at tug.org
Tue Sep 27 23:06:23 CEST 2016
Revision: 42160
http://tug.org/svn/texlive?view=revision&revision=42160
Author: karl
Date: 2016-09-27 23:06:23 +0200 (Tue, 27 Sep 2016)
Log Message:
-----------
multirow (27sep16)
Modified Paths:
--------------
trunk/Master/texmf-dist/doc/latex/multirow/README
trunk/Master/texmf-dist/doc/latex/multirow/multirow.pdf
trunk/Master/texmf-dist/tex/latex/multirow/bigdelim.sty
trunk/Master/texmf-dist/tex/latex/multirow/bigstrut.sty
trunk/Master/texmf-dist/tex/latex/multirow/multirow.sty
Added Paths:
-----------
trunk/Master/texmf-dist/source/latex/multirow/
trunk/Master/texmf-dist/source/latex/multirow/multirow.dtx
trunk/Master/texmf-dist/source/latex/multirow/multirow.ins
Removed Paths:
-------------
trunk/Master/texmf-dist/doc/latex/multirow/miscdoc.sty
trunk/Master/texmf-dist/doc/latex/multirow/multirow.tex
Modified: trunk/Master/texmf-dist/doc/latex/multirow/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/multirow/README 2016-09-27 01:16:26 UTC (rev 42159)
+++ trunk/Master/texmf-dist/doc/latex/multirow/README 2016-09-27 21:06:23 UTC (rev 42160)
@@ -1,16 +1,22 @@
- multirow.sty V1.6 version (5-May-2004)
+multirow.sty V2.0 version (2016/09/27)
+bigstruts.sty V2.0 version (2016/09/27)
+bigdelim.sty V2.0 version (2016/09/27)
- Author: Jerry Leichter <jerrold.leichter at smarts.com>
- Piet van Oostrum <piet at cs.uu.nl>
+Original Author: Jerry Leichter
+Current Author: Piet van Oostrum <piet at 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{nrows}[bigstruts]{width}[fixup]{text}
+\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
@@ -24,16 +30,22 @@
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
+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
+ 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.
- The text is centered vertically within the range spanned by nrows.
+ 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.
@@ -110,4 +122,19 @@
cccc & \\
dddd & \multirow{-3}*{bbbb}\\
\end{tabular}
-
\ No newline at end of file
+
+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.
+
Deleted: trunk/Master/texmf-dist/doc/latex/multirow/miscdoc.sty
===================================================================
--- trunk/Master/texmf-dist/doc/latex/multirow/miscdoc.sty 2016-09-27 01:16:26 UTC (rev 42159)
+++ trunk/Master/texmf-dist/doc/latex/multirow/miscdoc.sty 2016-09-27 21:06:23 UTC (rev 42160)
@@ -1,108 +0,0 @@
-\ProvidesPackage{miscdoc}[2010/01/20 v1.2 documentation macros misc latex pkgs]
-
-% miscdoc.sty
-% Copyright 2010 Robin Fairbairns
-%
-% This work may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.3
-% of this license or (at your option) any later version.
-% The latest version of this license is in
-% http://www.latex-project.org/lppl.txt
-% and version 1.3 or later is part of all distributions of LaTeX
-% version 2005/12/01 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Robin Fairbairns.
-%
-% This work consists of the file miscdoc.sty (only)
-
-\setcounter{errorcontextlines}{1274}
-
-% The package arose from a small exercise to document packages whose
-% previous documentation consisted solely of comments in the package files.
-% The macros here defined are lifted from the author's faq.sty
-% (written for the UK TeX FAQ, CTAN:help/uk-tex-faq) or are inspired
-% by others' work (credited where the author is known) ... except
-% where they came as a flash of inspiration while actually writing the
-% documentation.
-
-% this option suggested by Heiko Oberdiek, 2010-01-29
-\DeclareOption{hyper}{%
- \AtEndOfPackage{%
- \RequirePackage[pdfusetitle]{hyperref}
- \RequirePackage{bookmark}
- \bookmarksetup{numbered,open,openlevel=1}
- }
-}
-\ProcessOptions\relax
-
-% note: T1 encoding assumed
-\usepackage{lmodern}
-\usepackage[T1]{fontenc}
-\usepackage{booktabs}
-
-% from faq.sty
-\newcommand\cs[1]{\texttt{\char`\\#1}}
-\let\csx\cs
-\def\bsbs{\cs{\char`\\}}
-
-% \cmdinvoke\cs<argument sequence>
-% \cs typeset as above
-% <argument sequence> may consist of optional or mandatory arguments;
-%
-% the `arguments' are simply typesett \texttt, as yet -- if something
-% fancier is needed, there's a bunch of code needs rewriting here...
-\DeclareRobustCommand\cmdinvoke{\@ifstar
- {\let\@tempa\emph\@scmdinvoke}%
- {\let\@tempa\relax\@scmdinvoke}%
-}
-\def\@scmdinvoke#1{\texttt{\symbol{92}#1}%
- \futurelet\@let at token\@cmdinvoke
-}
-\def\@cmdinvoke{\ifx\@let at token\bgroup
- \let\@tempb\@cmdinvoke at lbrace
- \else
- \ifx\@let at token[% ]
- \let\@tempb\@cmdinvoke at lbrack
- \else
- \ifx\@let at token(% )
- \let\@tempb\@cmdinvoke at lparen
- \else
- \let\@tempb\@empty
- \fi
- \fi
- \fi
- \@tempb
-}
-\def\@cmdinvoke at lbrace#1{\penalty0\hskip0pt\relax
- \texttt{\symbol{123}\@tempa{#1}\symbol{125}}%
- \futurelet\@let at token\@cmdinvoke
-}
-\def\@cmdinvoke at lbrack[#1]{\penalty-150\hskip0pt\relax
- \texttt{[\@tempa{#1}]}%
- \futurelet\@let at token\@cmdinvoke
-}
-\def\@cmdinvoke at lparen(#1){\penalty-150\hskip0pt\relax
- \texttt{(\@tempa{#1})}%
- \futurelet\@let at token\@cmdinvoke
-}
-% and extension -- versions that take a single extra (delimiter)
-% argument, such as \delcmdinvoke{lscrunge}( ... awful syntax, but...
-\DeclareRobustCommand\delcmdinvoke{\@ifstar
- {\let\@tempa\emph\@sdelcmdinvoke}%
- {\let\@tempa\relax\@sdelcmdinvoke}%
-}
-\def\@sdelcmdinvoke#1#2{\texttt{\symbol{92}#1#2}%
- \futurelet\@let at token\@cmdinvoke
-}
-
-% sui generis
-\newcommand\newitem{\par\addvspace{1ex}\noindent}
-
-% inspired by doc.sty in latex distribution
-\newcommand\meta[1]{\ensuremath{\langle}\emph{#1}\ensuremath{\rangle}}
-
-% meaningful names, as in faq.sty
-\let\environment\texttt
-\let\Package\textsf
Modified: trunk/Master/texmf-dist/doc/latex/multirow/multirow.pdf
===================================================================
(Binary files differ)
Deleted: trunk/Master/texmf-dist/doc/latex/multirow/multirow.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/multirow/multirow.tex 2016-09-27 01:16:26 UTC (rev 42159)
+++ trunk/Master/texmf-dist/doc/latex/multirow/multirow.tex 2016-09-27 21:06:23 UTC (rev 42160)
@@ -1,242 +0,0 @@
-\documentclass[a4paper]{article}
-\usepackage[a4paper]{geometry}
-\usepackage{miscdoc,multirow,bigstrut,bigdelim,colortbl}
-\newcommand{\minitab}[2][l]{\begin{tabular}{#1}#2\end{tabular}}
-
-\begin{document}
-\title{The \Package{multirow},
- \Package{bigstrut} and
- \Package{bigdelim} packages}
-\author{Piet van Oostrum\thanks{catalogued ``active author''}\\
- \O{}ystein Bache\\
- Jerry Leichter\thanks{Documentation put together by Robin
- Fairbairns}}
-\maketitle
-
-\section{Introduction}
-These packages offer a series of extensions to the standard \LaTeX{}
-\texttt{tabular} environment. Their respective functions are:
-\begin{description}
-\item[\Package{multirow}] which provides a construction for table cells
- that span more than one row of the table;
-\item[\Package{bigdelim}] which creates an appropriately-sized
- delimiter (for example, brace, parenthesis or bracket) to fit in a
- single multirow, to indicate a relationship between other rows; and
-\item[\Package{bigstrut}] which creates struts which (slightly) stretch
- the table row in which they sit.
-\end{description}
-
-\section{Using \Package{multirow}}\label{sec:multirow}
-
-The basic syntax is:
-\begin{quote}
- \cmdinvoke*{multirow}{nrows}[bigstruts]{width}[fixup]{text}
-\end{quote}
-where
-\begin{description}
-\item[\emph{nrows}] is the number of rows to span. It's up to you to
- leave the other rows empty, or the stuff created by \cs{multirow}
- will over-write it. With a positive value of \emph{nrows} the
- spanned columns are this row and (\emph{nrows}-1) rows below
- it. With a negative value of \emph{nrows} they are this row and
- (1-\emph{nrows}) above it.
-\item[\emph{bigstruts}] is mainly used if you've used the
- \Package{bigstrut}. In that case it is the total number of uses of
- \cs{bigstrut} within the rows being spanned. Count 2 uses for each
- \cs{bigstrut}, 1 for each \cmdinvoke*{bigstrut}[x] where \emph{x} is
- either \texttt{t} or \texttt{b}. The default is 0.
-\item[\emph{width}] is the width to which the text is to be set, or
- \texttt{*} to indicate that the text argument's natural width is to
- be used.
-\item[\emph{text}] is the actual text of the construct. If the width
- was set explicitly, the text will be set in a \cs{parbox} of that
- width; you can use \bsbs{} to force linebreaks where you like.
-
- If the width was given as \texttt{*} the text will be set in LR
- mode. If you want a multiline entry in this case you should use a
- \texttt{tabular} or \texttt{array} environment in the text
- parameter.
-\item[\emph{fixup}] is a length used for fine tuning: the text will be
- raised (or lowered, if \emph{fixup} is negative) by that length
- above (below) wherever it would otherwise have gone.
-\end{description}
-For example (using both multirow and bigstrut):
-\begin{quote}
-\begin{verbatim}
-\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}
-\end{verbatim}
-\end{quote}
-which will appear as:
-\begin{quote}
- \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}
-\end{quote}
-
-If any of the spanned rows are unusually large, or if you're using the
-\Package{bigstrut} and \cs{bigstrut}s are used asymetrically about the
-centerline of the spanned rows, the vertical centering may not come
-out right. Use the fixup argument in this case.
-
-Just before \emph{text} is expanded, the \cs{multirowsetup} macro is
-expanded to set up any special environment. Initially,
-\cs{multirowsetup} contains just \cs{raggedright}. It may be
-redefined with \cs{renewcommand}.
-
-It's just about impossible to deal correctly with descenders. The
-text will be set up centred, 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 \emph{text} does not. This may
-result in a small misalignment. About all that can be done is to do a
-final touchup on \emph{text}, using the fixup optional argument.
-(Hint: If you use a measure like \texttt{.1ex}, there's a reasonable
-chance that the fixup will still be correct if you change the point
-size.)
-
-\cs{multirow} is mainly designed for use with \environment{table}, as
-opposed to \environment{array}, environments. It will not work well in an
-array environment since the lines have an extra \texttt{jot} of space
-between them which it won't account for. Fixing this is difficult in
-general, and doesn't seem worth it. The \emph{bigstruts} argument may
-be used to provide a semi-automatic fix: First set \cs{bigstrutjot} to
-\texttt{.5}\cs{jot}. Then simply repeat \emph{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 \cs{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 \cs{multirow} with the \Package{colortbl} package you have
-to take precautions if you want to colour the column that has the
-\cs{multirow} in it. \Package{colortbl} works by colouring each cell
-separately. So if you use \cs{multirow} with a positive \emph{nrows}
-value, \Package{colortbl} will first color the top cell, then
-\cs{multirow} will typeset \emph{nrows} cells starting with this cell,
-and later \Package{colortbl} will color the other cells, effectively
-hiding the text in that area. This can be solved by putting the
-\cs{multirow} in the last row with a negative \emph{nrows} value.
-See, for example:
-\begin{quote}
-\begin{verbatim}
-\begin{tabular}{l>{\columncolor{yellow}}l}
- aaaa & \\
- cccc & \\
- dddd & \multirow{-3}*{bbbb}\\
-\end{tabular}
-\end{verbatim}
-\end{quote}
-which will produce:
-\begin{quote}
- \begin{tabular}{l>{\columncolor{yellow}}l}
- aaaa & \\
- cccc & \\
- dddd & \multirow{-3}*{bbbb}\\
- \end{tabular}
-\end{quote}
-
-\section{Using \Package{bigstrut}}
-
-\cmdinvoke*{bigstrut}[x] produces a strut which is \cs{bigstrutjot}
-(\texttt{2pt} by default) higher, lower, or both than the standard
-array/table strut. Use it in table entries that are adjacent to
-\cs{hline}s to leave an extra bit of space\,---\,according to the
-TeXbook (page 246), ``This is a little touch that improves the
-appearance of boxed tables; look for it as a mark of quality.''
-
-Although you could use \cs{bigstrut} in an array, there isn't normally
-much point since arrays are `opened up' by \cs{jot} anyway.
-
-\cmdinvoke{bigstrut}[t] adds height; \cmdinvoke{bigstrut}[b] adds
-depth. Just \cs{bigstrut} adds both. So: Use
-\cmdinvoke{bigstrut}[t] in the row just \emph{after} an \cs{hline};
-\cmdinvoke{bigstrut}[b] in the row just \emph{before}; and
-\cs{bigstrut} if there are \cs{hline}s both before and after.
-
-Spaces after the \cs{bigstrut} are ignored, even if it has an optional
-argument. Spaces before the \cs{bigstrut} are generally ignored (by a
-single \unskip).
-
-Note: The \Package{multirow} package makes use of \cs{bigstrutjot}. If
-both styles are used, they can be used in either order, as each checks
-to see if the other has already defined \cs{bigstrutjot}. However,
-the default values they set are different: if only \Package{multirow}
-is used, \cs{bigstrutjot} will be set to \texttt{3pt}. If
-\Package{bigstrut} is used, with or without \Package{multirow},
-\cs{bigstrutjot} will be \texttt{2pt}.
-
-\section{Using \Package{bigdelim}}
-
-The package is for working in a \environment{table} or \environment{array}
-environment, in which the \Package{multirow} packages is also used.
-
-Syntax of use is
-\begin{quote}
- \delcmdinvoke*{ldelim}({n}{width}[text]\\
- \delcmdinvoke*{rdelim}){n}{width}[text]
-\end{quote}
-The commands are used in a column of a \environment{tabular} or
-\environment{array}; they create a big parenthesis, brace or whatever
-delimiter that extends over the \emph{n} rows starting at the one
-containing the command. Corresponding cells in the following rows
-must be explicitly given (as empty cells).
-
-The first parameter is a delimiter to be used, e.g., \cs{\char`\{}
-\cs{\char`\}} \texttt{[} \texttt{]} \texttt{(} \texttt{)}\,---\,in fact,
-anything that can be used with \cs{left} or \cs{right}, as appropriate.
-
-The optional \emph{text} is set centred to the left of \cs{ldelim} or
-to the right of \cs{rdelim}. The \emph{width} is that reserved for
-the delimiter and its text; with a current copy of the
-\Package{multirow} package, the \emph{width} may be given as
-\texttt{*}, but that may cause the delimiters to be too small.
-
-Also with a recent version of \Package{multirow} the commands may be
-used in the last row of the extension with a negative \emph{n}
-parameter. This is useful in combination with \Package{colortbl} (see
-the discussion in section \ref{sec:multirow} on \Package{multirow}).
-If there are unusually tall rows you may have to enlarge \emph{n} (you
-can use non-integral values).
-
-\end{document}
Added: trunk/Master/texmf-dist/source/latex/multirow/multirow.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/multirow/multirow.dtx (rev 0)
+++ trunk/Master/texmf-dist/source/latex/multirow/multirow.dtx 2016-09-27 21:06:23 UTC (rev 42160)
@@ -0,0 +1,1935 @@
+% \iffalse meta-comment
+%
+% Parts of this file, Copyright (C) 1994 by Jerry Leichter
+% Copyright (C) 2016 by Piet van Oostrum <piet at vanoostrum.org>
+% -------------------------------------------------------
+%
+% This file may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in:
+%
+% http://www.latex-project.org/lppl.txt
+%
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{\jobname.dtx}
+%</driver>
+% This is the variable part of the preamble
+%
+%<multirow|bigstrut>%% Copyright (C) 1994 by Jerry Leichter
+%<bigdelim>%% Copyright (C) 1994 by \O ystein Bache
+%% Copyright (C) 2016 by Piet van Oostrum <piet at vanoostrum.org>
+%%
+%
+% \begin{macrocode}
+%<multirow|bigstrut|bigdelim>\NeedsTeXFormat{LaTeX2e}
+%<multirow>\ProvidesPackage{multirow}%
+%<bigstrut>\ProvidesPackage{bigstrut}
+%<bigdelim>\ProvidesPackage{bigdelim}
+%<multirow|bigstrut|bigdelim> [2016/09/27 v2.0
+%<multirow> Span multiple rows of a table]%
+%<bigstrut> Provide larger struts in tabulars]
+%<bigdelim> Create big delimiters in tabular or array]
+% \end{macrocode}
+%
+%<*driver>
+\documentclass[a4paper]{ltxdoc}
+\usepackage[T1]{fontenc}
+\usepackage{multirow,bigstrut,bigdelim,colortbl}
+\usepackage{tabulary}
+\usepackage{longtable}
+\usepackage{booktabs}
+\usepackage{url}
+\usepackage{tikz}
+\newcommand{\minitab}[2][l]{\begin{tabular}{#1}#2\end{tabular}}
+\DisableCrossrefs
+\CodelineIndex
+\RecordChanges
+\let\environment\texttt
+\let\Package\textsf
+\def\bsbs{\cs{\char`\\}}
+\begin{document}
+ \DeleteShortVerb{\|}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{440}
+%
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \changes{v1.7}{2016/09/13}{Give all the files the same version number}
+% \changes{v2.0}{2016/09/27}{Release v2.0}
+%
+% \GetFileInfo{multirow.sty}
+%
+% \DoNotIndex{\#,\$,\%,\&,\@,\\,\{,\},\^,\_,\~,\ }
+% \DoNotIndex{\@ne}
+% \DoNotIndex{\advance,\begingroup,\catcode,\closein}
+% \DoNotIndex{\closeout,\day,\def,\edef,\else,\empty,\endgroup}
+%
+% \title{The \Package{multirow},
+% \Package{bigstrut} and
+% \Package{bigdelim} packages}
+% \author{Piet van Oostrum\thanks{catalogued ``active author''}\\
+% \O ystein Bache\\
+% Jerry Leichter\thanks{Documentation originally put together by Robin
+% Fairbairns}}
+%
+% \date{Released \filedate, version \fileversion}
+%
+% \maketitle
+%
+% \tableofcontents
+%
+% \section{Introduction}
+% These packages offer a series of extensions to the standard \LaTeX{}
+% \texttt{tabular} environment. Their respective functions are:
+% \begin{description}
+% \item[\Package{multirow}] which provides a construction for table cells
+% that span more than one row of the table;
+% \item[\Package{bigstrut}] which creates struts which (slightly) stretch
+% the table row in which they sit.
+% \item[\Package{bigdelim}] which creates an appropriately-sized
+% delimiter (for example, brace, parenthesis or bracket) to fit in a
+% single multirow, to indicate a relationship between other rows; and
+% \end{description}
+%
+% \section{Changes in version 2.0}
+% \label{sec:changes-2}
+%
+% \begin{itemize}
+% \item \cs{multirow} now has an first optional parameter \oarg{vpos}.
+% \item The \meta{width} parameter can be specified as \texttt{=} to use
+% the defined width of the column in which the \cs{multirow} appears.
+% \item Optional prefix letters (\texttt{t}, \texttt{b}) for
+% the \meta{bigstruts} parameter (see section~\ref{sect-refine-bigstrut}).
+% \item Package option \texttt{debug}.
+% \item Package option \texttt{longtable} to work around a bug in
+% \Package{longtable}. See section~\ref{sec:use-with-longtable}.
+% \item Package option \texttt{supertabular} to better support \Package{supertabular}. See
+% section~\ref{sec:use-with-supertabular}.
+% \item Better positioning in some cases.
+% \item Lots of documentation.
+% \item The distribution is now based on a \texttt{.dtx} file.
+% \item Backwards compatible with v1.6.
+% \end{itemize}
+%
+% \section{Using \Package{multirow}}\label{sec:multirow}
+%
+% \DescribeMacro{\multirow}
+% \cs{multirow} sets a piece of text in a \environment{tabular} or
+% similar environment, spanning multiple rows. We will call the block of
+% rows and columns that the text spans the multirow block. Usually this
+% covers one column, but by combining it with \cs{multicolumn} more
+% columns can be covered.
+%
+% The basic syntax is:
+% \begin{quote}
+% \cmd{\multirow}\oarg{vpos}\marg{nrows}\oarg{bigstruts}\marg{width}\oarg{fixup}\marg{text}
+% \end{quote}
+% where
+% \begin{description}
+% \item[\meta{vpos}] defines the vertical positioning of the text in the multirow block.
+% The default is \texttt{[c]} which means the text will be vertically centered.
+% Other options are \texttt{[t]} for top alignment and \texttt{[b]} for bottom alignment.
+% \item[\meta{nrows}] is the number of rows to span. You should
+% leave the other rows empty at this column, otherwise the stuff created by \cs{multirow}
+% will over-write it. With a positive value of \meta{nrows} the
+% spanned columns are this row and (\meta{nrows}-1) rows below
+% it. With a negative value of \meta{nrows} they are this row and
+% (1-\meta{nrows}) above it.
+%
+% \item[\meta{bigstruts}] is mainly used if you've used the
+% \Package{bigstrut} package. In that case it is the total number of uses of
+% \cs{bigstrut} within the rows being spanned. Count 2 uses for each
+% \cs{bigstrut}, 1 for each \cs{bigstrut}\oarg{x} where \meta{x} is
+% either \texttt{t} or \texttt{b}. The default is 0.
+%
+% The \meta{bigstruts} parameter can optionally be preceded by a prefix
+% letter \texttt{t}, \texttt{b} or \texttt{tb} for finer control. See
+% section \ref{sect-refine-bigstrut} for details. The letter may be
+% separated from the number by a space character.
+%
+% \item[\meta{width}] is the width to which the text is to be set.
+% Special values are \texttt{*} to indicate that the text parameter's natural width is to
+% be used, and \texttt{=} to indicate that the specified width of the column in
+% which the \cs{multirow} entry is set should be used.
+%
+% \item[\meta{fixup}] is a length used for fine tuning: the text will be
+% raised (or lowered, if \meta{fixup} is negative) by that length
+% above (below) wherever it would otherwise have gone.
+%
+% \item[\meta{text}] is the actual text of the construct. If the width
+% was set explicitly, the text will be set in a \cs{parbox} of that
+% width; you can use \bsbs{} to force linebreaks where you like.
+%
+% If the width was given as \texttt{*} the text will be set in LR
+% mode. If you want a multiline entry in this case you could use a
+% \texttt{tabular} or \texttt{array} environment in the text
+% parameter. See for example the \environment{minitab} below.
+%
+% The width can also be given as \texttt{=} when the \cs{multirow} entry is given in a
+% column that has a defined width, for example in a \texttt{p\{\}} column, an
+% \texttt{X} column in \environment{tabularx} or a \texttt{L}, \texttt{C},
+% \texttt{R} or \texttt{J} column in a \environment{tabulary} environment.
+% The text will be set in a \cs{parbox} of that width.
+% If you give ``\texttt{=}'' in other situations, you will get strange
+% results (usually a too wide column).
+% \end{description}
+%
+% N.B. \cs{multirow} can be used in the \environment{tabular} environment and
+% most derivatives of it, for example \environment{tabularx},
+% \environment{tabulary}, \environment{supertabular},
+% \environment{xtab}, \environment{longtable}, \environment{tabu},
+% \environment{booktabs} and \environment{ctable}. For some of these you
+% have to pay special attention to certain cases, see below.
+%
+% \DescribeMacro{\multirowsetup}
+% Just before \meta{text} is expanded, the \cs{multirowsetup} macro is
+% expanded to set up any special environment. Initially,
+% \cs{multirowsetup} contains just \cs{raggedright}. It may be
+% redefined with \cs{renewcommand}.
+%
+% If you want to use both \cs{multirow} and \cs{multicolumn}
+% \index{multicolumn=\verb!*+\multicolumn+|usage}
+% on the same entry, you must put the \cs{multirow} inside the \cs{multicolumn}. The other way around will not work.
+% For example:
+% \begin{verbatim}
+% \multicolumn{2}{c}{\multirow{3}{*}{Multi-multi}}
+% \end{verbatim}
+%
+% \subsection{Package Options}
+% \label{sec:package-options}
+%
+% \DescribeMacro{multirowdebugtrue}
+% \DescribeMacro{multirowdebugfalse}
+% The following options are defined:
+% \begin{description}
+% \item[debug]
+% This option causes information about multirow boxes
+% to be written to the log file. This is done by the \TeX{} \cs{showbox}
+% command. Note: this will cause the \LaTeX{} compilation to be considered
+% failed, even if there is no real error.
+% This option can also be activated anywhere in the document with the
+% command \cs{multirowdebugtrue} and deactivated with
+% \cs{multirowdebugfalse}. When such a command is placed just before a
+% \cs{multirow}, it applies only to that specific \cs{multirow} entry.
+% \item[longtable]
+% The \texttt{longtable} option redefines the \cs{cline} macro to work
+% around a bug in the \Package{longtable} package. See section \ref{sec:use-with-longtable}.
+% \end{description}
+%
+%\subsection{Examples}
+%\label{sec:examples}
+%
+% An example with both \Package{multirow} and \Package{bigstrut}):
+%
+% \begin{quote}
+% \begin{verbatim}
+% \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, but a bit longer.} &
+% 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}
+% \end{verbatim}
+% \end{quote}
+% which will appear as:
+% \begin{quote}
+% \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, but a bit longer.} &
+% 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}
+% \quad
+% \begin{tabular}{ll}
+% \multirow{4}{*}{Normal case} & \\
+% & \\
+% & \\
+% & \\
+% \multirow{3}[6]*{With \cs{bigstrut}s and \texttt{*} as \meta{width}} & \bigstrut\\
+% & \bigstrut\\
+% & \bigstrut\\
+% \multirow{4}[8]{*}{With \cs{bigstrut}s and normal \meta{width}} & \bigstrut\\
+% & \bigstrut\\
+% & \bigstrut\\
+% & \bigstrut\\
+% \multirow{4}*{Multiline text in \cs{multirow}} & \\
+% & \\
+% & \\
+% & \\
+% \end{tabular}
+%
+% \end{quote}
+% \vspace{1ex}
+% An example with the ``\texttt{=}'' \meta{width} specifier in a
+% \environment{tabulary} (Note: The braces around the \texttt{=} may be omitted):
+%
+% \begin{quote}
+% \index{extrarowheight=\verb!*+\extrarowheight+|usage}
+% \begin{verbatim}
+% \setlength{\extrarowheight}{2pt}
+% \begin{tabulary}{11cm}{|L|L|L|}
+% \hline
+% All human beings are born free and equal in dignity and rights. &
+% \multirow{2}{=}{Everyone is entitled to all the rights and
+% freedoms set forth in this Declaration, without distinction of
+% any kind, such as race, colour, sex, language, religion,
+% political or other opinion, national or social origin, property,
+% birth or other status.}
+% & Everyone has the right to life, liberty and security of person. \\
+% \cline{1-1}\cline{3-3}
+% No one shall be held in slavery or servitude; slavery and the
+% slave trade shall be prohibited in all their forms. &
+% & No one shall be subjected to torture or to cruel, inhuman or
+% degrading treatment or punishment. \\
+% \hline
+% \end{tabulary}
+% \end{verbatim}
+% \end{quote}
+%
+% \begin{quote}
+% \index{extrarowheight=\verb!*+\extrarowheight+|usage}
+% \setlength{\extrarowheight}{2pt}
+% \begin{tabulary}{11cm}{|L|L|L|}
+% \hline
+% All human beings are born free and equal in dignity and rights. &
+% \multirow{2}{=}{Everyone is entitled to all the rights and
+% freedoms set forth in this Declaration, without distinction of
+% any kind, such as race, colour, sex, language, religion,
+% political or other opinion, national or social origin, property,
+% birth or other status.}
+% & Everyone has the right to life, liberty and security of person. \\
+% \cline{1-1}\cline{3-3}
+% No one shall be held in slavery or servitude; slavery and the
+% slave trade shall be prohibited in all their forms. &
+% & No one shall be subjected to torture or to cruel, inhuman or
+% degrading treatment or punishment. \\
+% \hline
+% \end{tabulary}
+% \end{quote}
+%
+% A few observations about this example:
+% \begin{enumerate}
+% \item The middle column is the \cs{multirow}. You would expect it to
+% be vertically centered, but it isn't. This is because \cs{multirow}
+% doesn't know the height of the box. The only estimate \cs{multirow}
+% can make about the height is the number of rows${}\times{}$the normal
+% height of a row. It tries to center the text in that space, but that space
+% is too low in this example. Therefore the text is at the top of the
+% box. If you want it to be centered, you have to supply a \meta{fixup}
+% parameter to shift it down.
+% \item We have used an \cs{extrarowheight}\footnote{This is only
+% available with the \Package{array} package, which \Package{tabulary}
+% includes automatically.} of 2pt, to make a bit room between the
+% \cs{hline} and the following text. However, this is not applied to the
+% \cs{multirow}, because this is thought to be centered. In this case
+% you can give the \meta{vpos} parameter as \texttt{[t]}, in which case
+% \cs{multirow} will do the proper positioning.
+% \end{enumerate}
+%
+% Now with a negative \meta{nrows}.
+%
+% \begin{quote}
+% \index{extrarowheight=\verb!*+\extrarowheight+|usage}
+% \begin{verbatim}
+% \setlength{\extrarowheight}{2pt}
+% \begin{tabulary}{11cm}{|L|L|L|}
+% \hline
+% All human beings are born free and equal in dignity and rights. &
+% & Everyone has the right to life, liberty and security of person. \\
+% \cline{1-1}\cline{3-3}
+% No one shall be held in slavery or servitude; slavery and the
+% slave trade shall be prohibited in all their forms. &
+% \multirow{-2}{=}[12mm]{Everyone is entitled to all the rights and
+% freedoms set forth in this Declaration, without distinction of
+% any kind, such as race, colour, sex, language, religion,
+% political or other opinion, national or social origin, property,
+% birth or other status.}
+% & No one shall be subjected to torture or to cruel, inhuman or
+% degrading treatment or punishment. \\
+% \hline
+% \end{tabulary}
+% \end{verbatim}
+% \end{quote}
+%
+% \begin{quote}
+% \index{extrarowheight=\verb!*+\extrarowheight+|usage}
+% \setlength{\extrarowheight}{2pt}
+% \begin{tabulary}{11cm}{|L|L|L|}
+% \hline
+% All human beings are born free and equal in dignity and rights. &
+% & Everyone has the right to life, liberty and security of person. \\
+% \cline{1-1}\cline{3-3}
+% No one shall be held in slavery or servitude; slavery and the
+% slave trade shall be prohibited in all their forms. &
+% \multirow{-2}{=}[12mm]{Everyone is entitled to all the rights and
+% freedoms set forth in this Declaration, without distinction of
+% any kind, such as race, colour, sex, language, religion,
+% political or other opinion, national or social origin, property,
+% birth or other status.}
+% & No one shall be subjected to torture or to cruel, inhuman or
+% degrading treatment or punishment. \\
+% \hline
+% \end{tabulary}
+% \end{quote}
+%
+% In this case the text would be centered somewhere in the
+% bottom row, which would make it stick out of the bottom. Therefore we
+% applied a \meta{fixup} of 12mm. The \meta{fixup} usually requires some experimentation.
+%
+% \subsection{Fine Tuning}
+% \label{sec:fine-tuning}
+%
+% If any of the spanned rows are unusually large, or if you're using the
+% \Package{bigstrut} package and \cs{bigstrut}s are used asymetrically about the
+% centerline of the spanned rows, the vertical centering may not come
+% out right. Use the \meta{fixup} parameter in this case.
+%
+% It's just about impossible to deal correctly with descenders. The
+% text will be set up centred, 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 \meta{text} does not. This may
+% result in a small misalignment. About all that can be done is to do a
+% final touchup on \meta{text}, using the fixup optional parameter.
+% (Hint: If you use a measure like \texttt{.1ex}, there's a reasonable
+% chance that the fixup will still be correct if you change the point
+% size.)
+%
+% \cs{multirow} is mainly designed for use with \environment{tabular}, as
+% opposed to \environment{array}, environments. It might not work well in an
+% array environment if there are big formulas in some rows; in that case you can use the
+% \meta{fixup} parameter to refine the result.
+%
+% If you use \cs{multirow} with the \Package{colortbl} package you have
+% \index{colortbl=\Package{colortbl}|usage}
+% to take precautions if you want to colour the column that has the
+% \cs{multirow} in it. The \Package{colortbl} package works by colouring each cell
+% separately. So if you use \cs{multirow} with a positive \meta{nrows}
+% value, \Package{colortbl} will first color the top cell, then
+% \cs{multirow} will typeset \meta{nrows} cells starting with this cell,
+% and later \Package{colortbl} will color the other cells, effectively
+% hiding the text in that area. This can be solved by putting the
+% \cs{multirow} in the last row with a negative \meta{nrows} value.
+% See, for example:
+% \begin{quote}
+% \begin{verbatim}
+% \begin{tabular}{l>{\columncolor{yellow}}l}
+% aaaa & \\
+% cccc & \\
+% dddd & \multirow{-3}*{bbbb}\\
+% \end{tabular}
+% \end{verbatim}
+% \end{quote}
+% which will produce:
+% \begin{quote}
+% \begin{tabular}{l>{\columncolor{yellow}}l}
+% aaaa & \\
+% cccc & \\
+% dddd & \multirow{-3}*{bbbb}\\
+% \end{tabular}
+% \end{quote}
+%
+% \subsection{Fine tuning the \meta{bigstruts} parameter}
+% \label{sect-refine-bigstrut}
+%
+% \cs{multirow} can calculate the height of the required multirow box
+% from \meta{nrows} and \meta{bigstruts}, supposed that all the rows
+% don't have ``unusual heights. However, there are cases when this is
+% not enough to properly position the box, especially when there is a
+% \cs{bigstrut} on top of the first row and/or one on the bottom of the
+% last row. In that case \cs{multirow} should be given additional
+% information. This is done by prefixing the \meta{bigstruts} parameter
+% with a letter (or two) indicating which of these two are present.
+%
+% See the following examples:\\ (in these examples we have
+% \verb+\setlength{\bigstrutjot}{10pt}+ to make the effect clearly visible)\\[5mm]
+% \begin{minipage}[c]{0.23\linewidth}
+% \setlength{\bigstrutjot}{10pt}
+% \begin{tabular}{|c|c|}
+% \hline
+% \multirow{3}[1]{*}{Multirow} & T \bigstrut[t] \\
+% \cline{2-2}
+% & X \\
+% \cline{2-2}
+% & B \\
+% \hline
+% \end{tabular} \\[2mm]
+% \begin{tabular}{|c|c|}
+% \hline
+% \multirow{3}[t 1]{*}{Multirow} & T \bigstrut[t] \\
+% \cline{2-2}
+% & X \\
+% \cline{2-2}
+% & B \\
+% \hline
+% \end{tabular}
+% \end{minipage}
+% \begin{minipage}[c]{0.75\linewidth}
+% \begin{verbatim}
+% \begin{tabular}{|c|c|}
+% \hline
+% \multirow{3}[1]{*}{Multirow} & T \bigstrut[t] \\
+% \cline{2-2}
+% & X \\
+% \cline{2-2}
+% & B \\
+% \hline
+% \end{tabular}
+% \end{verbatim}
+% \end{minipage}
+% \\[5mm]
+% In the top box in the above example the text ``Multirow'' should be centered, but it
+% is a bit below the center, because of the \cs{bigstrut[t]} in the top
+% row. We can correct this by giving the \meta{bigstruts} parameter as
+% ``t 1'', indicating a bigstrut in the top. This is done in the bottom box, where
+% \verb+\multirow{3}[t 1]{*}{Multirow}+ is used.
+%
+% A second example:\\[5mm]
+% \begin{minipage}{0.23\linewidth}
+% \setlength{\bigstrutjot}{10pt}
+% \begin{tabular}{|c|c|}
+% \hline
+% & T \\
+% \cline{2-2}
+% & X \\
+% \cline{2-2}
+% \multirow[t]{-3}[1]{*}{Multirow} & B \bigstrut[b] \\
+% \hline
+% \end{tabular} \\[2mm]
+% \begin{tabular}{|c|c|}
+% \hline
+% & T \\
+% \cline{2-2}
+% & X \\
+% \cline{2-2}
+% \multirow[t]{-3}[b 1]{*}{Multirow} & B \bigstrut[b] \\
+% \hline
+% \end{tabular}
+% \end{minipage}
+% \begin{minipage}{0.75\linewidth}
+% \begin{verbatim}
+% \begin{tabular}{|c|c|}
+% \hline
+% & T \\
+% \cline{2-2}
+% & X \\
+% \cline{2-2}
+% \multirow[t]{-3}[1]{*}{Multirow} & B \bigstrut[b] \\
+% \hline
+% \end{tabular}
+% \end{verbatim}
+% \end{minipage}
+% \\[5mm]
+% In the top box the \verb+\multirow[t]+ should be positioned on the
+% same height as the \texttt{T}, but it is too high, because there is a
+% \cs{bigstrut} in the bottom. We can correct that by specifying the
+% \meta{bigstruts} parameter as ``b 1'', i.e. using
+% \verb+\multirow[t]{-3}[b 1]{*}{Multirow}+.
+% \\[5mm]
+% The possibilities for the prefix are:
+% \begin{description}
+% \item[\texttt{t}] There is a bigstrut in the top, i.e. a \cs{bigstrut}
+% or \cs{bigstrut[t]} in the top row.
+% \item[\texttt{b}] There is a bigstrut in the bottom, i.e. a \cs{bigstrut}
+% or \cs{bigstrut[b]} in the bottom row.
+% \item[\texttt{tb}] They are both present. Note: this cannot be given
+% as \texttt{bt}.
+% \end{description}
+% The space between the letter(s) and the number is optional.
+% Please note that the prefix does not depend on whether the
+% \cs{multirow} is in the top or the bottom row.
+%
+% \subsection{Use with \Package{longtable}}
+% \label{sec:use-with-longtable}
+%
+% \index{longtable=\environment{longtable}|usage}
+% \index{longtabu=\environment{longtabu}|usage}
+% It is possible to use \cs{multirow} in a \environment{longtable}
+% environment (as well as in its descendent \environment{longtabu}).
+% However, care must be taken that the longtable doesn't break the
+% multirow entry when it is near the bottom of the page. For example:
+%
+% \noindent
+% \begin{minipage}[t]{0.4\linewidth}
+% \begin{longtable}{|l|l|l|}
+% \ldots & \ldots & \ldots \\
+% \hline
+% Sept. 21 & 09:00 & event 1 \\
+% \hline
+% Sept. 22 & 10:00 & event 2 \\
+% \hline
+% \multirow{3}*{Sept. 23} & 10:00 & event 3 \\
+% & 12:00 & event 4 \\
+% & 15:00 & event 5 \\
+% \hline
+% Sept. 24 & 09:00 & event 6 \\
+% \hline
+% \ldots & \ldots & \ldots \\
+% \end{longtable}
+% \end{minipage}
+% \begin{minipage}[t]{0.58\linewidth}
+% \begin{verbatim}
+% \begin{longtable}{|l|l|l|}
+% \ldots & \ldots & \ldots \\
+% \hline
+% Sept. 21 & 09:00 & event 1 \\
+% \hline
+% Sept. 22 & 10:00 & event 2 \\
+% \hline
+% \multirow{3}*{Sept. 23} & 10:00 & event 3 \\
+% & 12:00 & event 4 \\
+% & 15:00 & event 5 \\
+% \hline
+% Sept. 24 & 09:00 & event 6 \\
+% \hline
+% \ldots & \ldots & \ldots \\
+% \end{longtable}
+% \end{verbatim}
+% \end{minipage}
+%
+% In this case if the ``Sept. 23'' entry comes close to the bottom of the
+% page, you want to prevent the pagebreak to occur in the middle of this
+% entry. You can do this by ending the intermediate rows with \verb+\\*+ instead of \verb+\\+.
+%
+% \begin{verbatim}
+% \multirow{3}*{Sept. 23} & 10:00 & event 3 \\*
+% & 12:00 & event 4 \\*
+% & 15:00 & event 5 \\
+% \end{verbatim}
+%
+% There is, however, a bug in \Package{longtable}, that causes the
+% \verb+\\*+ not to work if it is followed by a \cs{cline}, like in the
+% following example:
+%
+% \begin{verbatim}
+% \multirow{3}*{Sept. 23} & 10:00 & event 3 \\*
+% \cline{2-3}
+% & 12:00 & event 4 \\*
+% \cline{2-3}
+% & 15:00 & event 5 \\
+% \end{verbatim}
+%
+% \Package{multirow} has a package option \texttt{longtable} that redefines
+% \cs{cline} so that the \verb+\\*+ will also work when followed by
+% \cs{cline}. The code comes from David Carlisle.
+%
+% \subsection{Use with \Package{supertabular}}
+% \label{sec:use-with-supertabular}
+%
+% \index{supertabular=\environment{supertabular}|usage}
+% \index{xtab=\environment{xtab}|usage}
+% With the package \Package{supertabular} (or the augmented version
+% \Package{xtab}) there is the same requirement
+% to keep the rows of a multirow together when a pagebreak occurs.
+% Unfortunately, \Package{supertabular} does not have a way to specify
+% that a pagebreak should be suppressed. I.e. \verb+\\*+ does not
+% suppress a pagebreak.
+% Therefore \Package{multirow} provides a package option
+% \texttt{supertabular} that redefines \verb+\\*+ inside a
+% \environment{supertabular} to suppress the pagebreak. You should use
+% this to end the intermediate rows in a multirow block. However, this
+% does not cause \environment{supertabular} to consider breaking the
+% page before the \cs{multirow}, contrary to \environment{longtable}.
+% Thus the table may become too long.
+%
+% \DescribeMacro{\STneed}
+% Therefore when the \texttt{supertabular} option is given,
+% \Package{multirow} also provides a command \cs{STneed} to be used
+% in a \environment{supertabular} that specifies how much space we need
+% on the page. Then if there is not enough space, a pagebreak will occur
+% at that place. For example:
+% \begin{verbatim}
+% \tabletail{\hline}
+% \begin{supertabular}{|l|l|l|}
+% \ldots & \ldots & \ldots \\
+% \hline
+% Sept. 20 & 10:00 & event 1\\
+% \hline
+% Sept. 21 & 10:00 & event 2\\
+% \hline
+% Sept. 22 & 10:00 & event 3\\
+% \hline
+% \STneed {2cm}
+% \multirow{3}*{Sept. 23} & 10:00 & event 4\\*
+% \cline{2-3}
+% & 12:00 & event 5 \\*
+% \cline{2-3}
+% & 15:00 & event 6 \\
+% \hline
+% Sept. 24 & 09:00 & event 7 \\
+% \hline
+% \ldots & \ldots & \ldots \\
+% \end{verbatim}
+%
+% You will have to experiment a bit with the value to see
+% what works. Sometimes it is better to exaggerate the required space a bit.
+%
+% \subsection{Dealing with tall entries}
+% \label{sec:dealing-with-tall}
+%
+% Sometimes there are rows that are taller than what is expected. This
+% section gives some hints how to deal with these situations. There are
+% two cases:
+% \begin{enumerate}
+% \item When there is an exceptionally tall row outside of the multirow
+% block the positioning of the \cs{multirow} might be wrong. This is
+% because \cs{multirow} does not have information about the heights
+% of the rows. This can happen for example when a large formula is
+% entered in a cell, or a multi-line paragraph in a \texttt{[\{\}]}
+% column. An example:
+%
+% \begin{quote}
+% \begin{verbatim}
+% \begin{tabular}{| l | l | p{4cm} |}
+% \hline
+% \multirow{3}*{Week 38} & Monday & Rain most of the day\\
+% \cline{2-3}
+% & Tuesday & Sunny with some clouds\\
+% \cline{2-3}
+% & Wednesday & A clear day with a lot of sunshine.
+% However, the strong wind will bring down the
+% temperature. \\
+% \hline
+% \end{tabular}
+% \end{verbatim}
+% \end{quote}
+% \begin{quote}
+% \begin{tabular}{| l | l | p{4cm} |}
+% \hline
+% \multirow{3}*{Week 38} & Monday & Rain most of the day\\
+% \cline{2-3}
+% & Tuesday & Sunny with some clouds\\
+% \cline{2-3}
+% & Wednesday & A clear day with a lot of sunshine.
+% However, the strong wind will bring down the
+% temperature. \\
+% \hline
+% \end{tabular}
+% \end{quote}
+% The \cs{multirow} is positioned on the second row, because it
+% specifies that it should cover 3 rows. However, the second row is not
+% the vertical center in this case because the third row is much taller.
+%
+% To remedy this, the \meta{fixup} parameter could be used. However, in
+% this case it would be easier to pretend that \cs{multirow} spans 6
+% rows (the total number of lines in the last column). So use
+% \verb+\multirow{6}+\ldots{} and we get:
+% \begin{quote}
+% \begin{tabular}{| l | l | p{4cm} |}
+% \hline
+% \multirow{6}*{Week 38} & Monday & Rain most of the day\\
+% \cline{2-3}
+% & Tuesday & Sunny with some clouds\\
+% \cline{2-3}
+% & Wednesday & A clear day with a lot of sunshine.
+% However, the strong wind will bring down the
+% temperature. \\
+% \hline
+% \end{tabular}
+% \end{quote}
+% \item The second case is when the \cs{multirow} entry is taller than
+% the surrounding normal rows. In that case the multirow text will stick
+% out of its block. We must now enlarge the other rows, and that is
+% something \cs{multirow} cannot do.
+%
+% An example:
+% (Don't take this as a medical advice. The names are fake anyway.)
+% \begin{verbatim}
+% \begin{tabular}{| p{2mm} l | p{5cm} |}
+% \hline
+% \multicolumn{2}{|l|}{\textbf{Medicine \& dose}}
+% & \textbf{Possible Side effects} \\
+% \hline
+% \multicolumn{2}{|l|}{Spirino}
+% & \multirow{3}={Confusion,
+% hallucinations, rapid breathing,
+% seizure (convulsions);
+% upset stomach, heartburn; severe nausea,
+% vomiting, or stomach pain or mild headache.} \\
+% \cline{1-2}
+% & initial: 200 mg/day & \\
+% \cline{1-2}
+% & maintenance: 100-400 mg/day & \\
+% \hline
+% \multicolumn{2}{|l|}{Conzac}
+% & \multirow{3}={Anxiety; nervousness;
+% insomnia; anorexia; mild bradycardia;
+% SA node slowing; weight loss;
+% solar photosensitivity; hyponatremia;
+% sexual dysfunction (both genders); may
+% alter glycemic control in diabetic patients.} \\
+% \cline{1-2}
+% & initial: 10 mg/day & \\
+% \cline{1-2}
+% & maintenance: 10-40 mg/day & \\
+% \hline
+% \end{tabular}
+% \end{verbatim}
+% \begin{tabular}{| p{2mm} l | p{5cm} |}
+% \hline
+% \multicolumn{2}{|l|}{\textbf{Medicine \& dose}}
+% & \textbf{Possible Side effects} \\
+% \hline
+% \multicolumn{2}{|l|}{Spirino}
+% & \multirow{3}={Confusion,
+% hallucinations, rapid breathing,
+% seizure (convulsions);
+% upset stomach, heartburn; severe nausea,
+% vomiting, or stomach pain or mild headache.} \\
+% \cline{1-2}
+% & initial: 200 mg/day & \\
+% \cline{1-2}
+% & maintenance: 100-400 mg/day & \\
+% \hline
+% \multicolumn{2}{|l|}{Conzac}
+% & \multirow{3}={Anxiety; nervousness;
+% insomnia; anorexia; mild bradycardia;
+% SA node slowing; weight loss;
+% solar photosensitivity; hyponatremia;
+% sexual dysfunction (both genders); may
+% alter glycemic control in diabetic patients.} \\
+% \cline{1-2}
+% & initial: 10 mg/day & \\
+% \cline{1-2}
+% & maintenance: 10-40 mg/day & \\
+% \hline
+% \end{tabular}
+% \\[2cm]
+% Both \cs{multirow} entries are too high; the first sticks out into the
+% second entry, and the second one sticks out of the table.
+%
+% There are two ways we can correct this:
+% The simplest would be to add extra empty rows to cover the overlapping
+% space. For the first entry that would be 2 extra rows; for the second
+% 4. So we add twice \verb+ & & \\+ before the third \verb+\hline+,
+% and four of these before the last \verb+\hline+.
+% This gives us just the correct table:
+% \\[5mm]
+% \begin{tabular}{| p{2mm} l | p{5cm} |}
+% \hline
+% \multicolumn{2}{|l|}{\textbf{Medicine \& dose}}
+% & \textbf{Possible Side effects} \\
+% \hline
+% \multicolumn{2}{|l|}{Spirino}
+% & \multirow{3}={Confusion,
+% hallucinations, rapid breathing,
+% seizure (convulsions);
+% upset stomach, heartburn; severe nausea,
+% vomiting, or stomach pain or mild headache.} \\
+% \cline{1-2}
+% & initial: 200 mg/day & \\
+% \cline{1-2}
+% & maintenance: 100-400 mg/day & \\
+% & & \\
+% & & \\
+% \hline
+% \multicolumn{2}{|l|}{Conzac}
+% & \multirow{3}={Anxiety; nervousness;
+% insomnia; anorexia; mild bradycardia;
+% SA node slowing; weight loss;
+% solar photosensitivity; hyponatremia;
+% sexual dysfunction (both genders); may
+% alter glycemic control in diabetic patients.} \\
+% \cline{1-2}
+% & initial: 10 mg/day & \\
+% \cline{1-2}
+% & maintenance: 10-40 mg/day & \\
+% & & \\
+% & & \\
+% & & \\
+% & & \\
+% \hline
+% \end{tabular}
+%
+% The second way is to stretch the normal rows vertically, such that
+% they fit with the multirow entry. In this table, where the font size
+% is 10pt, each row has a total
+% height of 12pt. For the first entry we need 24pt extra (2 rows),
+% Because this space must be divided over 3 rows that is 8pt per row,
+% making the total height of the row 20pt.
+% The normal row has a height of 8.4pt and a depth of 3.6pt (total
+% 12pt). We can add 4pt on the top and 4pt on the bottom, or any other
+% combination that adds up to 8pt. In this case I have chosen to make
+% the height 12pt and the depth 8pt. We do this with a \cs{rule} with 0 width.
+% \DescribeMacro{\mystrut}
+% \verb+\newcommand{\mystrut}{\rule[-8pt]{0pt}{20pt}}+
+% and put \cs{mystrut} in each of the first 3 rows. By defining your own
+% struts you have complete control over the layout. You can choose to
+% give some rows more space than others, or to put all the space is the
+% last row, for example.
+%
+% For the second entry we need 48pt extra (4 rows). We will use
+% \cs{bigstrut} in each row, that is 16pt per row, and as a \cs{bigstrut} is
+% 2\cs{bigstrutjot}s, we set \cs{bigstrutjot} to 8pt. The
+% \Package{booktabs} package adds some extra vertical space around the rules,
+% therefore when using the normal \environment{tabular} environment, it
+% is probably better to make the struts a little bit bigger, or a bit
+% smaller with \Package{booktabs}. After some experimentation it appeared
+% that a \cs{bigstrutjot} of \texttt{7pt} was enough. Of course we added
+% the \meta{bigstruts} parameter of \texttt{[tb6]} to the second
+% multirow. Please note that this is not possible with our own struts,
+% unless we cheat.
+%
+% \index{booktabs=\environment{booktabs}|usage}
+% Now with \Package{booktabs} the code becomes:
+% \begin{verbatim}
+% \newcommand{\mystrut}{\rule[-8pt]{0pt}{20pt}}
+% \setlength{\bigstrutjot}{7pt}
+% \begin{tabular}{ p{2mm} l p{5cm} }
+% \toprule
+% \multicolumn{2}{l}{\textbf{Medicine \& dose}}
+% & \textbf{Possible Side effects} \\
+% \cmidrule(r){1-2} \cmidrule(l){3-3}
+% \multicolumn{2}{l}{Spirino} \mystrut
+% & \multirow{3}={Confusion,
+% hallucinations, rapid breathing,
+% seizure (convulsions);
+% upset stomach, heartburn; severe nausea,
+% vomiting, or stomach pain or mild headache.} \\
+% \cmidrule(r){1-2}
+% & initial: 200 mg/day \mystrut & \\
+% \cmidrule(r){1-2}
+% & maintenance: 100-400 mg/day \mystrut & \\
+% \midrule
+% \multicolumn{2}{l}{Conzac} \bigstrut
+% & \multirow{3}[tb6]={Anxiety; nervousness;
+% insomnia; anorexia; mild bradycardia;
+% SA node slowing; weight loss;
+% solar photosensitivity; hyponatremia;
+% sexual dysfunction (both genders); may
+% alter glycemic control in diabetic patients.} \\
+% \cmidrule(r){1-2}
+% & initial: 10 mg/day \bigstrut & \\
+% \cmidrule(r){1-2}
+% & maintenance: 10-40 mg/day \bigstrut & \\
+% \bottomrule
+% \end{tabular}
+% \end{verbatim}
+%
+% \newcommand{\mystrut}{\rule[-8pt]{0pt}{20pt}}
+% \setlength{\bigstrutjot}{7pt}
+% \begin{tabular}{ p{2mm} l p{5cm} }
+% \toprule
+% \multicolumn{2}{l}{\textbf{Medicine \& dose}}
+% & \textbf{Possible Side effects} \\
+% \cmidrule(r){1-2} \cmidrule(l){3-3}
+% \multicolumn{2}{l}{Spirino} \mystrut
+% & \multirow{3}={Confusion,
+% hallucinations, rapid breathing,
+% seizure (convulsions);
+% upset stomach, heartburn; severe nausea,
+% vomiting, or stomach pain or mild headache.} \\
+% \cmidrule(r){1-2}
+% & initial: 200 mg/day \mystrut & \\
+% \cmidrule(r){1-2}
+% & maintenance: 100-400 mg/day \mystrut & \\
+% \midrule
+% \multicolumn{2}{l}{Conzac} \bigstrut
+% & \multirow{3}[tb6]={Anxiety; nervousness;
+% insomnia; anorexia; mild bradycardia;
+% SA node slowing; weight loss;
+% solar photosensitivity; hyponatremia;
+% sexual dysfunction (both genders); may
+% alter glycemic control in diabetic patients.} \\
+% \cmidrule(r){1-2}
+% & initial: 10 mg/day \bigstrut & \\
+% \cmidrule(r){1-2}
+% & maintenance: 10-40 mg/day \bigstrut & \\
+% \bottomrule
+% \end{tabular}
+% \end{enumerate}
+%
+% \section{Using \Package{bigstrut}}
+%
+% \DescribeMacro{\bigstrut}
+% \DescribeMacro{\bigstrutjot}
+% \cs{bigstrut}\oarg{x} produces a strut (a rule with width 0) which is \cs{bigstrutjot}
+% (\texttt{2pt} by default) higher, lower, or both than the standard
+% array/tabular strut. Use it in table entries that are adjacent to
+% \cs{hline}s to leave an extra bit of space\,---\,according to the
+% TeXbook (page 246), ``This is a little touch that improves the
+% appearance of boxed tables; look for it as a mark of quality.''
+%
+% Although you could use \cs{bigstrut} in an array, there isn't normally
+% much point since arrays are `opened up' by \cs{jot} anyway.
+%
+% \cs{bigstrut[t]} adds height; \cs{bigstrut[b]} adds
+% depth. Just \cs{bigstrut} adds both. So: Use
+% \cs{bigstrut[t]} in the row just \emph{after} an \cs{hline};
+% \cs{bigstrut[b]} in the row just \emph{before}; and
+% \cs{bigstrut} if there are \cs{hline}s both before and after.
+%
+% Spaces after the \cs{bigstrut} are ignored, even if it has an optional
+% parameter. Spaces before the \cs{bigstrut} are generally ignored (by a
+% single \cs{unskip}).
+%
+% \DescribeMacro{\bigstrutjot}
+% Note: The \Package{multirow} package makes use of \cs{bigstrutjot}. If
+% both packages are used, they can be used in either order, as each checks
+% to see if the other has already defined \cs{bigstrutjot}. However,
+% the default values they set are different: if only \Package{multirow}
+% is used, \cs{bigstrutjot} will be set to \texttt{3pt}.
+% If \Package{bigstrut} is used, with or without \Package{multirow},
+% \cs{bigstrutjot} will be \texttt{2pt}.
+%
+% \section{Using \Package{bigdelim}}
+%
+% The package is for working in a \environment{tabular} or \environment{array}
+% environment, in which the \Package{multirow} package is also used.
+%
+% \DescribeMacro{\ldelim}
+% \DescribeMacro{\rdelim}
+% Syntax of use is
+% \begin{quote}
+% \cs{ldelim} ( \marg{n}\marg{width}\oarg{text}\\
+% \cs{rdelim} ) \marg{n}\marg{width}\oarg{text}
+% \end{quote}
+% The commands are used in a column of a \environment{tabular} or
+% \environment{array}; they create a big parenthesis, brace or whatever
+% delimiter that extends over the \meta{n} rows starting at the one
+% containing the command. Corresponding cells in the following rows
+% must be explicitly given as empty cells.
+%
+% The first parameter is a delimiter to be used, e.g., \cs{\char`\{}
+% \cs{\char`\}} \texttt{[} \texttt{]} \texttt{(} \texttt{)}\,---\,in fact,
+% anything that can be used with \cs{left} or \cs{right}, as appropriate.
+%
+% Here is an example:
+% \begin{quote}
+% \begin{verbatim}
+% \begin{equation}
+% \begin{array}{ccccccc}
+% \ldelim({4}{4mm} & x & x & x & x & \rdelim){4}{4mm} \\
+% & x & x & x & x & & i \\
+% & x & x & x & x & & j \\
+% & x & x & x & x & \\
+% & & u & v & &
+% \end{array}
+% \end{equation}
+% \end{verbatim}
+% \end{quote}
+%
+% \begin{quote}
+% \begin{equation}
+% \begin{array}{ccccccc}
+% \ldelim({4}{4mm} & x & x & x & x & \rdelim){4}{4mm} \\
+% & x & x & x & x & & i \\
+% & x & x & x & x & & j \\
+% & x & x & x & x & \\
+% & & u & v & &
+% \end{array}
+% \end{equation}
+% \end{quote}
+%
+% When \cs{ldelim} is used, the optional \meta{text} is set centred to the left of \cs{ldelim}.
+% If \cs{rdelim} is used it is set to the right of \cs{rdelim}. The
+% \meta{width} parameter is the space that is reserved for
+% the delimiter and its text; as with the
+% \Package{multirow} package, the \meta{width} may be given as
+% \texttt{*}. Compare for example these:
+% \begin{quote}
+% \begin{minipage}{0.6\linewidth}
+% \begin{verbatim}
+% \begin{tabular}{p{2em}l}
+% \ldelim\{{3}{*}[type] & dvi \\
+% & ps \\
+% & pdf \\
+% \end{tabular}
+% \end{verbatim}
+% \end{minipage}
+% \begin{minipage}{0.35\linewidth}
+% \begin{tabular}{p{2em}l}
+% \ldelim\{{3}{*}[type] & dvi \\
+% & ps \\
+% & pdf \\
+% \end{tabular}
+% \\[2ex]
+% \end{minipage}
+%
+% \begin{minipage}{0.6\linewidth}
+% \begin{verbatim}
+% \begin{tabular}{l@{\,}l}
+% \ldelim\{{3}{*}[type] & dvi \\
+% & ps \\
+% & pdf \\
+% \end{tabular}
+% \end{verbatim}
+% \end{minipage}
+% \begin{minipage}{0.35\linewidth}
+% \begin{tabular}{l@{\,}l}
+% \ldelim\{{3}{*}[type] & dvi \\
+% & ps \\
+% & pdf \\
+% \end{tabular}
+% \\[2ex]
+% \end{minipage}
+% \end{quote}
+% In the first example we cheated: by using a column width that is too
+% small, we swallowed up some of the intercolumn space, at the cost of
+% an ``Overfull \cs{hbox}'' message. In the second example we did it the
+% proper way by inserting \verb+@{\,}+ to replace the default
+% intercolumn space with a narrow space.
+%
+% Also the commands may be
+% used in the last row of the extension with a negative \meta{n}
+% \index{colortbl=\Package{colortbl}|usage}
+% parameter. This is useful in combination with \Package{colortbl} (see
+% the discussion in section \ref{sec:multirow} on \Package{multirow}).
+% If there are unusually tall rows you may have to enlarge \meta{n} (you
+% can use non-integral values).
+% If you have horizontal lines that interact with the braces you are
+% \index{hhline=\Package{hhline}|usage}
+% advised to use the \Package{hhline} package to make the lines.
+%
+% In case you want to have a paragraph type text as optional parameter you could put it in a \cs{parbox}.
+% Alternatively you could add an extra column with the text in a \cs{multirow}, like in
+% \begin{quote}
+% \begin{verbatim}
+% \begin{tabular}{l@{}l@{}l}
+% dvi & \rdelim\}{3}{1em} & \multirow{3}{4cm}{These are the output types,
+% that are commonly used for \TeX.} \\
+% ps & & \\
+% pdf & & \\
+% \end{tabular}
+% \end{verbatim}
+% \end{quote}
+% \begin{quote}
+% \begin{tabular}{l@{}l@{}l}
+% dvi & \rdelim\}{3}{1em} & \multirow{3}{4cm}{These are the output types,
+% that are commonly used for \TeX.} \\
+% ps & & \\
+% pdf & & \\
+% \end{tabular}
+% \end{quote}
+% Note that we used \texttt{@\{\}} to eliminate the intercolumn space to get the text tight to the brace.
+% \StopEventually{%
+% \PrintChanges
+% \PrintIndex}
+%
+% \section{Implementation}
+%
+%
+%\subsection{The \Package{multirow} package}
+%\label{sec:pack-multirow}
+% \iffalse
+%<*multirow>
+% \fi
+%
+% \changes{multirow v1.0}{}{distributed anonymously, based on a Usenet posting}
+% \changes{multirow v1.1}{}{allow it to work without bigstrut.sty (Piet van Oostrum)}
+% \changes{multirow v1.2}{}{modified by Jerry Leichter for the same goal, but using a
+% different approach which will work properly with bigstrut.sty}
+% \changes{multirow v1.2a}{}{modified by Piet van Oostrum to use \cs{vskip}
+% instead of \cs{raise} in positioning, avoiding making rows too high
+% when the adjustment is large}
+% \changes{multirow v1.3}{}{modified by Piet van Oostrum to work properly in a p{} column
+% (\cs{leavevmode} added)}
+% \changes{multirow v1.4}{}{modified by Piet van Oostrum to check for the special case that
+% the width is given as an *. In this case the natural
+% width of the text parameter will be used and the parameter
+% is processed in LR-mode.}
+% \changes{multirow v1.5}{}{modified by Piet van Oostrum: Added a \texttt{\%} after \texttt{\cs{hbox}\{\#5\}\cs{vfill}}.\\
+% Added \cs{strut}s around \#5 for better vertical positioning.
+% Additional coding for negative value of \meta{nrows}.}
+% \changes{multirow v1.6}{2004/05/05}{modified by Piet van Oostrum: Replace a space by \cs{relax} after
+% \texttt{\cs{advance}\cs{multirow at dima}\#4}}
+%
+% \changes{v1.9a}{2016/09/23}{Implement the \texttt{debug} option.}
+%
+% \begin{macro}{\ifmultirowdebug}
+% \begin{macro}{\multirowdebugtrue}
+% \begin{macro}{\multirowdebugfalse}
+% This is a boolean to [de]activate debugging (showing the generated box
+% contents). It is activated by the \texttt{debug} package option. The
+% \cs{newif} initializes it to false.
+% \begin{macrocode}
+\newif\ifmultirowdebug
+\DeclareOption{debug}{\multirowdebugtrue}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \changes{v1.9b}{2016/09/24}{Implement the \texttt{longtable} option.}
+% \begin{macro}{\cline}
+% The package option \texttt{longtable} redefines the \cs{cline} macro to
+% work around a bug in \Package{longtable}. See section \ref{sec:use-with-longtable}\footnote{%
+% Thanks to David Carlisle. See
+% \url{http://tex.stackexchange.com/questions/52100/longtable-multirow-problem-with-cline-and-nopagebreak#answer-52101} }.
+% \begin{macrocode}
+\DeclareOption{longtable}{%
+\AtBeginDocument{%
+\def\@cline#1-#2\@nil{%
+ \omit
+ \@multicnt#1%
+ \advance\@multispan\m at ne
+ \ifnum\@multicnt=\@ne\@firstofone{&\omit}\fi
+ \@multicnt#2%
+ \advance\@multicnt-#1%
+ \advance\@multispan\@ne
+ \leaders\hrule\@height\arrayrulewidth\hfill
+ \cr
+ \noalign{\nobreak\vskip-\arrayrulewidth}}
+}}
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v1.9b}{2016/09/26}{Implement the \texttt{supertabular} option
+% and the \cs{STneed} command.}
+% The package option \texttt{supertabular} redefines \verb+\\*+ inside a
+% \environment{supertabular}.
+% The redefinition is delayed until the \verb+\begin{document}+.
+% \begin{macrocode}
+\DeclareOption{supertabular}{%
+\AtBeginDocument{%
+% \end{macrocode}
+% \begin{macro}{\ST at tabularcr}
+% This macro is the definition of \verb+\\+ inside a
+% \environment{supertabular}. We check for a \verb+*+, and if it is
+% present we call our own version, otherwise the
+% \environment{supertabular} version.
+% \begin{macrocode}
+\def\ST at tabularcr{%
+ {\ifnum0=`}\fi
+ \@ifstar{\MRST at xtabularcr}{\ST at xtabularcr}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\MRST at xtabularc}
+% \begin{macro}{\MRST at argtabularc}
+% \begin{macro}{\MRST at xargtabularc}
+% \begin{macro}{\MRST at yargtabularc}
+% These are copies of the corresponding macros from
+% \Package{supertabular}, but instead of \cs{ST at cr} they call \cs{MRST at cr}.
+% \begin{macrocode}
+\def\MRST at xtabularcr{%
+ \@ifnextchar[%]
+ {\MRST at argtabularcr}%
+ {\ifnum0=`{\fi}\cr\MRST at cr}}
+\def\MRST at argtabularcr[#1]{%
+ \ifnum0=`{\fi}%
+ \ifdim #1>\z@
+ \unskip\MRST at xargarraycr{#1}
+ \else
+ \MRST at yargarraycr{#1}%
+ \fi}
+\def\MRST at xargarraycr#1{%
+ \@tempdima #1\advance\@tempdima \dp \@arstrutbox
+ \vrule \@height\z@ \@depth\@tempdima \@width\z@ \cr
+ \noalign{\global\ST at toadd=#1}\MRST at cr}
+\def\MRST at yargarraycr#1{%
+ \cr\noalign{\vskip #1\global\MRST at toadd=#1}\MRST at cr}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\MRST at cr}
+% This is a truncated copy of \cs{ST at cr}. It does all the bookkeeping
+% about the space the \environment{longtable} occupies, but it doesn't
+% do the pagebreaking part.
+% \begin{macrocode}
+\def\MRST at cr{%
+ \noalign{%
+ \ifnum\ST at pboxht<\ST at lineht
+ \global\advance\ST at pageleft -\ST at lineht
+ \global\ST at prevht\ST at lineht
+ \else
+ \global\advance\ST at pageleft -\ST at pboxht
+ \global\advance\ST at pageleft -0.1\ST at pboxht
+ \global\advance\ST at pageleft -\ST at stretchht
+ \global\ST at prevht\ST at pboxht
+ \global\ST at pboxht\z@
+ \fi
+ \global\advance\ST at pageleft -\ST at toadd
+ \global\ST at toadd=\z@}}
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\STneed}
+% This macro can be used in a \environment{supertabular} to indicate how
+% much space a multirow entry needs. See section~\ref{sec:use-with-supertabular}.
+% \begin{macrocode}
+\def\STneed#1{\ifdim\ST at pageleft<#1\ST at newpage\ST at next\fi}
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\ProcessOptions
+% \end{macrocode}
+%
+% \cs{multirow at colwidth} is a length that is used to implement the ``\texttt{=}'' variant of \meta{width}.
+%
+% \changes{v1.9}{2016/09/15}{Implement the ``\texttt{!=}'' option for \cs{multirow}'s \meta{width} parameter.}
+% \begin{macro}{\multirow at colwidth}
+% \cs{multirow at colwidth} is a length that is used to implement the ``\texttt{=}'' variant of \meta{width}.
+% \begin{macrocode}
+\newlength{\multirow at colwidth}
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v1.9}{2016/09/15}{Give \Package{multirow} its own temp
+% registers, so that we can safely pass the box height to \Package{bigdelim}.}
+% \begin{macro}{\multirow at cnta}
+% \begin{macro}{\multirow at cntb}
+% \begin{macro}{\multirow at dima}
+% Define two counters and a length for internal use in \cs{multirow}.
+% \begin{macrocode}
+\newcount\multirow at cnta
+\newcount\multirow at cntb
+\newlength\multirow at dima
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\multirow at setcolwidth}
+% This macro calculates \cs{multirow at colwidth} for an entry that has the
+% \meta{width} given as ``\texttt{=}''. We check if we are inside a
+% \environment{tabulary} environment, by checking if \cs{TY at final} is defined.
+% If not, then \cs{multirow at colwidth} = \cs{hsize}. The \environment{tabulary}
+% environment will make two passes. On the first pass, we set \cs{multirow at colwidth}
+% to the size that the text would have in LR mode (with newlines replaced
+% by spaces), so that \environment{tabulary} will gives us enough space.
+% On the second pass (characterized by \cs{TY at box} = \cs{TY at box@v}) we use
+% the value that \environment{tabulary} has given us in \cs{hsize}.
+% This algorithm is not perfect, but good enough in most cases.
+% \begin{macrocode}
+\def\multirow at setcolwidth#1{%
+ \ifx\TY at final\@undefined \multirow at colwidth=\hsize
+ \else
+ \ifx\TY at box\TY at box@v\multirow at colwidth=\hsize
+ \else \setbox0\hbox
+ {\let\\\space\let\newline\space #1}\multirow at colwidth=\wd0
+ \fi
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\multirowsetup}
+% \cs{multirowsetup} is executed at the beginning of each \cs{multirow}.
+% \begin{macrocode}
+\newcommand\multirowsetup{\raggedright}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\multirow at vbox}
+% This creates the \cs{vbox}. Parameters:\\
+% \texttt{\#1} = \meta{vpos}, \texttt{\#2} = initialization code (for
+% example to set the width of the \cs{parbox}), \texttt{\#3} = box contents.\\
+% Depending on the \meta{vpos} parameter, it will be top-aligned,
+% vertically centered, or bottom-aligned. This is done by inserting
+% \cs{vfill} in the proper places.\\
+% Note: the \cs{relax} is to protect against an empty \meta{vpos}
+% parameter.
+% \begin{macrocode}
+\long\def\multirow at vbox#1#2#3{\setbox0\vtop to \multirow at dima{#2%
+ \if #1t\relax\else\vfill\fi
+ \multirowsetup #3\if #1b\relax\else\vfill\fi}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\multirow}
+% Make an entry that will span multiple rows of a table.\\
+% First collect all the parameters and replace missing optional parameters by their default values.
+% \changes{v1.8}{2016/09/14}{Add the optional first parameter \meta{vpos}.}
+% \begin{macrocode}
+%% \multirow [vpos] {nrows} [bigstruts] {width} [fixup] {text}
+\newcommand\multirow[2][c]{\@multirow[#1]{#2}}
+\def\@multirow[#1]#2{\@ifnextchar[{\@@multirow[#1]#2}{\@@multirow[#1]#2[0]}}
+\def\@@multirow[#1]#2[#3]#4{\@ifnextchar[{\@xmultirow[#1]{#2}[#3]{#4}}%
+ {\@xmultirow[#1]{#2}[#3]{#4}[0pt]}}
+% \end{macrocode}
+% \changes{v1.9a}{2016/09/23}{Add the optional prefix to the \meta{bigstruts} parameter.}
+% \begin{macro}{\multirow at piii}
+% \begin{macro}{\ifmultirow at prefixt}
+% \begin{macro}{\multirow at prefixttrue}
+% \begin{macro}{\multirow at prefixtfalse}
+% \begin{macro}{\ifmultirow at prefixb}
+% \begin{macro}{\multirow at prefixbtrue}
+% \begin{macro}{\multirow at prefixbfalse}
+% This macro splits off a \texttt{t}, \texttt{b}, or \texttt{tb} prefix
+% of the \meta{bigstruts} parameter, and sets \cs{multirow at cntb} to
+% the numerical value. The prefix is remembered in two booleans:
+% \cs{ifmultirow at prefixt} and \cs{ifmultirow at prefixb}.
+% \begin{macrocode}
+\newif\ifmultirow at prefixt
+\newif\ifmultirow at prefixb
+\def\multirow at piii#1#2#3\end{\multirow at prefixtfalse\multirow at prefixbfalse
+ \if t#1\multirow at prefixttrue
+ \if b#2\multirow at prefixbtrue \multirow at cntb=#3%
+ \else \multirow at cntb=#2#3%
+ \fi
+ \else
+ \if b#1\multirow at prefixbtrue \multirow at cntb=#2#3%
+ \else \multirow at cntb=#1#2#3%
+ \fi
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% This is the real workhorse. It starts with splitting the
+% \meta{bigstruts} parameter, and then calculating the height of the multirow box.
+% \meta{nrows} is saved in \cs{multirow at cnta}.
+% \begin{macrocode}
+\def\@xmultirow[#1]#2[#3]#4[#5]#6{\multirow at cnta=#2%
+ \expandafter\multirow at piii#3\relax\end%
+ \multirow at dima=\multirow at cnta\ht\@arstrutbox
+ \advance\multirow at dima\multirow at cnta\dp\@arstrutbox
+ \ifnum\multirow at cnta<0\multirow at dima=-\multirow at dima\fi
+ \advance\multirow at dima \multirow at cntb\bigstrutjot
+% \end{macrocode}
+% \changes{v1.9a}{2016/09/23}{Redo the \cs{vbox} calculation and positioning.}
+% The text is set in a \cs{vbox} by calling \cs{multirow at vbox}. \\
+% If the \meta{width} parameter is \texttt{*} set just the text in the \cs{vbox}.
+% \begin{macrocode}
+ \if*#4\multirow at vbox{#1}{}{\hbox{\strut#6\strut}}%
+% \end{macrocode}
+% Otherwise set it in a \cs{parbox} inside a \cs{vbox}. \\
+% If the \meta{width} parameter is given as ``\texttt{=}'', we calculate
+% \cs{multirow at colwidth} and use that as width of the \cs{parbox}.
+% \begin{macrocode}
+ \else \if=#4\multirow at setcolwidth{#6}%
+ \multirow at vbox{#1}{\hsize\multirow at colwidth\@parboxrestore}{\strut#6\strut\par}%
+% \end{macrocode}
+% Otherwise the given parameter is used as the width of the \cs{parbox}.
+% \begin{macrocode}
+ \else \multirow at vbox{#1}{\hsize#4\@parboxrestore}{\strut#6\strut\par}%
+ \fi \fi
+% \end{macrocode}
+% Now position the \cs{vbox} properly. More details are given in the
+% appendix. We set the depth of the \cs{vbox}
+% to 0, so that it will not influence the depth of the current row. The
+% overview of the shift amount can be found in section~\ref{sec:overview}.
+% \begin{macrocode}
+ \dp0=\z@
+% \end{macrocode}
+% If \meta{nrows}${}> 0$: \\
+% If \meta{vpos} = \texttt{[t]}, then the box is already positioned
+% correctly (the baseline is on the baseline of the row). However, later
+% the top of the box will be taken as the reference point (instead
+% of the baseline), therefore we take
+% the height of the box (h) as the shift amount. See fig.~\ref{fig:top-t}.\\
+% If \meta{vpos} = \texttt{[c]} we shift it up h1 (see fig.~\ref{fig:top-c}), where h1 = \cs{ht}\cs{@arstrutbox}
+% + (\cs{bigstrutjot} \cs{ifmultirow at prefixt}).\\
+% If \meta{vpos} = \texttt{[b]} we shift it up h1 + h2 (see fig.~\ref{fig:top-b}), where h2 = \cs{dp}\cs{@arstrutbox}
+% + (\cs{bigstrutjot} \cs{ifmultirow at prefixb}).\\
+% We calculate the required shift in \cs{multirow at dima}.
+% \begin{macrocode}
+ \ifnum\multirow at cnta>0
+ \if#1t\relax\multirow at dima=\ht0\else
+ \multirow at dima=\ht\@arstrutbox
+ \ifmultirow at prefixt \advance\multirow at dima\bigstrutjot\fi
+ \if#1b\relax \advance\multirow at dima\dp\@arstrutbox
+ \ifmultirow at prefixb \advance\multirow at dima\bigstrutjot\fi
+ \fi
+ \fi
+% \end{macrocode}
+% If \meta{nrows}${}< 0$: \\
+% If \meta{vpos} = \texttt{[t]}, shift the box up $\textrm{H} - \textrm{h1} -\textrm{h2} + \textrm{h}$. See fig.~\ref{fig:bot-t}.\\
+% If \meta{vpos} = \texttt{[c]}, shift the box up $\textrm{H} - \textrm{h2}$. See fig.~\ref{fig:bot-c}.\\
+% If \meta{vpos} = \texttt{[b]}, shift the box up H. See fig.~\ref{fig:bot-b}.\\
+% H is the current value of \cs{multirow at dima}.
+% \begin{macrocode}
+ \else
+ \if#1b\relax\else
+ \advance\multirow at dima-\dp\@arstrutbox
+ \ifmultirow at prefixb \advance\multirow at dima-\bigstrutjot\fi
+ \if#1t\relax\advance\multirow at dima-\ht\@arstrutbox
+ \ifmultirow at prefixt \advance\multirow at dima-\bigstrutjot\fi
+ \advance\multirow at dima\ht0
+ \fi
+ \fi
+ \fi
+% \end{macrocode}
+% Finally, we add the \meta{fixup} parameter (\verb+#5+), and go into
+% horizontal mode. Then we shift the box up by putting a \cs{vskip} above it,
+% and add it to the output. Because of the \cs{vskip} the resulting box
+% will have a height 0. \\
+% If \cs{multirowdebug} is true, we show the box.
+% \begin{macrocode}
+ \advance\multirow at dima#5\relax
+ \leavevmode
+ \ifmultirowdebug\setbox0\vtop{\vskip-\multirow at dima\box0\vss}%
+ {\showboxdepth=5 \showboxbreadth=10 \showbox0}\box0
+ \else\vtop{\vskip-\multirow at dima\box0\vss}\fi
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\bigstrutjot}
+% Define \cs{bigstrutjot} if not already defined.
+% \begin{macrocode}
+\@ifundefined{bigstrutjot}{\newdimen\bigstrutjot \bigstrutjot=\jot}{}
+% \end{macrocode}
+% \end{macro}
+% \iffalse
+%</multirow>
+% \fi
+%
+% \subsection{The \Package{bigstrut} package}
+% \label{sec:pack-bigstrut}
+%
+% \iffalse
+%<*bigstrut>
+% \fi
+% \changes{bigstrut v1.0}{1994/05/31}{Initial version}
+% \begin{macro}{\bigstrutjot}
+% This is a length. By default it is set to 2pt. You can change it
+% with the \cs{setlength} command.
+% \begin{macrocode}
+\@ifundefined{bigstrutjot}{\newdimen\bigstrutjot}{}\bigstrutjot=2pt
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bigstrut}
+% This macro inserts a strut. Depending on the optional parameter it extends
+% above and/or below the standard array/tabular strut.
+% \begin{macrocode}
+\newcommand\bigstrut[1][x]{%
+ \unskip\@tempdima=\ht\@arstrutbox \@tempdimb=\dp\@arstrutbox
+ \ifx #1b\relax \else \advance\@tempdima by \bigstrutjot\fi
+ \ifx #1t\relax \else \advance\@tempdimb by \bigstrutjot\fi
+ \hbox{\vrule \@height\@tempdima \@depth\@tempdimb \@width\z@}\ignorespaces}
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%</bigstrut>
+% \fi
+%
+% \subsection{The \Package{bigdelim} package}
+% \label{sec:pack-bigdelim}
+% \iffalse
+%<*bigdelim>
+% \fi
+% \changes{bigdelim v0.0}{1994/10/02}{bigbrace.sty by \O ystein Bache}
+% \changes{bigdelim v1.0}{1999/11/05}{Initial version bigdelim.sty}
+% \begin{macrocode}
+\RequirePackage{multirow}
+% \end{macrocode}
+% \begin{macro}{\ldelim}
+% This macro typesets a left delimiter. It calls \cs{multirow} with the proper parameters.
+% The size of the delimiter is determined by putting a \cs{vbox} with the proper height and
+% zero width next to it. The height is the one that \cs{multirow}
+% already has calculated in \cs{multirow at dima}.
+% \begin{macrocode}
+\newcommand\ldelim[3]{\@ifnextchar[{\@ldelim{#1}{#2}{#3}}{\@ldelim{#1}{#2}{#3}[\null]}}
+\def\@ldelim#1#2#3[#4]%
+ {\multirow{#2}{#3}{%
+ \ensuremath
+ {\left.\vcenter{\hsize=0pt\vrule height \multirow at dima width 0pt}%
+ \textrm{#4}\right#1}}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\rdelim}
+% This macro typesets a right delimiter. It calls \cs{multirow} with the
+% proper parameters, similar to \cs{ldelim}.
+% \begin{macrocode}
+\newcommand\rdelim[3]{\@ifnextchar[{\@rdelim{#1}{#2}{#3}}{\@rdelim{#1}{#2}{#3}[\null]}}
+\def\@rdelim#1#2#3[#4]%
+ {\multirow{#2}{#3}{%
+ \ensuremath
+ {\left#1\vcenter{\hsize=0pt\vrule height \multirow at dima width 0pt}%
+ \textrm{#4}\right.}}}
+% \end{macrocode}
+% \end{macro}
+% \iffalse
+%</bigdelim>
+% \fi
+%
+% \appendix
+%
+% \section{Appendix}
+% \label{sec:appendix}
+%
+% \index{vbox=\verb!*+\vbox+|usage}
+%
+% In this section we explain the \cs{vbox} positioning in \cs{multirow}.
+% The positioning depends on the \meta{nrows}, \meta{vpos},
+% \meta{bigstruts} and \meta{fixup} parameters. The box is constructed with \cs{vtop}. The
+% algorithm of \cs{vtop} is described in \emph{The \TeX{}book}, p.~81.
+%
+% Each case is described by a figure. In the figure the lefthand column
+% indicates the context of the tabular in which the multirow appears,
+% i.e \meta{nrows} rows. The righthand column is the multirow box that
+% is to be inserted. The baseline is the natural position where the material will be
+% positioned in the first place. Later it will be shifted up
+% to the desired location.
+%
+% H is the calculated height of the box: $\meta{nrows} \times
+% \textrm{the natural height of a row} + \meta{bigstruts} \times
+% \mathrm{\cs{bigstrutjot}} $.
+%
+% {topstrut} = \cs{bigstrutjot} if there is a \cs{bigstrut} on the top of
+% the first row (as indicated by the \texttt{t} prefix in the
+% \meta{bigstruts} parameter), otherwise 0.
+%
+% {botstrut} = \cs{bigstrutjot} if there is a \cs{bigstrut} on bottom of
+% the last row (as indicated by the \texttt{b} prefix in the
+% \meta{bigstruts} parameter), otherwise 0.
+%
+% h1 = $\textrm{height of a tabular row} + \textrm{topstrut}$
+%
+% h2 = $\textrm{depth of a tabular row} + \textrm{botstrut}$
+%
+% Note: the following descriptions describe the vertical shift of the
+% box without taking the \meta{fixup} into account. In all cases
+% \meta{fixup} has to be added if it is given.
+%
+% \subsection{Case \meta{nrows}${}> 0$}
+%
+% \subsubsection*{\meta{vpos} = [t]}
+%
+% In this case the \cs{vbox} contains the text followed by a \cs{vfill}.
+% Such a \cs{vbox} has a height that is the height of the top line of
+% the text (h). H = height + depth of the box. This means that the box is
+% already positioned correctly. However, later we will put the box
+% inside another \cs{vbox}, with a \cs{vskip} on to of it, and this will
+% make the top of the box its reference point. Therefore we will
+% have to shift it up again over a distance h
+% (which probably will be different from the height of the tabular row).
+% So the total shift becomes h. See fig.~\ref{fig:top-t}.
+%
+% Alternatively, we could have omitted the \cs{vskip} in this case,
+% thereby leaving the baseline undisturbed, but this would make the code
+% unsymmetrical. Therefore we choose to set the shift amount to h here.
+%
+% \begin{figure}[htpb]
+% \centering
+% \begin{tikzpicture}
+% \draw (2, -0.5) rectangle (5,4.5);
+% \foreach \y in {0,...,4} \draw (2, \y) -- (5, \y);
+% \draw (0, 4.2) node (topstrut) {topstrut};
+% \draw[->] (topstrut) -- (2, 4.2);
+% \draw (0, -0.25) node (botstrut) {botstrut};
+% \draw[->] (botstrut) -- (2, -0.25);
+% \draw[<->] (5.3, -0.5) -- (5.3, 4.5);
+% \draw (5.5, 2) node {H};
+% \draw (0, 3.3) node (baseline) {baseline};
+% \draw[dashed] (1.7, 3.3) -- (5.9, 3.3);
+% \draw[<->] (5.5, 3.3) -- (5.5, 4.5);
+% \draw (5.9, 3.9) node {h1};
+%
+% \draw (6.5, 4) rectangle (9.5, -1);
+% \draw[<->] (9.7, -1) -- (9.7, 4);
+% \draw (10, 1.5) node {H};
+% \draw[<->] (10, 3.3) -- (10, 4);
+% \draw (10.3, 3.7) node {h};
+% \draw[fill=lightgray] (6.6, 1) rectangle (9.4, 3.9);
+% \draw (8, 0) node[align=center] {\cs{vfill}};
+% \draw (8, 2) node[align=center] {text};
+% \draw[draw=gray] (6.6, 3) -- (9.4, 3);
+% \draw[dashed] (6.2, 3.3) -- (9.8, 3.3);
+% \draw[->, line width=4pt, draw=gray] (8, 3.3) -- (8, 4);
+% \end{tikzpicture}
+% \caption{Case \meta{nrows}${}> 0$, \meta{vpos} = [t]}
+% \label{fig:top-t}
+% \end{figure}
+%
+% \subsubsection*{\meta{vpos} = [c]}
+%
+% In this case the \cs{vbox} contains a \cs{vfill}, the text, and another \cs{vfill}.
+% Such a \cs{vbox} has a height 0, i.e. the top of the box is on the
+% baseline. Because both boxes have the same size (H), they can be
+% aligned by shifting the \cs{vbox} up over h1. See fig.~\ref{fig:top-c}.
+%
+% \begin{figure}[htpb]
+% \centering
+%\begin{tikzpicture}
+% \draw (2, -0.5) rectangle (5,4.5);
+% \foreach \y in {0,...,4} \draw (2, \y) -- (5, \y);
+% \draw (0, 4.2) node (topstrut) {topstrut};
+% \draw[->] (topstrut) -- (2, 4.2);
+% \draw (0, -0.25) node (botstrut) {botstrut};
+% \draw[->] (botstrut) -- (2, -0.25);
+% \draw[<->] (5.3, -0.5) -- (5.3, 4.5);
+% \draw (5.5, 2) node {H};
+% \draw (0, 3.3) node (baseline) {baseline};
+% \draw[dashed] (1.7, 3.3) -- (5.9, 3.3);
+% \draw[<->] (5.5, 3.3) -- (5.5, 4.5);
+% \draw (5.9, 3.9) node {h1};
+%
+% \draw (6.5, 3.3) rectangle (9.5, -1.7);
+% \draw[<->] (9.7, -1.7) -- (9.7, 3.3);
+% \draw (10, 0.8) node {H};
+% \draw[fill=lightgray] (6.6, -0.5) rectangle (9.4, 2.1);
+% \draw (8, 2.7) node[align=center] {\cs{vfill}};
+% \draw (8, 0.8) node[align=center] {text};
+% \draw (8, -1) node[align=center] {\cs{vfill}};
+% \draw[->, line width=4pt, draw=gray] (8, 3.3) -- (8, 4.5);
+% \draw[draw=gray] (6.5, 4.5) -- (9.5, 4.5);
+% \end{tikzpicture}
+% \caption{Case \meta{nrows}${}> 0$, \meta{vpos} = [c]}
+% \label{fig:top-c}
+% \end{figure}
+%
+% \subsubsection*{\meta{vpos} = [b]}
+%
+% Now the \cs{vbox} contains a \cs{vfill}, followed by the text.
+% Because it ends with the text, it gets an additional depth equal to
+% the depth of the last line of the text.
+% Such a \cs{vbox} has a height 0, i.e. the top of the box is on the
+% baseline, but its depth is H + that depth. In other words the baseline
+% of the last text line is H below the top.
+%
+% Because \meta{vpos} = \texttt{[b]} we want the baseline of the last
+% textline to shift to the baseline of the last tabular row. The amount
+% of the shift is h1 + h2. See fig.~\ref{fig:top-b}.
+%
+% \begin{figure}[htpb]
+% \centering
+%\begin{tikzpicture}
+% \draw (2, -0.5) rectangle (5,4.5);
+% \foreach \y in {0,...,4} \draw (2, \y) -- (5, \y);
+% \draw (0, 4.2) node (topstrut) {topstrut};
+% \draw[->] (topstrut) -- (2, 4.2);
+% \draw (0, -0.25) node (botstrut) {botstrut};
+% \draw[->] (botstrut) -- (2, -0.25);
+% \draw[<->] (5.3, -0.5) -- (5.3, 4.5);
+% \draw (5.5, 2) node {H};
+% \draw (0, 3.3) node (baseline) {baseline};
+% \draw[dashed] (1.7, 3.3) -- (5.9, 3.3);
+% \draw[<->] (5.5, 3.3) -- (5.5, 4.5);
+% \draw (5.9, 3.9) node {h1};
+% \draw[<->] (5.5, -0.5) -- (5.5, 0.3);
+% \draw (5.9, -0.1) node {h2};
+%
+% \draw (6.5, 3.3) rectangle (9.5, -2.1);
+% \draw[<->] (9.7, -1.7) -- (9.7, 3.3);
+% \draw (10, 0.8) node {H};
+% \draw[fill=lightgray] (6.6, -2) rectangle (9.4, 1);
+% \draw (8, 2) node[align=center] {{\cs{vfill}}};
+% \draw (8, -0.5) node[align=center] {text};
+% \draw (0, 0.3) node (baseline) {baseline};
+% \draw[dashed] (6.3, -1.7) -- (10, -1.7);
+% \draw (3.5, -1.7) node (baseline) {baseline of last text line};
+% \draw[dashed] (1.7, 0.3) -- (10, 0.3);
+% \draw[->, line width=4pt, draw=gray] (8.5, -1.7) -- (8.5, 0.3);
+% \end{tikzpicture}
+% \caption{Case \meta{nrows}${}> 0$, \meta{vpos} = [b]}
+% \label{fig:top-b}
+% \end{figure}
+%
+% \subsection{Case \meta{nrows}${}<0$}
+%
+% \meta{nrows}${}<0$ when the multirow is positioned in the last row of
+% the multirow block.
+%
+% \subsubsection*{\meta{vpos} = [t]}
+%
+% In this case the \cs{vbox} contains the text followed by a \cs{vfill}.
+% Such a \cs{vbox} has a height that is the height of the top line of
+% the text. The baseline is aligned with the baseline of the last row.
+% Because \meta{vpos} = [t], we want it to be aligned with the baseline
+% of the first row. Therefore it has to be shifted up $\textrm{H} -
+% \textrm{h1} - \textrm{h2}$. But because later the height of the box
+% will be set to 0, we must also add the current height h. Therefore the
+% total shift becomes $\textrm{H} - \textrm{h1} - \textrm{h2} +
+% \textrm{h}$. See fig.~\ref{fig:bot-t}.
+%
+% \begin{figure}[htpb]
+% \centering
+% \begin{tikzpicture}
+% \draw (2, -0.5) rectangle (5,4.5);
+% \foreach \y in {0,...,4} \draw (2, \y) -- (5, \y);
+% \draw (0, 4.2) node (topstrut) {topstrut};
+% \draw[->] (topstrut) -- (2, 4.2);
+% \draw (0, -0.25) node (botstrut) {botstrut};
+% \draw[->] (botstrut) -- (2, -0.25);
+% \draw[<->] (5.3, -0.5) -- (5.3, 4.5);
+% \draw (5.5, 2) node {H};
+% \draw (0, 3.3) node (baseline) {baseline};
+% \draw[dashed] (1.7, 3.3) -- (9, 3.3);
+% \draw[<->] (5.5, 3.3) -- (5.5, 4.5);
+% \draw (5.9, 3.9) node {h1};
+% \draw[<->] (5.5, -0.5) -- (5.5, 0.3);
+% \draw (5.9, -0.1) node {h2};
+% \draw (0, 0.3) node (baseline) {baseline};
+% \draw[dashed] (1.7, 0.3) -- (5.9, 0.3);
+%
+% \draw (6.5, 1) rectangle (9.5, -4);
+% \draw[<->] (9.7, -4) -- (9.7, 1);
+% \draw (10, -1.5) node {H};
+% \draw[<->] (10, 0.3) -- (10, 1);
+% \draw (10.3, 0.7) node {h};
+% \draw[fill=lightgray] (6.6, -2) rectangle (9.4, 0.9);
+% \draw (8, -3) node[align=center] {\cs{vfill}};
+% \draw (8, -1) node[align=center] {text};
+% \draw[draw=gray] (6.6, 0) -- (9.4, 0);
+% \draw[dashed] (6.2, 0.3) -- (10.3, 0.3);
+% \draw[->, line width=4pt, draw=gray] (8, 0.3) -- (8, 3.3);
+% \end{tikzpicture}
+% \caption{Case \meta{nrows}${} < 0$, \meta{vpos} = [t]}
+% \label{fig:bot-t}
+% \end{figure}
+%
+% \subsubsection*{\meta{vpos} = [c]}
+%
+% In this case the \cs{vbox} contains a \cs{vfill}, the text, and another \cs{vfill}.
+% Such a \cs{vbox} has a height 0, i.e. the top of the box is on the
+% baseline. Because both boxes have the same size (H), they can be
+% aligned by shifting the \cs{vbox} up over $\textrm{H} - \textrm{h2}$.
+% See fig.~\ref{fig:bot-c}.
+%
+% \begin{figure}[htpb]
+% \begin{tikzpicture}
+% \draw (2, -0.5) rectangle (5,4.5);
+% \foreach \y in {0,...,4} \draw (2, \y) -- (5, \y);
+% \draw (0, 4.2) node (topstrut) {topstrut};
+% \draw[->] (topstrut) -- (2, 4.2);
+% \draw (0, -0.25) node (botstrut) {botstrut};
+% \draw[->] (botstrut) -- (2, -0.25);
+% \draw[<->] (5.3, -0.5) -- (5.3, 4.5);
+% \draw (5.5, 2) node {H};
+% \draw (0, 3.3) node {baseline};
+% \draw[dashed] (1.7, 3.3) -- (5.8, 3.3);
+% \draw[<->] (5.5, 3.3) -- (5.5, 4.5);
+% \draw (5.9, 3.9) node {h1};
+% \draw[<->] (5.5, -0.5) -- (5.5, 0.3);
+% \draw (5.9, -0.1) node {h2};
+% \draw (0, 0.3) node {baseline};
+% \draw[dashed] (1.7, 0.3) -- (5.9, 0.3);
+%
+% \draw (6.5, 0.3) rectangle (9.5, -4.7);
+% \draw[<->] (9.7, -4.7) -- (9.7, 0.3);
+% \draw (10, -3.2) node {H};
+% \draw[fill=lightgray] (6.6, -3.5) rectangle (9.4, -0.9);
+% \draw (8, -0.3) node[align=center] {\cs{vfill}};
+% \draw (8, -2.2) node[align=center] {text};
+% \draw (8, -4) node[align=center] {\cs{vfill}};
+% \draw[->, line width=4pt, draw=gray] (8, 0.3) -- (8, 4.5);
+% \draw[draw=gray] (6.5, 4.5) -- (9.5, 4.5);
+% \end{tikzpicture}
+% \caption{Case \meta{nrows}${} < 0$, \meta{vpos} = [c]}
+% \label{fig:bot-c}
+% \end{figure}
+%
+% \subsubsection*{\meta{vpos} = [b]}
+%
+% The \cs{vbox} contains a \cs{vfill}, followed by the text.
+% Because it ends with the text, it gets an additional depth equal to
+% the depth of the last line of the text.
+% Such a \cs{vbox} has a height 0, i.e. the top of the box is on the
+% baseline, but its depth is H + that depth. In other words the baseline
+% of the last text line is H below the top.
+%
+% Because \meta{vpos} = \texttt{[b]} we want the baseline of the last
+% textline to shift to the baseline of the last tabular row. The amount
+% of the shift is H. See fig.~\ref{fig:bot-b}.
+%
+% \begin{figure}[htpb]
+% \begin{tikzpicture}
+% \draw (2, -0.5) rectangle (5,4.5);
+% \foreach \y in {0,...,4} \draw (2, \y) -- (5, \y);
+% \draw (0, 4.2) node (topstrut) {topstrut};
+% \draw[->] (topstrut) -- (2, 4.2);
+% \draw (0, -0.25) node (botstrut) {botstrut};
+% \draw[->] (botstrut) -- (2, -0.25);
+% \draw[<->] (5.3, -0.5) -- (5.3, 4.5);
+% \draw (5.5, 2) node {H};
+% \draw (0, 3.3) node {baseline};
+% \draw[dashed] (1.7, 3.3) -- (5.8, 3.3);
+% \draw[<->] (5.5, 3.3) -- (5.5, 4.5);
+% \draw (5.9, 3.9) node {h1};
+% \draw[<->] (5.5, -0.5) -- (5.5, 0.3);
+% \draw (5.9, -0.1) node {h2};
+% \draw (0, 0.3) node {baseline};
+% \draw[dashed] (1.7, 0.3) -- (5.9, 0.3);
+%
+% \draw (6.5, 0.3) rectangle (9.5, -5.1);
+% \draw[<->] (9.7, -4.7) -- (9.7, 0.3);
+% \draw (10, -3.2) node {H};
+% \draw[fill=lightgray] (6.6, -5) rectangle (9.4, -2);
+% \draw (8, -1) node[align=center] {{vfill}};
+% \draw (8, -3.5) node[align=center] {text};
+% \draw (0, 0.3) node (baseline) {baseline};
+% \draw[dashed] (1.7, 0.3) -- (10, 0.3);
+% \draw[dashed] (6.3, -4.7) -- (10, -4.7);
+% \draw (3.5, -4.7) node {baseline of last text line};
+% \draw[->, line width=4pt, draw=gray] (8.5, -4.7) -- (8.5, 0.3);
+% \end{tikzpicture}
+% \caption{Case \meta{nrows}${} < 0$, \meta{vpos} = [b]}
+% \label{fig:bot-b}
+% \end{figure}
+%
+% \subsection{Overview}
+% \label{sec:overview}
+%
+% \begin{tabular}{| l | l | l |}
+% \hline
+% \meta{vpos} & \meta{nrows} > 0 & \meta{nrows} < 0 \\
+% \hline
+% \texttt{[t]} & h & $\textrm{H} - \textrm{h1} -\textrm{h2} + \textrm{h}$ \\
+% \texttt{[c]} & h1 & $\textrm{H} - \textrm{h2}$ \\
+% \texttt{[b]} & h1 + h2 & H \\
+% \hline
+% & x & $\textrm{H} - \textrm{h1} -\textrm{h2} + x$ \\
+% \hline
+% \end{tabular}
+%
+% \Finale
+\endinput
Property changes on: trunk/Master/texmf-dist/source/latex/multirow/multirow.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/multirow/multirow.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/multirow/multirow.ins (rev 0)
+++ trunk/Master/texmf-dist/source/latex/multirow/multirow.ins 2016-09-27 21:06:23 UTC (rev 42160)
@@ -0,0 +1,58 @@
+%%
+%% Copyright (C) 2016 by Piet van Oostrum <piet at vanoostrum.org>
+%%
+%% This file may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License, either version 1.3 of this license
+%% or (at your option) any later version. The latest version of this
+%% license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX version
+%% 2005/12/01 or later.
+%%
+
+\input docstrip.tex
+\keepsilent
+
+\usedir{tex/latex/multirow}
+
+\preamble
+
+This is a generated file.
+
+This file may be distributed and/or modified under the conditions of
+the LaTeX Project Public License, either version 1.3 of this license
+or (at your option) any later version. The latest version of this
+license is in:
+
+ http://www.latex-project.org/lppl.txt
+
+and version 1.3 or later is part of all distributions of LaTeX version
+2005/12/01 or later.
+
+\endpreamble
+
+\askforoverwritefalse
+\generate{\file{multirow.sty}{\from{\jobname.dtx}{multirow}}}
+\generate{\file{bigstrut.sty}{\from{\jobname.dtx}{bigstrut}}}
+\generate{\file{bigdelim.sty}{\from{\jobname.dtx}{bigdelim}}}
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* file into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* multirow.sty *}
+\Msg{* bigstrut.sty *}
+\Msg{* bigdelim.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file \jobname.dtx *}
+\Msg{* through LaTeX. *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{*************************************************************}
+
+\endbatchfile
Modified: trunk/Master/texmf-dist/tex/latex/multirow/bigdelim.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/multirow/bigdelim.sty 2016-09-27 01:16:26 UTC (rev 42159)
+++ trunk/Master/texmf-dist/tex/latex/multirow/bigdelim.sty 2016-09-27 21:06:23 UTC (rev 42160)
@@ -1,68 +1,43 @@
-% bigdelim.sty
-% version 1.0
-% Nov 5, 1999
-% Piet van Oostrum <piet at cs.uu.nl>
-% From bigbrace.sty : Oct 2, 1994 \Oystein Bache <bache at kjemi.unit.no>
-% from: \dobrace by piet at cs.ruu.nl (Piet van Oostrum):
%%
-%% 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.
+%% This is file `bigdelim.sty',
+%% generated with the docstrip utility.
%%
-%
-% Usage in a tabular or array:
-% \usepackage{multirow}
-% \usepackage{bigdelim}
-% \ldelim({n}{w}[text]
-% \rdelim){n}{w}[text]
-% Use these commands in a column of a tabular or array. They generate a big
-% parenthesis/brace extending over the next n rows (including this one).
-% The corresponding entries in the next rows must explicitely be given as
-% empty cells. The first parameter must be the delimiter to be used, e.g.
-% \{ \} [ ] ( ), in fact any parameter that can be used with \left and
-% \right. The text is optional and is set centered to the left of
-% \ldelim and to the right of \rdelim. w must be the width reserved for
-% the brace and text. If you have a recent version of multirow.sty {w} may
-% be given as {*}, but this may cause the braces to be too small. Also with
-% a recent version of multirow.sty the commands may be used in the last row
-% of the extension with a negative n parameter. This is useful in
-% combination with the colortbl package (see multirow.sty)
-% If there are unusually large rows you may have to enlarge n (you can use
-% non-integral values).
-% If you have horizontal lines that interact with the braces you are
-% advised to use the hhline package to make the lines.
-
-\def\ldelim#1#2#3{\@ifnextchar[{\@ldelim{#1}{#2}{#3}}{\@ldelim{#1}{#2}{#3}[\null]}}
+%% The original source files were:
+%%
+%% multirow.dtx (with options: `bigdelim')
+%%
+%% This is a generated file.
+%%
+%% This file may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License, either version 1.3 of this license
+%% or (at your option) any later version. The latest version of this
+%% license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX version
+%% 2005/12/01 or later.
+%%
+%% Copyright (C) 1994 by \O ystein Bache
+%% Copyright (C) 2016 by Piet van Oostrum <piet at vanoostrum.org>
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{bigdelim}
+ [2016/09/27 v2.0
+ Create big delimiters in tabular or array]
+\RequirePackage{multirow}
+\newcommand\ldelim[3]{\@ifnextchar[{\@ldelim{#1}{#2}{#3}}{\@ldelim{#1}{#2}{#3}[\null]}}
\def\@ldelim#1#2#3[#4]%
{\multirow{#2}{#3}{%
\ensuremath
- {\left.\vcenter{\hsize=0pt\vrule height
- \ifnum #2<0 -\fi#2\baselineskip width 0pt}%
+ {\left.\vcenter{\hsize=0pt\vrule height \multirow at dima width 0pt}%
\textrm{#4}\right#1}}}
-%
-\def\rdelim#1#2#3{\@ifnextchar[{\@rdelim{#1}{#2}{#3}}{\@rdelim{#1}{#2}{#3}[\null]}}
+\newcommand\rdelim[3]{\@ifnextchar[{\@rdelim{#1}{#2}{#3}}{\@rdelim{#1}{#2}{#3}[\null]}}
\def\@rdelim#1#2#3[#4]%
{\multirow{#2}{#3}{%
\ensuremath
- {\left#1\vcenter{\hsize=0pt\vrule height
- \ifnum #2<0 -\fi#2\baselineskip width 0pt}%
+ {\left#1\vcenter{\hsize=0pt\vrule height \multirow at dima width 0pt}%
\textrm{#4}\right.}}}
-%
\endinput
-%
-% Example:
-\documentclass{article}
-\usepackage{multirow}
-\usepackage{bigdelim}
-\begin{document}
-
-\begin{equation}
- \begin{array}{ccccccc}
- \ldelim({4}{4mm}& x & x & x & x &\rdelim){4}{4mm} \\
- & x & x & x & x & & i\\
- & x & x & x & x & & j\\
- & x & x & x & x & \\
- & & u & v & &
- \end{array}
-\end{equation}
-\end{document}
+%%
+%% End of file `bigdelim.sty'.
Modified: trunk/Master/texmf-dist/tex/latex/multirow/bigstrut.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/multirow/bigstrut.sty 2016-09-27 01:16:26 UTC (rev 42159)
+++ trunk/Master/texmf-dist/tex/latex/multirow/bigstrut.sty 2016-09-27 21:06:23 UTC (rev 42160)
@@ -1,41 +1,36 @@
%%
-%% bigstrut.sty V1.0 (31-May-94)
+%% This is file `bigstrut.sty',
+%% generated with the docstrip utility.
%%
-%% Author: Jerry Leichter <jerrold.leichter at smarts.com>
+%% The original source files were:
%%
-%% V1.0 Split out as a separate style file.
+%% multirow.dtx (with options: `bigstrut')
+%%
+%% This is a generated file.
+%%
+%% This file may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License, either version 1.3 of this license
+%% or (at your option) any later version. The latest version of this
+%% license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX version
+%% 2005/12/01 or later.
+%%
+%% Copyright (C) 1994 by Jerry Leichter
+%% Copyright (C) 2016 by Piet van Oostrum <piet at 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.
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{bigstrut}
+ [2016/09/27 v2.0
+ Provide larger struts in tabulars]
+\@ifundefined{bigstrutjot}{\newdimen\bigstrutjot}{}\bigstrutjot=2pt
+\newcommand\bigstrut[1][x]{%
+ \unskip\@tempdima=\ht\@arstrutbox \@tempdimb=\dp\@arstrutbox
+ \ifx #1b\relax \else \advance\@tempdima by \bigstrutjot\fi
+ \ifx #1t\relax \else \advance\@tempdimb by \bigstrutjot\fi
+ \hbox{\vrule \@height\@tempdima \@depth\@tempdimb \@width\z@}\ignorespaces}
+\endinput
%%
-% \bigstrut[x] produces a strut which is \bigstrutjot (2pt by default) higher,
-% lower, or both than the standard array/table strut. Use it in table entries
-% that are adjacent to \hline's to leave an extra bit of space - according to
-% the TeXbook (page 246), "This is a little touch that improves the appearance
-% of boxed tables; look for it as a mark of quality."
-%
-% Although you could use \bigstrut in an array, there isn't normally much
-% point since arrays are "opened up" by \jot anyway.
-%
-% \bigstrut[t] adds height; \bigstrut[b] adds depth. Just \bigstrut adds
-% both. So: Use \bigstrut[t] in the row just *after* an \hline; \bigstrut[b]
-% in the row just *before*; and \bigstrut if there are \hline's both before
-% and after.
-%
-% Spaces after the \bigstrut are ignored, even if it has an optional argument.
-% Spaces before the \bigstrut are generally ignored (by a single \unskip).
-%
-% Note: The multirow style file makes use of \bigstrutjot. If both styles
-% are used, they can be used in either order, as each checks to see if the
-% other has already defined \bigstrutjot. However, the default values they
-% set are different: If only multirow is used, \bigstrutjot will be set to
-% 3pt. If bigstrut is used, with or without multirow, \bigstrutjot will be
-% 2pt.
-
-\@ifundefined{bigstrutjot}{\newdimen\bigstrutjot}{}\bigstrutjot2pt
-\def\bigstrut{\relax\@ifnextchar [{\@bigstrut}{\@bigstrut[x]}}
-\def\@bigstrut[#1]{\unskip\@tempdima\ht\@arstrutbox \@tempdimb\dp\@arstrutbox
- \ifx #1b\else \advance\@tempdima by \bigstrutjot\fi
- \ifx #1t\else \advance\@tempdimb by \bigstrutjot\fi
- \hbox{\vrule \@height\@tempdima \@depth\@tempdimb \@width\z@}\ignorespaces}
+%% End of file `bigstrut.sty'.
Modified: trunk/Master/texmf-dist/tex/latex/multirow/multirow.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/multirow/multirow.sty 2016-09-27 01:16:26 UTC (rev 42159)
+++ trunk/Master/texmf-dist/tex/latex/multirow/multirow.sty 2016-09-27 21:06:23 UTC (rev 42160)
@@ -1,159 +1,156 @@
%%
-%% multirow.sty V1.6 version (5-May-2004)
+%% This is file `multirow.sty',
+%% generated with the docstrip utility.
%%
-%% Author: Jerry Leichter <jerrold.leichter at smarts.com>
-%% Piet van Oostrum <piet at cs.uu.nl>
+%% The original source files were:
%%
-%% 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.dtx (with options: `multirow')
+%%
+%% This is a generated file.
+%%
+%% This file may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License, either version 1.3 of this license
+%% or (at your option) any later version. The latest version of this
+%% license is in:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% and version 1.3 or later is part of all distributions of LaTeX version
+%% 2005/12/01 or later.
+%%
+%% Copyright (C) 1994 by Jerry Leichter
+%% Copyright (C) 2016 by Piet van Oostrum <piet at vanoostrum.org>
%%
-%% 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 at cs.uu.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.
-%% V1.2a was modified by Piet van Oostrum <piet at cs.uu.nl> to use \vskip
-%% instead of \raise in positioning, avoiding making rows too high
-%% when the adjustment is large.
-%% V1.3 was modified by Piet van Oostrum to work properly in a p{} column
-%% (\leavevmode added)
-%% V1.4 was modified by Piet van Oostrum to check for the special case that
-%% the width is given as an *. In this case the natural
-%% width of the text argument will be used and the argument
-%% is processed in LR-mode.
-%% V1.5 was modified by Piet van Oostrum: Added a % after \hbox{#5}\vfill}.
-%% Added \struts around #5 for better vertical positioning.
-%% Additional coding for negative value of nrows.
-%% V1.6 was modified by Piet van Oostrum: Replace a space by \relax after
-%% \advance\@tempdima#4.
-%%
-% 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 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.
-%
-% 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 (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}
-%
-\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
- \ifnum\@tempcnta<0\@tempdima=-\@tempdima\fi
- \advance\@tempdima#2\bigstrutjot
- \if*#3\setbox0\vtop to \@tempdima{\vfill\multirowsetup
- \hbox{\strut#5\strut}\vfill}%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{multirow}%
+ [2016/09/27 v2.0
+ Span multiple rows of a table]%
+\newif\ifmultirowdebug
+\DeclareOption{debug}{\multirowdebugtrue}
+\DeclareOption{longtable}{%
+\AtBeginDocument{%
+\def\@cline#1-#2\@nil{%
+ \omit
+ \@multicnt#1%
+ \advance\@multispan\m at ne
+ \ifnum\@multicnt=\@ne\@firstofone{&\omit}\fi
+ \@multicnt#2%
+ \advance\@multicnt-#1%
+ \advance\@multispan\@ne
+ \leaders\hrule\@height\arrayrulewidth\hfill
+ \cr
+ \noalign{\nobreak\vskip-\arrayrulewidth}}
+}}
+\DeclareOption{supertabular}{%
+\AtBeginDocument{%
+\def\ST at tabularcr{%
+ {\ifnum0=`}\fi
+ \@ifstar{\MRST at xtabularcr}{\ST at xtabularcr}}
+\def\MRST at xtabularcr{%
+ \@ifnextchar[%]
+ {\MRST at argtabularcr}%
+ {\ifnum0=`{\fi}\cr\MRST at cr}}
+\def\MRST at argtabularcr[#1]{%
+ \ifnum0=`{\fi}%
+ \ifdim #1>\z@
+ \unskip\MRST at xargarraycr{#1}
\else
- \setbox0\vtop to \@tempdima{\hsize#3\@parboxrestore
- \vfill \multirowsetup \strut#5\strut\par\vfill}%
+ \MRST at yargarraycr{#1}%
+ \fi}
+\def\MRST at xargarraycr#1{%
+ \@tempdima #1\advance\@tempdima \dp \@arstrutbox
+ \vrule \@height\z@ \@depth\@tempdima \@width\z@ \cr
+ \noalign{\global\ST at toadd=#1}\MRST at cr}
+\def\MRST at yargarraycr#1{%
+ \cr\noalign{\vskip #1\global\MRST at toadd=#1}\MRST at cr}
+\def\MRST at cr{%
+ \noalign{%
+ \ifnum\ST at pboxht<\ST at lineht
+ \global\advance\ST at pageleft -\ST at lineht
+ \global\ST at prevht\ST at lineht
+ \else
+ \global\advance\ST at pageleft -\ST at pboxht
+ \global\advance\ST at pageleft -0.1\ST at pboxht
+ \global\advance\ST at pageleft -\ST at stretchht
+ \global\ST at prevht\ST at pboxht
+ \global\ST at pboxht\z@
+ \fi
+ \global\advance\ST at pageleft -\ST at toadd
+ \global\ST at toadd=\z@}}
+}
+\def\STneed#1{\ifdim\ST at pageleft<#1\ST at newpage\ST at next\fi}
+}
+\ProcessOptions
+\newlength{\multirow at colwidth}
+\newcount\multirow at cnta
+\newcount\multirow at cntb
+\newlength\multirow at dima
+\def\multirow at setcolwidth#1{%
+ \ifx\TY at final\@undefined \multirow at colwidth=\hsize
+ \else
+ \ifx\TY at box\TY at box@v\multirow at colwidth=\hsize
+ \else \setbox0\hbox
+ {\let\\\space\let\newline\space #1}\multirow at colwidth=\wd0
+ \fi
+ \fi}
+\newcommand\multirowsetup{\raggedright}
+\long\def\multirow at vbox#1#2#3{\setbox0\vtop to \multirow at dima{#2%
+ \if #1t\relax\else\vfill\fi
+ \multirowsetup #3\if #1b\relax\else\vfill\fi}}
+%% \multirow [vpos] {nrows} [bigstruts] {width} [fixup] {text}
+\newcommand\multirow[2][c]{\@multirow[#1]{#2}}
+\def\@multirow[#1]#2{\@ifnextchar[{\@@multirow[#1]#2}{\@@multirow[#1]#2[0]}}
+\def\@@multirow[#1]#2[#3]#4{\@ifnextchar[{\@xmultirow[#1]{#2}[#3]{#4}}%
+ {\@xmultirow[#1]{#2}[#3]{#4}[0pt]}}
+\newif\ifmultirow at prefixt
+\newif\ifmultirow at prefixb
+\def\multirow at piii#1#2#3\end{\multirow at prefixtfalse\multirow at prefixbfalse
+ \if t#1\multirow at prefixttrue
+ \if b#2\multirow at prefixbtrue \multirow at cntb=#3%
+ \else \multirow at cntb=#2#3%
+ \fi
+ \else
+ \if b#1\multirow at prefixbtrue \multirow at cntb=#2#3%
+ \else \multirow at cntb=#1#2#3%
+ \fi
+ \fi}
+\def\@xmultirow[#1]#2[#3]#4[#5]#6{\multirow at cnta=#2%
+ \expandafter\multirow at piii#3\relax\end%
+ \multirow at dima=\multirow at cnta\ht\@arstrutbox
+ \advance\multirow at dima\multirow at cnta\dp\@arstrutbox
+ \ifnum\multirow at cnta<0\multirow at dima=-\multirow at dima\fi
+ \advance\multirow at dima \multirow at cntb\bigstrutjot
+ \if*#4\multirow at vbox{#1}{}{\hbox{\strut#6\strut}}%
+ \else \if=#4\multirow at setcolwidth{#6}%
+ \multirow at vbox{#1}{\hsize\multirow at colwidth\@parboxrestore}{\strut#6\strut\par}%
+ \else \multirow at vbox{#1}{\hsize#4\@parboxrestore}{\strut#6\strut\par}%
+ \fi \fi
+ \dp0=\z@
+ \ifnum\multirow at cnta>0
+ \if#1t\relax\multirow at dima=\ht0\else
+ \multirow at dima=\ht\@arstrutbox
+ \ifmultirow at prefixt \advance\multirow at dima\bigstrutjot\fi
+ \if#1b\relax \advance\multirow at dima\dp\@arstrutbox
+ \ifmultirow at prefixb \advance\multirow at dima\bigstrutjot\fi
+ \fi
+ \fi
+ \else
+ \if#1b\relax\else
+ \advance\multirow at dima-\dp\@arstrutbox
+ \ifmultirow at prefixb \advance\multirow at dima-\bigstrutjot\fi
+ \if#1t\relax\advance\multirow at dima-\ht\@arstrutbox
+ \ifmultirow at prefixt \advance\multirow at dima-\bigstrutjot\fi
+ \advance\multirow at dima\ht0
+ \fi
+ \fi
\fi
- \ht0\z@\dp0\z@
- \ifnum\@tempcnta<0\advance\@tempdima-\dp\@arstrutbox
- \else\@tempdima=\ht\@arstrutbox
- \ifnum#2>0 \advance\@tempdima\bigstrutjot \fi
- \fi
- \advance\@tempdima#4\relax\leavevmode\vtop{\vskip-\@tempdima\box0\vss}}
-\@ifundefined{bigstrutjot}{\newdimen\bigstrutjot \bigstrutjot\jot}{}
+ \advance\multirow at dima#5\relax
+ \leavevmode
+ \ifmultirowdebug\setbox0\vtop{\vskip-\multirow at dima\box0\vss}%
+ {\showboxdepth=5 \showboxbreadth=10 \showbox0}\box0
+ \else\vtop{\vskip-\multirow at dima\box0\vss}\fi
+}
+\@ifundefined{bigstrutjot}{\newdimen\bigstrutjot \bigstrutjot=\jot}{}
+\endinput
+%%
+%% End of file `multirow.sty'.
More information about the tex-live-commits
mailing list