summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/wrapfig2/wrapfig2.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-12-27 21:15:01 +0000
committerKarl Berry <karl@freefriends.org>2021-12-27 21:15:01 +0000
commit9cdce20e7cb3a162be11edf1cb40ce012be4dd05 (patch)
tree1378ac22ebb928f2e5d65eac34e4f56e0dab31db /Master/texmf-dist/tex/latex/wrapfig2/wrapfig2.sty
parent2015172080d3ff94e1864fbb9643340525d1027b (diff)
wrapfig2 (27dec21)
git-svn-id: svn://tug.org/texlive/trunk@61423 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/wrapfig2/wrapfig2.sty')
-rw-r--r--Master/texmf-dist/tex/latex/wrapfig2/wrapfig2.sty480
1 files changed, 480 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/wrapfig2/wrapfig2.sty b/Master/texmf-dist/tex/latex/wrapfig2/wrapfig2.sty
new file mode 100644
index 00000000000..94ac12506de
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/wrapfig2/wrapfig2.sty
@@ -0,0 +1,480 @@
+%%
+%% This is file `wrapfig2.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% wrapfig2.dtx (with options: `package')
+%%
+%% Copyright (C) 1991-2003 by Donald Arseneau (asnd@triumf.ca)
+%% Copyright (C) 2021 by Claudio Beccari (claudio.beccari@gmail.com)
+%% License information appended
+%%
+\NeedsTeXFormat{LaTeX2e}[2019/01/01]
+\ProvidesPackage{wrapfig2}%
+ [2021-12-21 v.4.0 Wrapfig extended]
+
+\NeedsTeXFormat{LaTeX2e}[2020-01-01]
+\ProvidesPackage{wrapfig2}%
+ [2021-11-30 v.4.0 Wrap text around figures, tables, framed text blocks]
+\@ifpackageloaded{etoolbox}{}{\RequirePackage{etoolbox}}
+\ifcsdef{c@WF@wrappedlines}{\endinput}{}
+\ifcsdef{fpeval}{}{\RequirePackage{xfp}}
+\RequirePackage{xparse}
+
+\newdimen\wrapoverhang \wrapoverhang\z@
+\newdimen\WF@size
+\newcounter{WF@wrappedlines}
+\newbox\WF@box
+\newbox\NWF@box
+\newtoks\WF@everypar
+\newif\ifWF@float
+\newcount\WF@correctlines@switch
+\newdimen\insertwidth
+\let\@@parshape\parshape
+\let\WF@@everypar\everypar
+
+\NewDocumentEnvironment{wrapfigure}{o m o G{0pt}}%
+ {\wrapfloat{figure}[#1]{#2}[#3]{#4}}%
+ {\endwrapfloat}
+
+\NewDocumentEnvironment{wraptable}{o m o G{0pt}}%
+ {\wrapfloat{table}[#1]{#2}[#3]{#4}}%
+ {\endwrapfloat}
+
+\NewDocumentEnvironment{wraptext}%
+ {O{l} D||{0.5\columnwidth} D<>{0} D(){figure}}%
+{% Open environment
+ \insertwidth=#2\relax
+ \def\textplacement{#1}%
+ \def\textcorrection{#3}%
+ \def\WF@caption@label{#4}%
+ \begin{lrbox}\NWF@box% This box is to contain the framed text
+ \minipage{\insertwidth}%
+ \tcolorbox
+}{% Close environment
+ \endtcolorbox\endminipage\end{lrbox}%
+ \edef\NWF@wli% \NWF@wli is a macro, not a counter
+ {%
+ \fpeval{%
+ round((\ht\NWF@box+\dp\NWF@box)/\baselineskip,0)+2+\textcorrection
+ }%
+ }%
+ \ifhmode\unskip\else\leavevmode\noindent\fi
+ \bgroup\edef\x{\egroup\noexpand\wrapfloat{\WF@caption@label}[\NWF@wli]%
+ {\textplacement}{\the\insertwidth}}\x
+ \box\NWF@box % Output framed box containing text
+ \endwrapfloat
+ \ignorespaces
+}
+
+
+\NewDocumentEnvironment{wrapfloat}{m o m o G{\z@}}%
+ {\def\@captype{#1}\WF@wr[#2]{#3}[#4]{#5}}%
+ {\ifdim\hsize>\z@
+ \par\hrule\@width\hsize\@height\z@ % force width with invisible rule
+ \else
+ \unskip \egroup \box\z@ % or close hbox
+ \fi
+ \egroup % close the vtop box; its width now is known
+ \WF@floatstyhook % support for float.sty
+ \def\width{\wd\WF@box}%
+ \setlength\wrapoverhang{\WF@ovh}%
+ \xdef\WF@ovh{\the\wrapoverhang}% save until wrapping
+ \ifdim\ht\WF@box>\topskip \ht\WF@box\z@ \fi% too high, set flag
+ \ifdim\ht\WF@box<.5\p@ % too short, move up
+ \global\setbox\WF@box\vtop{\vskip-1.4ex\unvbox\WF@box}%
+ \fi
+ \global\WF@size=% compute total box hight with \fpeval
+ \fpeval{\ht\WF@box+\dp\WF@box+1.5\baselineskip+\tw@\intextsep}\p@
+ \aftergroup\WF@startfloating % use even when not really floating
+ \unless\ifWF@float
+ \ifhmode
+ {\unskip \parfillskip\z@skip \par \vskip-\parskip}%
+ \aftergroup\noindent
+ \fi
+ \fi
+ \global\@ignoretrue
+ }
+
+\NewDocumentCommand\WF@wr{o m o m s}{%
+ \xdef\WF@wfname{wrap\@captype\space}%
+ \unless\ifvoid\WF@box
+ \WFclear \WF@collision
+ \fi
+ \xdef\WF@place{\string`\@car#2r\@nil}%
+ \ifnum\lccode\WF@place=\WF@place
+ \global\WF@floatfalse
+ \else
+ \global\WF@floattrue
+ \fi
+ \ifx\parshape\WF@fudgeparshape
+ \unless\ifWF@float\\WF@collision\fi
+ \else
+ \ifx\par\@@par
+ \ifnum\@@parshape>\z@\WF@conflict\fi
+ \else
+ \WF@conflict
+ \fi
+ \fi
+ \IfValueTF{#1}% save optional line number or correction
+ {\gdef\WF@wli{#1}}%
+ {\gdef\WF@wli{0}}%
+ \IfValueTF{#3}% save optional overhang
+ {\gdef\WF@ovh{#3}}%
+ {\gdef\WF@ovh{\z@}}%
+ \global\setbox\WF@box\vtop\bgroup \setlength\hsize{#4}% set width
+ \ifdim\hsize>\z@
+ \@parboxrestore
+ \else
+ \setbox\z@\hbox\bgroup
+ \let\wf@@caption\caption
+ \let\caption\wf@caption
+ \ignorespaces
+ \fi
+ \IfBooleanTF{#5}% if the asterisk is present set the numerical switch
+ {\global\WF@correctlines@switch=\@ne}%
+ {\global\WF@correctlines@switch=\z@}%
+ \global\@ignoretrue
+}
+
+\def\wf@caption{\relax% redefine \wf@caption in case \hsize is zero
+ \ifdim\hsize>\z@
+ \let\caption\wf@@caption
+ \else
+ \unskip \egroup \hsize\wd\z@ \@parboxrestore \box\z@% empty \box0
+ \fi
+ \caption
+}
+
+\def\WF@startfloating{%
+ \WF@everypar\expandafter{\the\everypar}\let\everypar\WF@everypar
+ \WF@@everypar{\ifvoid\WF@box\else\WF@floathand\fi \the\everypar
+ \WF@wraphand
+}}
+
+\def\WF@floathand{%
+ \ifx\parshape\WF@fudgeparshape
+ \WF@fltmes
+ \else
+ \ifx\par\@@par
+ \ifnum\@@parshape=\z@
+ \ifdim\hangindent=\z@
+ \setbox\z@\lastbox \begingroup
+ \@@par \WF@@everypar{}\WF@putfigmaybe
+ \endgroup % after this group start wrapping
+ \unless\ifvoid\z@ % replace indentation
+ \box\z@
+ \fi
+ \else
+ \WF@fltmes
+ \fi
+ \else
+ \WF@fltmes
+ \fi
+ \else
+ \WF@fltmes
+ \fi
+ \fi}
+
+\def\WF@putfigmaybe{%
+\ifinner
+ \vskip-\parskip \global\WF@floatfalse
+ \let\pagetotal\maxdimen % kludge flag for "not top of page"
+\else % outer page
+ \@tempdima\pagedepth % save page depth
+ {\advance\parskip\@tempdima\vskip-\parskip}% back up to base line
+ \penalty\interlinepenalty % update page parameters
+ \@tempdimb\pagegoal \advance\@tempdimb-\pagetotal % room left on page
+ \ifdim \@tempdimb<\z@ % page already full
+ \global\WF@floatfalse
+ \unless\ifdim-\@tempdimb>\pageshrink
+ \pagebreak
+ \fi
+ \else
+ \ifdim\WF@size>\@tempdimb% box too high does not fit in \@tempdimb
+ \ifWF@float
+ \dimen@.5\baselineskip
+ \else
+ \dimen@ 2\baselineskip
+ \fi
+ \ifdim\pagestretch>\dimen@ \dimen@\pagestretch \fi
+ \ifdim\pagefilstretch>\z@ \dimen@\@tempdimb \fi
+ \ifdim\pagefillstretch>\z@ \dimen@\@tempdimb \fi
+ \advance\dimen@.5\baselineskip
+ \ifdim\dimen@>\@tempdimb % stretch page contents
+ \global\WF@floatfalse \pagebreak
+ \fi
+ \else % box fits in \@tempdimb
+ \global\WF@floatfalse
+ \fi
+ \fi
+ \vskip\@tempdima\relax % return erased page depth
+\fi
+\noindent
+\ifWF@float
+ \WF@fltmes
+\else % place insertion here
+ \WF@info{Put \WF@wfname here:}%
+ {\ifodd
+ \if@twoside\c@page\else\@ne\fi % assign l/r to i/o placement
+ \lccode`i`l\lccode`o`r\else \lccode`i`r\lccode`o`l%
+ \fi
+ \xdef\WF@place{\the\lccode\lccode\WF@place}%
+ }% twice to get only l or r
+ \hbox to\z@{% llap o rlap depending on lor r; calc effective width
+ \@tempdima\wd\WF@box \@tempdimb\WF@ovh
+ \advance\@tempdima-\@tempdimb \advance\@tempdima\columnsep
+ \@tempdimb\hsize \advance\@tempdimb-\@tempdima
+ \xdef\WF@adjlw{\the\@tempdima}%
+ \ifnum `l=\WF@place % object on left
+ \hss
+ \def\@tempa{\kern\columnsep}% take right gap into action
+ \else % insert on light
+ \@tempdima\z@ % no left indentation
+ \kern\@tempdimb \kern\columnsep
+ \def\@tempa{\hss}% object overlaps space to the right
+ \fi
+ \ifdim\@tempdimb<\hsize
+ \xdef\WF@wrapil{\the\@tempdima \the\@tempdimb}% indent.n and length
+ \xdef\WF@adjtlm{\the\@tempdima}%
+ \else
+ \xdef\WF@wrapil{\z@ \the\hsize}%
+ \xdef\WF@adjlw{\z@}\xdef\WF@adjtlm{\z@}%
+ \fi
+ \ifdim\pagetotal=\z@ % put object at top of page \thepage
+ \global\advance\WF@size-\intextsep
+ \else % put object in middle of the page
+ \setbox\WF@box\hbox{\lower\intextsep\box\WF@box}%
+ \fi
+ \dp\WF@box\z@
+ \box\WF@box
+ \@tempa
+ }% end \hbox to 0pt
+ \aftergroup\WF@startwrapping
+\fi
+}
+
+\def\WF@startwrapping{%
+ \ifnum\WF@wli=\z@ % no number was specified
+ \setcounter{WF@wrappedlines}%
+ {\fpeval{round(\WF@size/\baselineskip,0)}}%
+ \xdef\WF@wli{\value{WF@wrappedlines}}%
+ \else
+ \ifnum\WF@correctlines@switch>\z@ % line number correction
+ \setcounter{WF@wrappedlines}
+ {\fpeval{round((\WF@size)/\baselineskip,0)+\WF@wli}}%
+ \xdef\WF@wli{\value{WF@wrappedlines}}%
+ \else
+ \setcounter{WF@wrappedlines}{\WF@wli}% absolute number of lines
+ \global\advance\c@WF@wrappedlines\@ne
+ \fi
+ \fi
+ \ifnum\c@WF@wrappedlines>\@ne % fine tuning
+ \let\parshape\WF@fudgeparshape \let\WF@pspars\@empty \let\WF@@par\par
+ \def\@setpar##1{\def\WF@@par{##1}}\def\par{\@par}\let\@par\WF@mypar
+ \xdef\WF@restoretol{\tolerance\the\tolerance}\tolerance9999
+ \advance\linewidth-\WF@adjlw \advance\@totalleftmargin\WF@adjtlm
+ \fi}
+
+\def\WF@wraphand{% for indenting one or more paragraphs
+ \ifnum\c@WF@wrappedlines<\tw@
+ \WF@finale
+ \else \begingroup % create a parshape command
+ \@tempcnta\@ne \let\WF@wrapil\relax \gdef\WF@ps{}%
+ \@whilenum
+ \@tempcnta<\c@WF@wrappedlines\do{% repeated indentation
+ \xdef\WF@ps{\WF@ps\WF@wrapil}\advance\@tempcnta\@ne
+ }%
+ \endgroup
+ \ifx\WF@pspars\@empty
+ \@@parshape\c@WF@wrappedlines \WF@ps \WF@noil
+ \else % use external `parshape' values to modify my parshape
+ \WF@modps
+ \fi
+ \fi
+}
+
+\def\WF@mypar{\relax
+ \WF@@par
+ \ifnum\@@parshape=\z@
+ \let\WF@pspars\@empty % reset parshape
+ \fi
+ \global\advance\c@WF@wrappedlines-\prevgraf \prevgraf\z@
+ \ifnum\c@WF@wrappedlines<\tw@
+ \WF@finale
+ \fi
+}
+
+\def\WF@modps{\begingroup
+ \afterassignment\@tempdimb \@tempdima\WF@pspars % a=indent.num, b= width
+ \advance\@tempdima-\WF@adjtlm \advance\@tempdimb\WF@adjlw
+ \let\WF@wrapil\WF@pspars
+ \edef\@tempb{\@@parshape\c@WF@wrappedlines
+ \WF@ps \the\@tempdima \the\@tempdimb}%
+ \expandafter\endgroup\@tempb
+}
+
+\let\@@setpar\@setpar
+\def\WF@noil{\z@ \hsize}
+\let\WF@pspars\@empty
+
+\def\WF@fudgeparshape{\relax
+ \ifnum\c@WF@wrappedlines<\tw@
+ \WF@finale
+ \else
+ \afterassignment\WF@fudgeparshapee \fam
+ \fi
+}
+
+\def\WF@fudgeparshapee{%
+ \ifnum\fam=\@ne \expandafter
+ \WF@parshapeee
+ \else
+ \WF@conflict \@@parshape\fam
+ \fi
+}
+
+\def\WF@parshapeee#1#2{%
+ \begingroup\delimitershortfall#1%
+ \nulldelimiterspace#2% \advance \nulldelimiterspace by \WF@adjlw
+ \edef\@tempa{\def\noexpand\WF@pspars{%
+ \the\delimitershortfall \the\nulldelimiterspace}}%
+ \expandafter\endgroup\@tempa \WF@wraphand
+}
+
+\def\WF@finale{%
+ \ifx\parshape\WF@fudgeparshape
+ \WF@restoretol \let\@setpar\@@setpar \let\par\WF@@par
+ \advance\linewidth\WF@adjlw \advance\@totalleftmargin-\WF@adjtlm
+ \WF@info{Finish wrapping text}%
+ \ifx\par\@@par
+ \def\@par{\let\par\@@par\par}%
+ \else
+ \let\@par\WF@@par
+ \fi
+ \let\parshape\@@parshape
+ \parshape=\ifx\WF@pspars\@empty
+ \z@
+ \else
+ \@ne \WF@pspars
+ \fi
+ \fi
+ \ifvoid\WF@box
+ \ifx\everypar\WF@everypar
+ \let\everypar\WF@@everypar \everypar\expandafter{\the\WF@everypar}%
+ \fi
+ \fi
+}
+
+\newcommand{\WFclear}{\par
+ \unless\ifvoid\WF@box
+ \vskip\bigskipamount \box\WF@box
+ \let\everypar\WF@@everypar \everypar\expandafter{\the\WF@everypar}%
+ \fi
+ \global\c@WF@wrappedlines\z@ \WF@finale
+ \global\WF@correctlines@switch\z@
+}
+
+\begingroup
+ \toks0={\let\everypar\WF@@everypar
+ \everypar\expandafter{\the\WF@everypar}%
+ \let\parshape\@@parshape
+ \let\@setpar\@@setpar
+ }
+ \toks1=\expandafter{\@arrayparboxrestore}%
+ \toks2=\expandafter{\clearpage}%
+ \edef\@tempa{%
+ \def\noexpand\@arrayparboxrestore{\the\toks0 \the\toks1}%
+ \def\noexpand\clearpage
+ {\noexpand\protect\noexpand\WFclear \the\toks2}}%
+ \expandafter
+ \endgroup\@tempa
+
+\@ifundefined{@capwidth}{\let\@capwidth\hsize}{}%
+
+\def\WF@conflict{\WF@warning
+ {\WF@wfname used inside a conflicting environment}}%
+
+\def\WF@collision{\WF@warning{Collision between wrapping environments}}%
+
+\def\WF@fltmes{% message for floats
+ \ifWF@float
+ \WF@info{\WF@wfname floats}%
+ \else
+ \WF@warning{Stationary \WF@wfname forced to float}%
+ \fi
+}
+
+\let\WF@warning\@warning
+\let\WF@info\@gobble
+
+\let\WF@floatstyhook\relax
+\@ifundefined{newfloat}{}{% \newfloat comes from somewhere besides
+ \@ifundefined{restylefloat}{%
+ \@ifclassloaded{memoir}{%
+ \toks@=\expandafter\expandafter\expandafter
+ {\csname\string\newfloat\endcsname [{#1}]{#2}{#3}{#4}%
+ \newenvironment{wrap#2}{\wrapfloat{#2}}{\endwrapfloat}%
+ }% Mmmm; this might be wrong. Not tested
+ \edef\@tempa{\def\expandafter\noexpand\csname\string\newfloat\endcsname
+ [##1]##2##3##4{\the\toks@}}%
+ \@tempa
+ }% end memoir support
+ {}% other origins of \newfloat here?
+ }{% float.sty handler. Ops: Two versions for different versions
+ \@ifundefined{float@restyle}%
+ {% older float.sty
+ \toks@=\expandafter{\restylefloat{#1}% env. might be undefined
+ \@namedef{wrap#1}{%
+ \def\@captype{#1}\@nameuse{fst@#1}%
+ \def\WF@floatstyhook{\let\@currbox\WF@box \columnwidth\wd\WF@box
+ \global\setbox\WF@box\float@makebox}%
+ \@ifnextchar[\WF@wr{\WF@wr[]}}%
+ \expandafter\let\csname endwrap#1\endcsname \endwrapfigure
+ }%
+ \edef\@tempa{\def\noexpand\restylefloat##1{\the\toks@}}%
+ }{% newer float.sty: uses \float@restyle, and \float@makebox
+ \toks@=\expandafter{\float@restyle{#1}% env. might be undefined
+ \@namedef{wrap#1}{\def\@captype{#1}\@nameuse{fst@#1}%
+ \def\WF@floatstyhook{\let\@currbox\WF@box
+ \global\setbox\WF@box\float@makebox{\wd\WF@box}}%
+ \@ifnextchar[\WF@wr{\WF@wr[]}}%
+ \expandafter\let\csname endwrap#1\endcsname \endwrapfigure
+ }%
+ \edef\@tempa{\def\noexpand\float@restyle##1{\the\toks@}}%
+ }%
+ \@tempa % perform redefinitions
+ }% end float.sty handler
+}% end redefinitions of \newfloat
+
+\ifcsname newfloatlist\endcsname% support ccaption.sty
+ \toks@=\expandafter\expandafter\expandafter
+ {\csname\string\newfloatlist\endcsname [{#1}]{#2}{#3}{#4}{#5}%
+ \@namedef{wrap#2}{\wrapfloat{#2}}%
+ \expandafter\let\csname endwrap#2\endcsname \endwrapfloat
+ }%
+ \edef\@tempa{%
+ \def\expandafter\noexpand\csname\string\newfloatlist\endcsname
+ [##1]##2##3##4##5{\the\toks@}}%
+ \@tempa
+\fi
+
+\@ifundefined{DeclareOption}{\endinput}{%
+\def\WF@warning{\PackageWarning{wrapfig2}}%
+\DeclareOption{verbose}{\def\WF@info{\PackageInfo{wrapfig2}}}%
+\ProcessOptions
+\AtEndDocument{\WFclear}}%
+
+%%
+%% Distributable under the LaTeX Project Public License,
+%% version 1.3c or higher (your choice). The latest version of
+%% this license is at: http://www.latex-project.org/lppl.txt
+%%
+%% This work is "maintained"
+%%
+%% This work consists of file wrapfig2.dtx, and the derived files
+%% wrapfig2.sty and wrapfig2.pdf, plus the auxiliary file README.txt.
+%%
+%%
+%% End of file `wrapfig2.sty'.