summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/swfigure/swfigure.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-10-11 20:51:37 +0000
committerKarl Berry <karl@freefriends.org>2020-10-11 20:51:37 +0000
commitc1748f388233d142b9d27c4e12aaf592b2f38b09 (patch)
treebb6bf6786b32eaa42cdfe29ae60a3a98df9856c5 /Master/texmf-dist/tex/latex/swfigure/swfigure.sty
parent33ce5493138d18ba17c234fcc135000e79e9b00c (diff)
swfigure (11oct20)
git-svn-id: svn://tug.org/texlive/trunk@56637 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/swfigure/swfigure.sty')
-rw-r--r--Master/texmf-dist/tex/latex/swfigure/swfigure.sty234
1 files changed, 234 insertions, 0 deletions
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'.