From c1748f388233d142b9d27c4e12aaf592b2f38b09 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 11 Oct 2020 20:51:37 +0000 Subject: swfigure (11oct20) git-svn-id: svn://tug.org/texlive/trunk@56637 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/swfigure/swfigure.sty | 234 ++++++++++++++++++++++ 1 file changed, 234 insertions(+) create mode 100644 Master/texmf-dist/tex/latex/swfigure/swfigure.sty (limited to 'Master/texmf-dist/tex/latex/swfigure') diff --git a/Master/texmf-dist/tex/latex/swfigure/swfigure.sty b/Master/texmf-dist/tex/latex/swfigure/swfigure.sty new file mode 100644 index 00000000000..67ace027b68 --- /dev/null +++ b/Master/texmf-dist/tex/latex/swfigure/swfigure.sty @@ -0,0 +1,234 @@ +%% +%% This is file `swfigure.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% swfigure.dtx (with options: `package') +%% +%% Copyright (C) 2020 Claudio Beccari all rights reserved. +%% License information appended +%% +\NeedsTeXFormat{LaTeX2e}[2020/01/01] +\ProvidesPackage{swfigure}% + [2020-10-11 v.0.9.07 Managing large and spread wide figures] +\RequirePackage{etoolbox} +\RequirePackage{xparse} +\RequirePackage{xfp} + +\ExplSyntaxOn +\AtBeginDocument{% +\ProvideExpandableDocumentCommand\fptest{m m m}{% + \fp_compare:nTF{#1}{#2}{#3}} +} +\ExplSyntaxOff + +\RequirePackage{trace} + +\RequirePackage{graphicx} +\RequirePackage{afterpage} +\RequirePackage{wrapfig} + +\newdimen\internalmargin +\internalmargin=\dimexpr\oddsidemargin+1in+1bp\relax +\newdimen\spreadwidth +\spreadwidth=\dimexpr 2\textwidth+2\internalmargin\relax +\newdimen\DFwidth +\newdimen\DFheight +\newdimen\DFhalfwidth +\newdimen\DFheight +\newdimen\FigSpace +\newsavebox\DFtotalimage +\newsavebox\DFimageI +\newsavebox\DFimageII +\newsavebox\RFbox +\newdimen\VS@textwidth +\newcount\VS@lines + +\NewDocumentCommand\DFcaption{O{#2} m o}{\refstepcounter{figure}% + \vtop to 0pt{\hsize=\textheight\parindent=0pt\leavevmode + Figure \thefigure\quad #2\vss}% + \addcontentsline{lof}{figure}{\protect\numberline{\thefigure}#1} + \IfValueT{#3}{\label{#3}}\relax% +} + +\DeclareRobustCommand\cleartoevenpage{% + \clearpage\ifodd\value{page}\null\clearpage\fi} +\NewDocumentEnvironment{DFimage}{O{SW} m O{#4} m o D(){0.8} D<>{0}}{% +\ifstrequal{#1}{SW}% + {% + \SWfigure{#2}[#3]{#4}[#5]% + }% + {\ifstrequal{#1}{NF}% + {% + \NFfigure{#2}[#3]{#4}[#5](#6)% + }% + {\ifstrequal{#1}{RF}% OK + {% + \RFfigure{#2}[#3]{#4}[#5]% + }% + {\ifstrequal{#1}{VS}% + {% + \VSfigure{#2}[#3]{#4}[#5](#6)<#7>% + }% + {\ifstrequal{#1}{HS} + {% + \HSfigure{#2}[#3]{#4}[#5](#6)% + }% + {\PackageWarning{swfigure}% + {% + **************************************\MessageBreak + Option #1\space is not valid \MessageBreak + Nothing done \MessageBreak + Image #2\space was not processed \MessageBreak + **************************************\MessageBreak}% + }% + }% + }% + }% + }% +}% + +\NewDocumentCommand\SWfigure{m O{#3} m o}{% +\unless\ifvmode + \csuse{@bsphack}% + \vadjust{\vspace{0pt plus1fill}\csuse{@esphack}\newpage}% +\fi +\cleartoevenpage +\setbox\DFtotalimage=\hbox{\includegraphics{#1}}% +\DFwidth=\wd\DFtotalimage \DFhalfwidth=0.5\DFwidth +\DFheight=\ht\DFtotalimage +\FigSpace=\dimexpr\textwidth+\internalmargin\relax +\setbox\DFimageI\hbox{\bgroup +\edef\x{\egroup\noexpand\includegraphics*[% +trim = 0 0 \the\DFhalfwidth\space 0]}\x{#1}}% +\setbox\DFimageII\hbox{\bgroup +\edef\x{\egroup\noexpand\includegraphics*[% +trim = \the\DFhalfwidth\space 0 0 0]}\x{#1}}% +\fptest{\DFheight/\DFhalfwidth > \textheight/\FigSpace}% + {\edef\DFscalefactor{\fpeval{\textheight/\DFheight}}}% + {\edef\DFscalefactor{\fpeval{\FigSpace/\DFhalfwidth}}}% +\setbox\DFimageI=\hbox{\scalebox{\DFscalefactor}{\usebox{\DFimageI}}}% +\setbox\DFimageII=\hbox{\scalebox{\DFscalefactor}{\usebox{\DFimageII}}}% +\begin{figure}[p]% +\vbox to\textheight{\vss\hsize=\textwidth%\ +\makebox[\hsize][l]{\makebox[\FigSpace][r]{\box\DFimageI}}\vss}% +\end{figure}\clearpage +\begin{figure}[p]% +\vbox to\textheight{\vss\hsize=\textwidth +\makebox[\hsize][r]{\makebox[\FigSpace][l]{\box\DFimageII}% +\makebox(0,0)[lb]{\hspace*{1em}\raisebox{0.5\textheight}{% +\rotatebox[origin=tc]{90}{\DFcaption[#2]{#3}[#4]% +}}}}\vss}% +\end{figure}\clearpage} + +\NewDocumentCommand\NFfigure{m O{#3} m o d()}{% + \begin{figure}[p] + \includegraphics[width=\linewidth,height=#5\textheight, + keepaspectratio]{#1}% + \caption[#2]{#3}% + \IfValueT{#4}{\label{#4}}\relax + \end{figure} +} + +\NewDocumentCommand\RFfigure{m O{#3} m o}{% + \dimen8=\textwidth\dimen10=\textheight + \figure[p]\setbox\RFbox=\hbox{% + \rotatebox[origin=cc]{90}{\parbox[b][\dimen8][c]{\dimen10}% + {\centering\includegraphics[width=\dimen10, height=\dimen8, + keepaspectratio]{#1}% + \caption[#2]{#3}% + \IfValueT{#4}{\label{#4}}\relax% + }}}% + \edef\RFx{\fpeval{\ht\RFbox/\textheight}}% + \edef\RFy{\fpeval{\wd\RFbox/\textwidth}}% + \fptest{\RFx > \RFy}% + {\scalebox{\RFx}{\box\RFbox}}% + {\scalebox{\RFy}{\box\RFbox}}% + \endfigure} + +\NewDocumentCommand\VSfigure{m O{#3} m o d() D<>{0}}{% + \setbox\DFtotalimage=\hbox{\includegraphics{#1}} + \DFwidth=\wd\DFtotalimage \DFheight=\ht\DFtotalimage + \edef\VS@aspectratio{\fpeval{\DFheight/\DFwidth}} + \fptest{ \VS@aspectratio < 2 }% + {\begin{center}\ttfamily + ===========================================\\ + Figure #2 is not tall enough.\\ + Consider using a display mode different\\ + from VS; may be NF or RF are better suited.\\ + ===========================================\\ + Nothing done!\\ + =========================================== + \end{center} + }% + {\edef\VS@factor{\fpeval{#5\textheight/\DFheight}}% + \setbox\DFtotalimage= + \hbox{\scalebox{\VS@factor}{\box\DFtotalimage}}% + \edef\VS@width{\fpeval{\VS@factor*\DFwidth}\p@}% + \setbox\DFtotalimage=\vbox{\hsize=\VS@width% + \def\@captype{figure}\box\DFtotalimage + \caption[#2]{#3}% + \IfValueT{#4}{\label{#4}}\relax} + \VS@lines= + \fpeval{round(\ht\DFtotalimage/\baselineskip,0)+#6}% + \begin{wrapfigure}[\VS@lines]{O}[0pt]{\VS@width}% + \box\DFtotalimage + \end{wrapfigure}}% +} + +\NewDocumentCommand\HSfigure{m o m o d()}{% + \unless\ifvmode + \csuse{@bsphack}% + \vadjust{\vspace{0pt plus1fill}\csuse{@esphack}\newpage}% + \fi + \cleartoevenpage + \setbox\DFtotalimage=\hbox{\includegraphics{#1}} + \DFwidth=\wd\DFtotalimage \DFhalfwidth=0.5\DFwidth + \FigSpace=0.5\spreadwidth% W + \setbox\DFimageI\hbox{\bgroup + \edef\x{\egroup\noexpand\includegraphics*[% + trim = 0 0 \the\DFhalfwidth\space 0]}\x{#1}}% + \setbox\DFimageII\hbox{\bgroup + \edef\x{\egroup\noexpand\includegraphics*[% + trim = \the\DFhalfwidth\space 0 0 0]}\x{#1}}% + \edef\DFscalefactor{\fpeval{\FigSpace/\DFhalfwidth}}% + \setbox\DFimageI=\hbox{% + \scalebox{\DFscalefactor}{\usebox{\DFimageI}}}% + \setbox\DFimageII=\hbox{% + \scalebox{\DFscalefactor}{\usebox{\DFimageII}}}% + \setbox\DFimageII= + \hbox{\dimen10=\linewidth\dimen8\internalmargin + \vbox{\hsize\DFhalfwidth\parindent\z@ + \box\DFimageII\par + \leavevmode\hspace*{\dimen8}% + \vtop{\hsize\dimen10\parindent\z@ + \textwidth=\hsize + \DFcaption[#2]{#3}[#4]% + }% + }% + }% + \setbox\DFimageI=\vbox to\ht\DFimageII{\box\DFimageI\vss}% + \begin{figure}[t] + \makebox[\textwidth][l]{% + \makebox[\DFhalfwidth][l]{\box\DFimageI}}% + \end{figure} + \afterpage{% + \begin{figure}[t] + \makebox[\textwidth][r]{% + \makebox[\DFhalfwidth][r]{\box\DFimageII}}% + \end{figure}% + } +} +%% +%% 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 files swfigure.dtx and READEME.txt, and the derived +%% files swfigure.sty and swfigure.pdf +%% +%% +%% End of file `swfigure.sty'. -- cgit v1.2.3