%PDF- %PDF-
| Direktori : /data/old/usr/share/texlive/texmf-dist/doc/latex/ltabptch/ |
| Current File : //data/old/usr/share/texlive/texmf-dist/doc/latex/ltabptch/ltabptch.tex |
\documentclass[DIV=9, parskip=half, pagesize=auto]{scrartcl}
\usepackage{fixltx2e}
\usepackage{etex}
\usepackage{xspace}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage{textcomp}
\usepackage[utf8]{inputenc}
\usepackage{array}
\usepackage{microtype}
\usepackage{hyperref}
\newcommand*{\pkg}[1]{\textsf{#1}}
\newcommand*{\cs}[1]{\texttt{\textbackslash#1}}
\makeatletter
\newcommand*{\cmd}[1]{\cs{\expandafter\@gobble\string#1}}
\makeatother
\newcommand*{\env}[1]{\texttt{#1}}
\newcommand*{\meta}[1]{\textlangle\textsl{#1}\textrangle}
\addtokomafont{title}{\rmfamily}
\title{The \pkg{ltabptch} package\thanks{This manual corresponds to \pkg{ltabptch}~v1.74d, dated~2005/01/10.}}
\subtitle{patch for \pkg{Longtable}}
\author{Uwe Lück}
\date{2005/01/10}
\begin{document}
\maketitle
For David Carlisle's \pkg{Longtable.sty}, version 4.11 \\
Fixes \texttt{tools/3180} (Sebastian Rahtz) and \texttt{tools/3485}:
missing/wrong interline glues above/below table.
\begin{quote}
\small
Copyright \textcopyright\ 2002--2004 Uwe Lück,
\url{http://www.contact-ednotes.sty.de.vu}.
Usage, no warranty, distribution as in \texttt{lppl.txt} on CTAN
(\href{http://www.ctan.org/pub/tex-archive/macros/latex/base/lppl.txt}{\texttt{macros\slash latex\slash base\slash lppl.txt}}).
\end{quote}
\minisec{The problem(s):}
\renewcommand*{\labelenumi}{(\theenumi)}
Sebastian Rahtz (\texttt{tools/3180}) observed 2000/03/05 that there be
a ``spurios blank line'' below the \env{longtable}. This impression
may have been due to two spacing problems:
%
\begin{enumerate}
\item There is \cmd{\parskip} and some interline glue below \env{longtable},
while there is no \cmd{\parskip} and no interline glue above
(without head as specified by \cmd{\endhead} or \cmd{\firstendhead})
or just \cmd{\lineskip} 0.0\,pt (with head---\cmd{\endhead}, \cmd{\endfirsthead}).
\item After \env{longtable}, \cmd{\prevdepth} is the depth of the last line
before the \env{longtable} (if there is no head) or the depth of the
head (otherwise). So \cmd{\prevdepth} may be 0\,pt. By contrast, the
last table row has depth of at least \verb+\dp\@arstrutbox+---which
should rather matter, and this is 3.6\,pt or more.
\end{enumerate}
%
---\,I have reported something like this as \texttt{tools/3485}, not
entirely correctly. Details are presented below.
\minisec{Solution presented:}
\begin{enumerate}
\item I think there should be \cmd{\parskip} and usual interline glue
above, since the same would happen with a table in a center
environment (e.\,g.)\@.
\cmd{\noindent} seems to work fatally; moreover, \cmd{\LT@start}'s decision
whether to enter a new page would ignore \cmd{\parskip} and interline
glue still needed.
So emulate interline glue calculation according to \TeX book~p.~80
and add it by \cmd{\vskip}, along with \cmd{\parskip}.
(This is rather a hack---a proper correction should perhaps not
``emulate'' but place the interlineglue changes of \cmd{\LT@array} inside
the \cmd{\vbox} \cmd{\LT@bchunk} starts and treat glue between chunks in a
new way.)
\item Set \cmd{\prevdepth} to depth of box~0 before the latter is
\cmd{\unvbox}'ed (which leaves \cmd{\prevdepth} untouched, \TeX book~p.~ 282)
in \cmd{\endlongtable}.
\end{enumerate}
%
I thought David Carlisle would change \pkg{Longtable} according to my
suggestions. By e-mail from 2003/04/07 however, he finds it
better not to change \pkg{Longtable}, in order not to change layouts
of works that have been made using \pkg{Longtable} so far
(e-Mail 2003/04/08).
\minisec{By the way:}
\renewcommand*{\labelenumi}{\theenumi.)}
\begin{enumerate}
\item There are two successive lines in the \pkg{Longtable} code (v4.11)
together saying:
%
\begin{verbatim}
\prevdepth\z@\global
\global\let\LT@setprevdepth\relax
\end{verbatim}
%
Isn't the first \cmd{\global} just a typo?
--Yes--this is David Carlisle's answer in his e-mail
dating from 2004/05/14.
\item Couldn't the one-column restriction easily be removed
by using \cmd{\columnwidth} instead of \cmd{\hsize}?
\end{enumerate}
\minisec{Detailed diagnosis:}
\renewcommand*{\theenumi}{(\Alph{enumi})}
\renewcommand*{\labelenumi}{\theenumi}
Concerning the question of ``bugs'' vs.\ ``features'', you might
reason what features should be aimed at.
%
\begin{enumerate}
\item \label{item:A} If there is \cmd{\parskip} below a \env{longtable}, there should
be \cmd{\parskip} above as well--shouldn't it?
\item \label{item:B} Interline glue above should (in general) depend on the
same values of \cmd{\base\-line\-skip} and \cmd{\lineskip} as below---OK?
\item \label{item:C} Interline glue below a \env{longtable} should depend on the
depth of the last row, not on the depth of the head or of the
last line above the \env{longtable}--OK?
\end{enumerate}
%
The recent versions of \pkg{longtable.sty} have not satisfied any
of these three demands.
Concerning~\ref{item:A}, \cmd{\parskip} appears below the \env{longtable}, but not
above.
Concerning~\ref{item:B}, (i)~no interline glue appears above if there
is no head, (ii)~otherwise, only zero interline glue appears.
Concerning~\ref{item:C}, the interline glue below the \env{longtable} is
calculated using the depth of (i)~the last line above the
\env{longtable} as \cmd{\prevdepth} when there is no head or of (ii)~the
head otherwise. (Thus I was wrong earlier when I claimed that
\cmd{\prevdepth} were 0\,pt after \env{longtable}. This only holds in the
previous case (i)~when the last line above the \env{longtable} has
zero depth.)
You can observe this by playing with the demonstration file
\texttt{ltabptch.tex} in CTAN folder \href{http://www.ctan.org/pub/tex-archive/macros/latex/contrib/ltabptch/}{\texttt{macros/latex/contrib/ltabptch}}.
Reasons: For contributing a head to the main vertical list,
\env{longtable} uses \cmd{\copy} or \cmd{\box}, which yields a \meta{box} according
to \TeX book~p.~278. Rows are contributed by \cmd{\unvbox}. Now,
violation of~\ref{item:A} is due to the fact that neither \cmd{\copy} or
\cmd{\box} of the head nor the \cmd{\unvbox} for table rows leads to
execution of an \cmd{\indent} or \cmd{\noindent} (\TeX book~pp.~282\,f.,\ see
also \meta{horizontal command}).
Violation of~\ref{item:B} is due either to (i)~the fact that \cmd{\unvbox}
is no \meta{box} (\TeX book~p.~282/278) or to (ii)~the fact that at
\cmd{\copy} or \cmd{\box} \cmd{\baselineskip} and \cmd{\lineskip} are 0\,pt.
Violation of~\ref{item:C} is due to the fact that \cmd{\unvbox} does not
change \cmd{\prevdepth} (\TeX book~p.~282).
As to recognizable effects:
%
\begin{itemize}
\item Violation of~\ref{item:A}, of course, has very little effect in
general since \cmd{\parskip} is \texttt{0pt plus 1pt} usually. This is hardly
recognizable in the presence of the \cmd{\bigskipamount} above and
below a \env{longtable}.
\item Violation of~\ref{item:B} results in missing appropriate interline
glue above, which often should be 3.6\,pt or more. This may
rather be recognizable and may contribute to the impression
that there even is a spurious blank line below the \env{longtable}
(this is what Sebastion Rahtz reported in \texttt{tools/3180}).
\item For the previous as well as for the details and the
effects of violation of~\ref{item:C}, consider the algorithm for
calculating interline glue on p.~80 of the \TeX book. If there
is no head, and the depth of the last line before the
\env{longtable} is 0\,pt, the interline glue below the \env{longtable} is
\cmd{\baselineskip} minus the height of the first line after the
\env{longtable}. The interline glue \emph{should be} \cmd{\baselineskip} minus
height of following line \emph{minus} depth of last table row--if
this depth is not too large (depending on \cmd{\lineskiplimit}).
This depth is at least 3.6\,pt. So the interline glue is often
by 3.6\,pt or more greater than is appropriate. Considering the
missing interline glue above the \env{longtable} and the \cmd{\parskip}
below, the glue after the \env{longtable} is by 6.2\,pt (or more) plus
1\,pt larger than the glue before. Due to the shrink component
of the surrounding \cmd{\bigskipamount}, the glue following the
\env{longtable} may be nearly twice as large as the glue before.
---\,Usually, violation of~\ref{item:C} has no effect at all. Namely,
there is a head usually, and its depth is usually the same as
the depth of the last row, namely \verb+\dp\@arstrutbox+.
\end{itemize}
\minisec{Version history:}
\begin{tabular}{@{}lr>{\raggedright\arraybackslash}p{93mm}@{}}
v1.7 & 2003/01/07 & Sent around 2003/01/13 with first release of \pkg{ednotes.sty}. Sent to David Carlisle. Earlier versions were sent to Frank Mittelbach and the team. \\
v1.71 & 2003/01/22 & Added version history. \\
v1.72 & 2003/01/27 & Changed copyright notice. \\
v1.73 & 2004/05/13 & Adapted to \pkg{Longtable}~v4.11; new copyright; \pkg{longtable} $\to$ \pkg{Longtable} (selectively). Added `I have \ldots \texttt{3485}'. \\
v1.74 & 2004/08/05 & Added `---Yes---\ldots'. \\
& 2004/08/21 & Typo fix for `problem'; added report on 2003/04/08. \\
& 2004/08/23 & Corrected and extended diagnosis, sent to CTAN. \\
v1.74b & \ldots/08/23 & `---' $\to$ `--'; added that~\ref{item:C} usually doesn't matter. \\
v1.74c & \ldots/08/31 & `author-maintained'. \\
v1.74d & 2005/01/10 & Contact via \textsc{http}.
\end{tabular}
\end{document}