From 01b14a20f8942ab0c52aeb8abffa85b811c7a95a Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Fri, 16 Jul 2021 03:01:07 +0000 Subject: CTAN sync 202107160301 --- macros/latex/contrib/stackengine/stackengine.sty | 61 ++++++++++++++---------- 1 file changed, 36 insertions(+), 25 deletions(-) (limited to 'macros/latex/contrib/stackengine/stackengine.sty') diff --git a/macros/latex/contrib/stackengine/stackengine.sty b/macros/latex/contrib/stackengine/stackengine.sty index e7b79fb04b..d99282df7d 100644 --- a/macros/latex/contrib/stackengine/stackengine.sty +++ b/macros/latex/contrib/stackengine/stackengine.sty @@ -1,6 +1,6 @@ -\def\stackengineversionnumber{v4.01} +\def\stackengineversionnumber{v4.1} \ProvidesPackage{stackengine} -[2017/02/13 \stackengineversionnumber\ +[2021/07/15 \stackengineversionnumber\ Stacking text and objects in convenient ways] % This work may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.3 @@ -78,6 +78,16 @@ % \setlength, which could also cause potential problems with the % calc package. % -Changed \global\def to \gdef and \global\edef to \xdef. +% V4.1 -Removed \widthof type measurements in \stackinset and +% \stackengine, instead setting things in saveboxes from the +% outset and using \wd, thereby only setting stacked content +% once. This is helpful for speed and also if counters are +% present in arguments, which are now incremented only once. +% -Save and restore counter entering/exiting \@stack, which +% favorably resolves issue of nesting for multi-row stacks. +% -Introduce \lstackMath and \lstackText as local versions of +% \stackMath and \stackText (which are global). +% -Eliminated \usestackstrut (became internal \@usestackstrut) \RequirePackage{etoolbox} \RequirePackage{listofitems}% REQUIRES listofitems.sty AND listofitems.tex \usepackage{calc} @@ -91,6 +101,8 @@ \newlength\@stackedboxwidth \newsavebox\@addedbox \newsavebox\@anchorbox +\newsavebox\@insetbox +\newsavebox\@backgroundbox \newsavebox\stackedbox \newsavebox{\@centerbox} \newcounter{ROWcellindex@} @@ -113,7 +125,7 @@ \newcommand\@readMANYrows[1]{% \expandafter\setsepchar\expandafter{\SEP@char}% \readlist*\stack@arg{#1}% - \xdef\stackengine@args{\stack@arglen}% + \edef\stackengine@args{\stack@arglen}% } %%%%% @@ -162,18 +174,17 @@ \def\stacktype{S}% S for constant gap shortstack; % L for constant baselineskip longstack -% DEPRECATED USAGE \def\usestackstrut{}; INSTEAD USE \strutshortanchors{} -%\def\usestackstrut{T} - %%%%% MODES \newcommand\stackMath{\gdef\stack@delim{$}} \newcommand\stackText{\gdef\stack@delim{}} +\newcommand\lstackMath{\def\stack@delim{$}} +\newcommand\lstackText{\def\stack@delim{}} \stackText \newcommand\strutlongstacks[1]{\def\@strutlongstacks{#1}} \strutlongstacks{F} -\newcommand\strutshortanchors[1]{\def\usestackstrut{#1}} +\newcommand\strutshortanchors[1]{\def\@usestackstrut{#1}} \strutshortanchors{T} %%%%% MACROS @@ -192,10 +203,10 @@ \sbox{\stackedbox}{% \sbox{\@anchorbox}{\@STRT\stack@delim#2\stack@delim}% \sbox{\@addedbox}{\@STRT\stack@delim#3\stack@delim}% - \settowidth{\@stackedboxwidth}{\@STRT\stack@delim#2\stack@delim}% + \setlength{\@stackedboxwidth}{\wd\@anchorbox}% \if F#7% \ifdim\wd\@addedbox>\@stackedboxwidth% - \settowidth{\@stackedboxwidth}{\stack@delim\@STRT#3\stack@delim}% + \setlength{\@stackedboxwidth}{\wd\@addedbox}% \fi% \fi% \setlength{\@boxshift}{#1}% @@ -216,14 +227,14 @@ \usebox{\@anchorbox}% \hspace{-.5\wd\@anchorbox}% \hspace{-.5\wd\@addedbox}% - \raisebox{\@boxshift}{\@STRT\stack@delim#3\stack@delim}% + \raisebox{\@boxshift}{\usebox{\@addedbox}}% \hspace{-.5\wd\@addedbox}% \hspace{.5\@stackedboxwidth}% \else% \if l#5% \usebox{\@anchorbox}% \hspace{-\wd\@anchorbox}% - \raisebox{\@boxshift}{\@STRT\stack@delim#3\stack@delim}% + \raisebox{\@boxshift}{\usebox{\@addedbox}}% \hspace{-\wd\@addedbox}% \hspace{\@stackedboxwidth}% \else% @@ -232,7 +243,7 @@ \hspace{-\wd\@anchorbox}% \usebox{\@anchorbox}% \hspace{-\wd\@addedbox}% - \raisebox{\@boxshift}{\@STRT\stack@delim#3\stack@delim}% + \raisebox{\@boxshift}{\usebox{\@addedbox}}% \fi% \fi% \fi% @@ -255,6 +266,7 @@ \newcommand*\Longunderstack[2][\stackalignment]{\@stack{#1}{#2}{U}{L}} \newcommand*\@stack[4]{% + \edef\sv@stackindex{\the@stackindex}% \bgroup% SO AS NOT TO INTERFERE WITH loi's \setsepchar \@readMANYrows{#2}% \if U#3% @@ -286,6 +298,7 @@ }% \if F\quietstack\usebox{\stackedbox}\fi% \egroup% + \setcounter{@stackindex}{\sv@stackindex}% } % PERHAPS THESE SIX MACROS CAN BE REPLACED BY \toplap AND \bottomlap @@ -312,12 +325,12 @@ \newcommand*\stackanchor[3][\stackgap]{% \setlength{\stack@tmplength}{#1}% \setlength{\stack@tmplength}{.5\stack@tmplength}% - \if T\usestackstrut% + \if T\@usestackstrut% \if S\stacktype\addtolength{\stack@tmplength}% {.5\ht\strutbox-.5\dp\strutbox}\fi% \fi% \stackengine{\stack@tmplength}{}{#2}{O}{\stackalignment}{T}{F}{\stacktype}% - \if T\usestackstrut% + \if T\@usestackstrut% \if S\stacktype\addtolength{\stack@tmplength}% {-\ht\strutbox+\dp\strutbox}\fi% \fi% @@ -350,28 +363,26 @@ %\stackinset{l/c/r}{x}{b/c/t}{y}{inset}{anchor} \newcommand*\stackinset[6]{% - \def\conditioned@inset{\stack@delim#5\stack@delim}% - \def\conditioned@anchor{\stack@delim#6\stack@delim}% + \sbox\@backgroundbox{\stack@delim#6\stack@delim}% + \sbox\@insetbox{\stack@delim#5\stack@delim}% \ifstrequal{#4}{}% {\setlength{\stack@tmplength}{0pt}}% {\setlength{\stack@tmplength}{#4}}% \if c#3% - \setlength{\temp@stkl}{% - \heightof{\conditioned@anchor}+\depthof{\conditioned@anchor}% - -\heightof{\conditioned@inset}-\depthof{\conditioned@inset}}% + \setlength{\temp@stkl}{\ht\@backgroundbox+\dp\@backgroundbox% + -\ht\@insetbox-\dp\@insetbox}% \addtolength{\stack@tmplength}{.5\temp@stkl}% \fi% \ifstrequal{#2}{}{\def\stack@tmp{0pt}}{\def\stack@tmp{#2}}% \def\stack@lroffset{\rule{\stack@tmp}{0pt}}% - \addtolength{\stack@tmplength}{% - \heightof{\conditioned@inset}+\depthof{\conditioned@inset}}% + \addtolength{\stack@tmplength}{\ht\@insetbox+\dp\@insetbox}% \if c#1% - \def\conditioned@inset{\stack@lroffset\stack@lroffset#5}% + \def\conditioned@inset{\stack@lroffset\stack@lroffset\usebox{\@insetbox}}% \else% - \def\conditioned@inset{\stack@lroffset#5\stack@lroffset}% + \def\conditioned@inset{\stack@lroffset\usebox{\@insetbox}\stack@lroffset}% \fi% - \stackengine{-\stack@tmplength}{#6}{\conditioned@inset}% - {\inset@valign{#3}}{#1}{\quietstack}{T}{S}% + \stackengine{-\stack@tmplength}{\usebox{\@backgroundbox}}% + {\conditioned@inset}{\inset@valign{#3}}{#1}{\quietstack}{T}{S}% } \def\inset@valign#1{\if t#1O\else U\fi} -- cgit v1.2.3