From 690674172d6290861ee9bc5043f6778ebf2418dc Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 16 Feb 2022 21:13:41 +0000 Subject: wrapfig2 (16feb22) git-svn-id: svn://tug.org/texlive/trunk@62039 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/wrapfig2/wrapfig2.sty | 168 ++++++++++++++-------- 1 file changed, 108 insertions(+), 60 deletions(-) (limited to 'Master/texmf-dist/tex/latex') diff --git a/Master/texmf-dist/tex/latex/wrapfig2/wrapfig2.sty b/Master/texmf-dist/tex/latex/wrapfig2/wrapfig2.sty index 0fe642f2490..508e88fc576 100644 --- a/Master/texmf-dist/tex/latex/wrapfig2/wrapfig2.sty +++ b/Master/texmf-dist/tex/latex/wrapfig2/wrapfig2.sty @@ -12,25 +12,28 @@ %% \NeedsTeXFormat{LaTeX2e}[2019/01/01] \ProvidesPackage{wrapfig2}% - [2022-01-26 v.5.0.7 Wrap text around figures, tables, framed text blocks] + [2022-02-16 v.6.0.0 Wrap text around figures, tables, framed text blocks] \ifcsname c@WF@wrappedlines\endcsname \PackageError{wrapfig2}{ \MessageBreak ****************************************************\MessageBreak Package `wrapfig' has already been loaded perhaps \MessageBreak by other packages, for example caption or subcaption.\MessageBreak Such packages are incompatible with wrapfig2 \MessageBreak - Loading `wrapfig2' aborted \MessageBreak + Loading of`wrapfig2' is aborted \MessageBreak ****************************************************\MessageBreak }{You might type X and might get along without\MessageBreak this package if you don't use the new environment \MessageBreak - `wraptext'; otherwise you get errors about such \MessageBreak - environment not being defined; you must kill your job!} + `wraptext' and the new commands; otherwise you get \MessageBreak + errors about such environment not being defined; \MessageBreak + you must kill your job!} \expandafter\endinput\fi \def\WF@warning{\PackageWarning{wrapfig2}} \DeclareOption{verbose}{\def\WF@info{\PackageInfo{wrapfig2}}} \newif\ifWFnew \let\ifWFnew\iftrue +\newif\ifWFfive \let\ifWFfive\iffalse \DeclareOption{WFold}{\let\ifWFnew\iffalse} +\DeclareOption{WFfive}{\let\ifWFnew\iffalse \let\ifWFfive\iftrue} \ProcessOptions \RequirePackage{xparse} @@ -41,21 +44,22 @@ \@ifpackageloaded{xcolor}{}{\RequirePackage{xcolor}}% } \@ifpackageloaded{curve2e}{}{\RequirePackage{curve2e}} +\@ifpackageloaded{xkeyval}{}{\RequirePackage{xkeyval}} -\ifWFnew - \floatstyle{plain} +\ifboolexpr{ bool{WFfive} or bool{WFnew} }% + {\floatstyle{plain}% \ifcsname chapter\endcsname - \newfloat{text}{tbp}{lotx}[chapter] + \newfloat{text}{tbp}{lotx}[chapter]% \else - \newfloat{text}{tbp}{lotx} + \newfloat{text}{tbp}{lotx}% \fi - \floatname{text}{Text} + \floatname{text}{Text}% come personalizzare con le diverse lingue? \let\WF@text@caption\float@caption -\fi + }{} \newdimen\wrapoverhang \wrapoverhang\z@ \newdimen\WF@size -\newcounter{WF@wrappedlines} +\newcount\c@WF@wrappedlines \newbox\WF@box \newbox\NWF@box \newtoks\WF@everypar @@ -65,6 +69,7 @@ \let\WF@@everypar\everypar \newdimen\insertwidth +\newdimen\radius \newdimen\WFinsertwidthL \newdimen\WFinsertwidthH @@ -74,8 +79,13 @@ \def\SetWFbgd#1{\colorlet{WFbackground}{#1}} \def\SetWFfrm#1{\colorlet{WFframe}{#1}} \def\SetWFtxt#1{\colorlet{WFtext}{#1}} + \def\WFsplitdimens#1,#2!{\fboxrule=#1\relax\fboxsep=#2\relax} +\providecommand\setfontsize{} +\RenewDocumentCommand\setfontsize{O{1.2} m}{% + \fontsize{#2}{\fpeval{#1*#2}}\selectfont} + \def\WFscalefactor{0.8}% \newcommand*\WFscalewidth{% \WFinsertwidthL=\fpeval{\WFscalefactor*0.5\columnwidth}\p@ @@ -89,6 +99,23 @@ \fi }% +\DeclareOptionX{scalefactor}[0.8]{\def\WFscalefactor{#1}} +\DeclareOptionX{fboxrule}[1pt]{\fboxrule=#1} +\DeclareOptionX{fboxsep}[1ex]{\fboxsep=#1} +\DeclareOptionX{framecolor}[WFframe]{\SetWFfrm{#1}} +\DeclareOptionX{backgroundcolor}[WFbackground]{\SetWFbgd{#1}} +\DeclareOptionX{textcolor}[WFtext]{\SetWFtxt{#1}} +\DeclareOptionX{fontstyle}[\normalfont]{#1} +\DeclareOptionX{radius}[\fboxsep]{\radius=#1} +\DeclareOptionX{insertionwidth}[0.5\columnwidth]{\insertwidth=#1} + +\DeclareOptionX*{\PackageWarning{wrapfig2}{`\CurrentOption' ignored}} + +\ExecuteOptionsX{scalefactor, fboxrule, fboxsep, framecolor, +backgroundcolor, textcolor, fontstyle, radius, insertionwidth} + +\ProcessOptionsX* + \NewDocumentEnvironment{wrapfigure}{o m o G{0pt}}% {\wrapfloat{figure}[#1]{#2}[#3]{#4}}% {\endwrapfloat} @@ -97,40 +124,61 @@ {\wrapfloat{table}[#1]{#2}[#3]{#4}}% {\endwrapfloat} +\ifbool{WFnew}{% +\NewDocumentCommand\includeframedtext{O{\insertwidth} m O{} o}{\bgroup% + \ExecuteOptionsX{#3}% executes possible key=value options + \insertwidth=#1\WFscalewidth + \framedbox{#2}{\fboxrule}{\fboxsep}[\radius]\egroup} +}{} + +\ifbool{WFfive}{% \NewDocumentCommand\includeframedtext{O{\insertwidth} m O{1pt,1ex} o}% -{\bgroup \WFsplitdimens #3!% -\insertwidth=#1\relax -\IfNoValueTF{#4}% - {\framedbox{#2}{\fboxrule}{\fboxsep}}% - {\framedbox{#2}{\fboxrule}{\fboxsep}[#4]}% -\egroup} +{\bgroup + \WFsplitdimens #3!\relax + \IfNoValueTF{#4}% + {\framedbox{#2}{\fboxrule}{\fboxsep}}% + {\framedbox{#2}{\fboxrule}{\fboxsep}[#4]} +\egroup}% +}{} \NewDocumentCommand\framedbox{ m m m O{#3}}{\bgroup \fboxrule=#2\fboxsep=#3\relax -\setbox0\hbox{\fboxrule=0pt\fboxsep=#3\relax -\framebox{\parbox{% - \fpeval{\insertwidth-2\fboxrule-2\fboxsep}pt}{\textcolor{WFtext}{#1}}}}% -\unitlength=\fpeval{\wd0/100}pt -\edef\x{100}\edef\y{\fpeval{(\ht0 +\dp0)/\unitlength}}% -\edef\xc{50}\edef\yc{\fpeval{\y/2}}\edef\R{\fpeval{#4/\unitlength}}% +\setbox0\hbox{\fboxrule=\z@\fboxsep=#3\relax +\framebox{\parbox{% draw a framed box without the frame + \fpeval{\insertwidth-2\fboxrule-2\fboxsep}\p@}{\textcolor{WFtext}{#1}}}} + +\unitlength=\fpeval{\wd0/100}\p@ % set the picture \unitlength + % determine the picture coordinates and displacement of the axes origin +\edef\x{100}% +\edef\y{\fpeval{(\ht0 +\dp0)/\unitlength}}% +\edef\xc{50}% +\edef\yc{\fpeval{\y/2}}\edef\R{\fpeval{#4/\unitlength}}% +\edef\R{\fpeval{#4/\unitlength}}% radius in unit lengths + % compute the horizontal and vertical shifts of the corner extrema \edef\WFXds{\fpeval{-\xc+\R}}\edef\WFXsd{-\WFXds}% \edef\WFYuo{\fpeval{\yc-\R}}\edef\WFYou{-\WFYuo}% + % compute the coordinates of the curved corners frame contour \edef\PSEl{\WFXsd,-\yc}\edef\PSEu{\xc,\WFYou}\edef\PNEd{\xc,\WFYuo}% \edef\PNEl{\WFXsd,\yc}\edef\PNWr{\WFXds,\yc}\edef\PNWd{-\xc,\WFYuo}% \edef\PSWu{-\xc,\WFYou}\edef\PSWr{\WFXds,-\yc}% -\def\WFrectangle{% + +\def\WFrectangle{% define the contour as the argument of \Curve (\WFXsd,-\yc)<1,0>(\xc,\WFYou)<0,1>(\xc,\WFYuo)<0,1>% (\WFXsd,\yc)<-1,0>(\WFXds,\yc)<-1,0>(-\xc,\WFYuo)<0,-1>% (-\xc,\WFYou)<0,-1>(\WFXds,-\yc)<1,0>(\WFXsd,-\yc)<1,0>}% -\def\CurveStar{\Curve*}% +\def\CurveStar{\Curve*}% define a macro for adding the asterisk + \begin{picture}(\x,\y)(-\xc,-\yc) -{\color{WFbackground}\expandafter\CurveStar\WFrectangle}% -{\color{WFframe}\linethickness{#2}\expandafter\Curve\WFrectangle}% +{\color{WFbackground}\expandafter\CurveStar\WFrectangle}% draw background +\ifdim\fboxrule>\z@% draw the frame if its thickness is not zero + {\color{WFframe}\linethickness{#2}\expandafter\Curve\WFrectangle}% +\fi + % put the text block in a null box at the coordinates origin \put(0,0){\makebox(0,0)[cc]{\box0}}% \end{picture} \egroup} -\ifWFnew +\ifboolexpr{bool{WFnew} or bool{WFfive}}{% definition for versions 5 and 6 \NewDocumentEnvironment{wraptext}{O{0} m O{0pt} G{0.5\columnwidth}}{% \insertwidth=#4\WFscalewidth \def\textplacement{#2}% @@ -148,27 +196,24 @@ \@dblarg{\@caption\@captype}% }% }{\endwrapfloat\ignorespaces}% -\else % +}{% definition for version 4 fall back \NewDocumentEnvironment{wraptext}% {O{l} D||{0.5\columnwidth} D<>{0} D(){text} }% - {% + {% Open environment \insertwidth=#2 \def\textplacement{#1}% \def\textcorrection{#3}% \def\WF@caption@label{#4}% \setbox0\hbox\bgroup \minipage{\dimexpr\insertwidth-2pt-6ex}% -}{\endminipage\egroup +}{% Close environment + \endminipage\egroup \begin{lrbox}{\NWF@box}% \framedbox{\box0}{1pt}{1ex}% \end{lrbox} - \edef\NWF@wli - {% - \fpeval{% - round((\ht\NWF@box+\dp\NWF@box)/\baselineskip,0)+2+ - \textcorrection - }% - }% + \edef\NWF@wli]{\fpeval{% + round((\ht\NWF@box+\dp\NWF@box)/\baselineskip,0)+2+\textcorrection}% + }% \unles\ifhmode \leavevmode\noindent \fi @@ -178,15 +223,16 @@ \endwrapfloat \ignorespaces } -\fi - +} \NewDocumentEnvironment{wrapfloat}{m o m o G{\z@}}% - {\def\@captype{#1}\WF@wr[#2]{#3}[#4]{#5}}% - {\ifdim\hsize>\z@ +{% open environment code + \def\@captype{#1}\WF@wr[#2]{#3}[#4]{#5}% +}{% close environment code + \ifdim\hsize>\z@ \par\hrule\@width\hsize\@height\z@ % force width with invisible rule \else - \unskip \egroup \box\z@ % or close hbox + \egroup \box\z@ % or close hbox \fi \egroup % close the vtop box; its width now is known \WF@floatstyhook % support for float.sty @@ -207,7 +253,7 @@ \fi \fi \global\@ignoretrue - } +} \NewDocumentCommand\WF@wr{o m o m s}{% \xdef\WF@wfname{wrap\@captype\space}% @@ -247,9 +293,8 @@ \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 @@ -294,26 +339,23 @@ \vskip-\parskip \global\WF@floatfalse \let\pagetotal\maxdimen % kludge flag for "not top of page" \else % outer page - \unless\ifWFnew \@tempdima\pagedepth \fi% 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 + \@tempdimb\dimexpr\pagegoal - \pagetotal \relax% room left on page \ifdim \@tempdimb<\z@ % page already full \global\WF@floatfalse - \unless\ifdim-\@tempdimb>\pageshrink - \pagebreak - \fi + \unless\ifdim-\@tempdimb>\pageshrink \pagebreak \fi \else \ifdim\WF@size>\@tempdimb% box too high does not fit in \@tempdimb \ifWF@float - \dimen@.5\baselineskip + \dimen@ 0.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 + \advance\dimen@ 0.5\baselineskip \ifdim\dimen@>\@tempdimb % stretch page contents \global\WF@floatfalse \pagebreak \fi @@ -321,7 +363,7 @@ \global\WF@floatfalse \fi \fi - \vskip\@tempdima\relax % return erased page depth + \vskip\@tempdima% return erased page depth \fi \noindent \ifWF@float @@ -342,7 +384,7 @@ \ifnum `l=\WF@place % object on left \hss \def\@tempa{\kern\columnsep}% take right gap into action - \else % insert on light + \else % object on right \@tempdima\z@ % no left indentation \kern\@tempdimb \kern\columnsep \def\@tempa{\hss}% object overlaps space to the right @@ -366,6 +408,7 @@ \aftergroup\WF@startwrapping \fi } + \def\WF@startwrapping{% \ifnum\WF@wli=\z@ % no number was specified \setcounter{WF@wrappedlines}% @@ -375,18 +418,19 @@ \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}}% + \xdef\WF@wli{\the\c@WF@wrappedlines}% \else \setcounter{WF@wrappedlines}{\WF@wli}% absolute number of lines - \global\advance\c@WF@wrappedlines\@ne + \stepcounter{WF@wrappedlines}% \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 + \xdef\WF@restoretol{\tolerance\the\tolerance}\tolerance9999\relax \advance\linewidth-\WF@adjlw \advance\@totalleftmargin\WF@adjtlm - \fi} + \fi +} \def\WF@wraphand{% for indenting one or more paragraphs \ifnum\c@WF@wrappedlines<\tw@ @@ -521,7 +565,9 @@ \let\WF@info\@gobble \let\WF@floatstyhook\relax + \@ifundefined{newfloat}{}{% \newfloat comes from somewhere besides + % float.sty \@ifundefined{restylefloat}{% \@ifclassloaded{memoir}{% \toks@=\expandafter\expandafter\expandafter @@ -534,9 +580,11 @@ }% end memoir support {}% other origins of \newfloat here? }{% float.sty handler. Ops: Two versions for different versions + % Changing \floatstyle or \restylefloat changes also \newfloat. \@ifundefined{float@restyle}% {% older float.sty - \toks@=\expandafter{\restylefloat{#1}% env. might be undefined + + \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 -- cgit v1.2.3