summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/tools/array.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/tools/array.dtx')
-rw-r--r--Master/texmf-dist/source/latex/tools/array.dtx24
1 files changed, 16 insertions, 8 deletions
diff --git a/Master/texmf-dist/source/latex/tools/array.dtx b/Master/texmf-dist/source/latex/tools/array.dtx
index e31656c5e07..2a648888065 100644
--- a/Master/texmf-dist/source/latex/tools/array.dtx
+++ b/Master/texmf-dist/source/latex/tools/array.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 1993-2014
+% Copyright 1993-2016
%
% The LaTeX3 Project and any individual authors listed elsewhere
% in this file.
@@ -26,7 +26,7 @@
%% Copyright (C) 1989-1998 Frank Mittelbach, all rights reserved.
%<+package>\NeedsTeXFormat{LaTeX2e}[1995/06/01]
%<+package>\ProvidesPackage{array}
-%<+package> [2014/10/28 v2.4c Tabular extension package (FMi)]
+%<+package> [2016/10/06 v2.4d Tabular extension package (FMi)]
%
% \fi
%
@@ -2126,10 +2126,15 @@
% \begin{macro}{\@halignto}
% \begin{macro}{\d@llarbegin}
% \begin{macro}{\d@llarend}
-% In order to relieve the \textsf{save stack} we assign the
-% replacement texts for =\@halignto= globally. =\d@llar= has to be
-% local since otherwise nested \textsf{tabular} and \textsf{array}
+% =\d@llar= has to be
+% locally asigned since otherwise nested \textsf{tabular} and \textsf{array}
% environments (via =\multicolumn=) are impossible.
+% For 25 years or so =\@halignto= was set globally (to save space on the
+% save stack, but that was a mistake: if there is a tabular in the
+% output routine (e.g., in the running header) then that tabular is
+% able overwrite the =\@halignto=
+% setting of a tabular in the main text resulting in a very weird error.
+% \changes{v2.4d}{2016/10/06}{\cs{@halignto} set locally (pr/4488)}
% \changes{v2.0g}{1992/06/18}{`d@llarbegin defined on toplevel.}
% When the new font selection scheme is in force we have to
% we surround all =\halign= entries
@@ -2151,9 +2156,10 @@
% \begin{macro}{\array}
% Our new definition of =\array= then reads:
% \changes{v2.0d}{1990/08/20}{`d@llar local to preamble.}
+% \changes{v2.4d}{2016/10/06}{\cs{@halignto} set locally (pr/4488)}
% \begin{macrocode}
\def\array{\col@sep\arraycolsep
- \def\d@llarbegin{$}\let\d@llarend\d@llarbegin\gdef\@halignto{}%
+ \def\d@llarbegin{$}\let\d@llarend\d@llarbegin\def\@halignto{}%
% \end{macrocode}
% Since there might be an optional argument we call another
% macro which is also used by the other environments.
@@ -2176,18 +2182,20 @@
% The environments \textsf{tabular} and \textsf{tabular$*$} differ
% only in the initialisation of the command =\@halignto=. Therefore
% we define
+% \changes{v2.4d}{2016/10/06}{\cs{@halignto} set locally (pr/4488)}
% \begin{macrocode}
-\def\tabular{\gdef\@halignto{}\@tabular}
+\def\tabular{\def\@halignto{}\@tabular}
% \end{macrocode}
% and analogously for the star form. We evaluate the argument first
% using =\setlength= so that users of the \texttt{calc} package can
% write code like\\ =\begin{tabular*}{(\columnwidth-1cm)/2}...=
% \changes{v2.3l}{1998/05/13}{Use \cs{setlength} evaluate arg
% so that the calc package can be applied here (pr/2793)}
+% \changes{v2.4d}{2016/10/06}{\cs{@halignto} set locally (pr/4488)}
% \begin{macrocode}
\expandafter\def\csname tabular*\endcsname#1{%
\setlength\dimen@{#1}%
- \xdef\@halignto{to\the\dimen@}\@tabular}
+ \edef\@halignto{to\the\dimen@}\@tabular}
% \end{macrocode}
% \end{macro}
% \end{macro}