From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 macros/latex/contrib/hvfloat/latex/hvfloat.sty | 1032 ++++++++++++++++++++++++
 1 file changed, 1032 insertions(+)
 create mode 100644 macros/latex/contrib/hvfloat/latex/hvfloat.sty

(limited to 'macros/latex/contrib/hvfloat/latex/hvfloat.sty')

diff --git a/macros/latex/contrib/hvfloat/latex/hvfloat.sty b/macros/latex/contrib/hvfloat/latex/hvfloat.sty
new file mode 100644
index 0000000000..7eda015ab8
--- /dev/null
+++ b/macros/latex/contrib/hvfloat/latex/hvfloat.sty
@@ -0,0 +1,1032 @@
+%% $Id: hvfloat.sty 1054 2019-05-13 08:20:11Z herbert $
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{hvfloat}[2019/05/13 rotating of floating objects]
+%%
+%% IMPORTANT NOTICE:
+%%
+%% This is file `hvfloat.sty',
+%%
+%% Herbert Voss <hvoss@tug.org>
+%%
+%% This program can be redistributed and/or modified under the terms
+%% of the LaTeX Project Public License Distributed from CTAN archives
+%% in directory macros/latex/base/lppl.txt.
+%%
+%% DESCRIPTION:
+%%   `hvfloat' offers rotating of captions and objects for floats
+%%
+\def\fileversion{2.15}
+\def\filedate{2019/08/31}
+\message{`hvfloat' v\fileversion, \filedate\space (Herbert Voss)}
+\let\hvFileVersion\fileversion
+%
+\newif\ifhv@fbox \hv@fboxfalse
+\newif\ifhv@hyperref \hv@hyperreffalse
+\DeclareOption{fbox}{\hv@fboxtrue\setlength{\fboxsep}{1pt}}
+\DeclareOption{hyperref}{\hv@hyperreftrue}
+
+\ProcessOptions
+
+\PassOptionsToPackage{hypcap}{caption}
+\RequirePackage{caption}
+\PassOptionsToPackage{hypcap}{subcaption}
+\RequirePackage{subcaption}
+\RequirePackage{atbegshi}
+
+\RequirePackage{expl3,multido}
+\RequirePackage{graphicx}
+
+\RequirePackage{xkeyval}
+\RequirePackage{ifoddpage}
+\RequirePackage{afterpage}
+%\RequirePackage{zref-abspos}
+
+\ifhv@hyperref
+  \RequirePackage{hyperref}
+%  \RequirePackage{hypcap}
+\fi
+%
+%\unitlength=1cm
+\providecommand*\LenToUnit[1]{\strip@pt\dimexpr#1*\p@/\unitlength}
+
+\newlength\hvObjectWidth
+\newlength\hvCapWidth
+\newlength\hvWideWidth
+\newlength\hvMultiFloatSkip
+\newlength\hvMaxCapWidth
+%\newlength\hv@BottomSpace
+%\AtBeginDocument{%
+%  \setlength\hv@BottomSpace{\dimexpr\paperheight-1in-\topmargin-\headheight-\headsep-\textheight}}
+
+\newsavebox\hvObjectBox
+\newsavebox\hvCaptionBox
+\newsavebox\hvOBox
+\newsavebox\@tempbox
+\newsavebox\hv@caption@box
+
+\newif\ifhv@capbeside \hv@capbesidefalse
+
+\def\hv@Top{top}
+\def\hv@Bottom{bottom}
+\def\hv@After{after}
+\def\hv@Before{before}
+\def\hv@Right{right}
+\def\hv@Left{left}
+\def\hv@Center{center}
+\def\hv@Outer{outer}
+\def\hv@Inner{inner}
+\def\hv@Even{evenPage}
+\def\hv@Odd{oddPage}
+\def\hv@Natural{n}
+\def\hv@Width{w}
+\def\hv@Height{h}
+\def\hv@Zero{0}
+%
+\def\hv@figure{figure}
+%
+\define@key{hvSet}{floatPos}[htbp]{%		LaTeX's position parameters htbp
+	\def\hvSet@floatPos{#1}%
+}
+\define@key{hvSet}{rotAngle}[0]{%		rotates caption AND image together
+	\def\hvSet@rotAngle{#1}%
+}
+\define@key{hvSet}{capWidth}[n]{%		(n)atural width|object (w)idth)|object (h)eight|<scale of \columnwidth>
+	\def\hvSet@capWidth{#1}%
+}
+\define@key{hvSet}{capAngle}[0]{%		-360..+360
+	\def\hvSet@capAngle{#1}%
+}
+\define@key{hvSet}{capPos}[bottom]{%			(l)eft|(b)ottom|(t)op|(r)ight|(i)nner|(o)uter|(e)ven|o(d)d
+  \def\hvSet@capPos{#1}%			it is relativ to the object, (e),(d) only valid for fullpage float
+  \edef\@tempa{#1}%
+  \ifx\hv@Bottom\@tempa 
+    \hv@capbesidefalse
+  \else
+    \ifx\hv@Top\@tempa
+      \hv@capbesidefalse
+    \else
+      \hv@capbesidetrue
+    \fi
+  \fi
+}
+\define@key{hvSet}{capVPos}[center]{%		bottom|center|top
+	\def\hvSet@capVPos{#1}%			it is relativ to the object
+}
+\define@key{hvSet}{objectPos}[center]{%		(l)eft|(c)enter|(r)ight|(i)nner|(o)uter
+	\def\hvSet@objectPos{#1}%		it is relativ to the document
+}
+\define@key{hvSet}{objectAngle}[0]{%		-360..+360
+	\def\hvSet@objectAngle{#1}%
+}
+\define@key{hvSet}{floatCapSep}[5pt]{%		a width with the unit pt
+	\def\hvSet@floatCapSep{#1}%
+}
+\define@key{hvSet}{multiFloatSkip}[\normalbaselineskip]{% a width with the unit pt
+	\setlength\hvMultiFloatSkip{#1}%
+}
+\define@boolkey{hvSet}[hv@]{useOBox}[true]{}%		use of the hvOBox contents
+\define@boolkey{hvSet}[hv@]{nonFloat}[true]{}%		Do not use float environment
+\define@boolkey{hvSet}[hv@]{onlyText}[true]{}%		Write the caption only as text
+\define@boolkey{hvSet}[hv@]{wide}[true]{}%		Write the caption only as text
+
+
+\newif\ifhv@fullpage
+\newif\ifhv@FULLPAGE
+
+%\define@boolkey{hvSet}[hv@]{fullpage}[true]{}%		fullpage float with caption on other page
+%\define@boolkey{hvSet}[hv@]{FullPage}[true]{}%		fullpage float with caption on other page
+%\define@boolkey{hvSet}[hv@]{FULLPAGE}[true]{}%	 fullpage float with caption on other page 
+
+\define@key{hvSet}{fullpage}[true]{\global\@nameuse{hv@fullpage#1}}%  wegen \afterpage problem
+\define@key{hvSet}{FULLPAGE}[true]{\global\@nameuse{hv@FULLPAGE#1}}
+
+\define@boolkey{hvSet}[hv@]{subFloat}[true]{%		typeset values as subfloats 
+	\ifhv@subFloat\setkeys{hvSet}{multiFloat=false}\fi%
+}%
+\define@boolkey{hvSet}[hv@]{multiFloat}[true]{%		typeset values as continous floats 
+	\ifhv@multiFloat\setkeys{hvSet}{subFloat=false}\fi%
+}%
+\define@boolkey{hvSet}[hv@]{separatorLine}[true]{}%	separator line for caption of a full page float
+\define@boolkey{hvSet}[hv@]{objectFrame}[true]{}% 	a frame around the object with no separation
+\define@key{hvSet}{style}{%
+  \@ifundefined{hv@#1}%
+    {\errmessage{Custom style `#1' undefined}}%
+    {\begingroup
+     \edef\x{\endgroup\noexpand\setkeys{hvSet}{\@nameuse{hv@#1}}}\x}%	use a defined style
+}
+\define@key{hvSet}{capFormat}[]{\def\hv@caption@format{#1}}%
+\define@key{hvSet}{subcapFormat}[]{\def\hv@subcaption@format{#1}}%
+
+\def\hv@set#1{\begingroup\edef\x{\endgroup\noexpand\setkeys{hvSet}{#1}}\x}
+\let\hvFloatSet\hv@set
+%
+\def\defhvstyle#1#2{\@namedef{hv@#1}{#2}}
+%
+\newcommand{\setDefaults}{%
+  \hv@set{%
+	floatPos=htbp, rotAngle=0, capWidth=n, capAngle=0,
+	capPos=bottom, capVPos=center, objectPos=center, objectAngle=0,
+	floatCapSep=5pt, useOBox=false, nonFloat=false,
+	onlyText=false, wide=false, fullpage=false, FULLPAGE=false,
+        multiFloat=false,subFloat=false,
+	separatorLine,objectFrame=false,multiFloatSkip=\normalbaselineskip,
+	capFormat={}, subcapFormat={},
+}%
+}
+\newcommand\reset@special@float{%
+  \hv@set{subFloat=false,%fullpage=false,
+          multiFloat=false,%FULLPAGE=false
+}}
+
+\def\hv@vskip{\vspace{\hvMultiFloatSkip}}
+
+%
+\newlength\hvAboveCaptionSkip
+\newlength\hvBelowCaptionSkip
+\newcount\hv@@capPos
+
+\newlength\fboxlinewidth
+\AtBeginDocument{%
+  \setlength\fboxlinewidth{\dimexpr\linewidth-2\fboxrule-2\fboxsep}%
+}
+\setlength\belowcaptionskip{\abovecaptionskip}% it is in latex.ltx = 0pt
+\newcommand\saveCaptionSkip{%
+	\setlength{\hvAboveCaptionSkip}{\abovecaptionskip}
+	\setlength{\hvBelowCaptionSkip}{\belowcaptionskip}
+	\setlength{\abovecaptionskip}{0pt}
+	\setlength{\belowcaptionskip}{0pt}
+}
+\newcommand{\restoreCaptionSkip}{%
+  \setlength\abovecaptionskip{\hvAboveCaptionSkip}%
+  \setlength\belowcaptionskip{\hvBelowCaptionSkip}%
+}
+%
+\newcommand\figcaption[2][]{\def\@captype{figure}%
+  \begingroup
+  \ifx\relax\hv@caption@format\relax\else\expandafter\captionsetup\expandafter{\hv@caption@format}\fi
+  \ifx\relax#1\relax \caption{#2}\else\caption[#1]{#2}\fi
+  \endgroup}
+\newcommand\tabcaption[2][]{\def\@captype{table}%
+  \begingroup
+  \ifx\relax\hv@caption@format\relax\else\expandafter\captionsetup\expandafter{\hv@caption@format}\fi
+  \ifx\relax#1\relax \caption{#2}\else\caption[#1]{#2}\fi
+  \endgroup}
+%
+\newlength\hv@maxImageWidth
+\AtBeginDocument{\hv@maxImageWidth=\columnwidth}
+
+\define@key{Gin}{fullpage}[true]{%
+  \def\Gin@ewidth{\columnwidth}%
+  \def\Gin@eheight{\textheight}%
+  \Gin@boolkey{false}{iso}%
+}
+\define@key{Gin}{FullPage}[true]{%
+  \def\Gin@ewidth{\textwidth}%
+  \def\Gin@eheight{\textheight}%
+  \Gin@boolkey{false}{iso}%
+}
+\define@key{Gin}{FULLPAGE}[true]{%
+  \def\Gin@ewidth{\paperwidth}%
+  \def\Gin@eheight{\paperheight}%
+  \Gin@boolkey{false}{iso}%
+}
+\newcommand\IncludeGraphics[2][]{%
+%  \newpage
+%\iffalse
+  \vspace*{\the\dimexpr-1in-\voffset+\topskip-\headheight-0.5\baselineskip}%
+  \leavevmode\checkoddpage
+  \ifoddpage
+    \hspace*{\dimexpr-\oddsidemargin-\parindent-1in}%
+  \else
+    \hspace*{\dimexpr-\evensidemargin-\parindent-1in}%
+  \fi\noindent
+  \includegraphics[#1,width=\paperwidth,height=\paperheight,keepaspectratio=false]{#2}%
+%\fi
+%  \includepdf[#1]%,width=\paperwidth,height=\paperheight,keepaspectratio=false]
+%  {#2}%
+}
+
+\newcommand\put@CaptionBox[1][0]{%
+  \ifcase#1
+    \ifhv@fbox
+      \fbox{\parbox{\wd\hvCaptionBox}{\usebox{\hvCaptionBox}}}%
+    \else     
+      \parbox{\wd\hvCaptionBox}{\usebox{\hvCaptionBox}}%
+    \fi
+  \or
+    \ifhv@fbox
+      \fbox{\raisebox{-\height}{\usebox{\hvCaptionBox}}}%
+    \else     
+      \raisebox{-\height}{\usebox{\hvCaptionBox}}%
+    \fi
+  \or
+    \ifhv@fbox\fbox{\usebox{\hvCaptionBox}}\else\usebox{\hvCaptionBox}\fi
+  \fi
+}
+
+\newcommand\put@ObjectBox[1][0]{%
+  \ifcase#1
+    \ifhv@fbox
+      \fbox{\parbox{\wd\hvObjectBox}{\usebox{\hvObjectBox}}}%
+    \else     
+      \parbox{\wd\hvObjectBox}{\ifhv@objectFrame\frame{\usebox{\hvObjectBox}}\else\usebox{\hvObjectBox}\fi}%
+    \fi
+  \or
+    \ifhv@fbox
+      \fbox{\raisebox{-\height}{\usebox{\hvObjectBox}}}%
+    \else     
+      \raisebox{-\height}{\ifhv@objectFrame\frame{\usebox{\hvObjectBox}}\else\usebox{\hvObjectBox}\fi}%
+    \fi
+  \or
+    \ifhv@fbox
+      \fbox{\usebox{\hvObjectBox}}%
+    \else     
+      \ifhv@objectFrame\frame{\usebox{\hvObjectBox}}\else\usebox{\hvObjectBox}\fi%
+    \fi
+  \fi
+}
+
+\newif\ifhv@star
+\newif\if@hvsubstar
+\setDefaults
+
+\def\hvFloat{\@ifnextchar*%     Main macro
+  {\global\hv@startrue\hv@maxImageWidth=\textwidth\hvFloat@i}%
+  {\global\hv@starfalse\hv@maxImageWidth=\columnwidth\hvFloat@i*}%
+}
+
+%\newcommand*{\hvFloat}[5][]+{%
+% [#1}: keyvalues
+% #2: type  figure | table | ...
+% #3: float contents
+% [#4]: short caption
+% #5: caption
+% #6: label
+%
+\def\hvFloat@i*{\@ifnextchar[{\do@hvFloat}{\do@hvFloat[]}}
+
+\def\do@hvFloat[#1]{%
+  \begingroup
+  \setlength\hvWideWidth{\dimexpr\linewidth+\marginparwidth}%
+  \hv@maxImageWidth=\textwidth
+%  \hv@capbesidefalse
+  \reset@special@float
+  \setcounter{hv@pfigure}{\value{figure}}%
+  \setcounter{hv@ptable}{\value{table}}%
+  \gdef\hv@save@setting{#1}%
+  \ifx\relax#1\relax\else\setkeys{hvSet}{#1}\fi
+  \gdef\hv@floatType{figure}%
+  \@ifnextchar+{\do@multiFloat}{\hvFloat@ii[#1]}}
+
+\ExplSyntaxOn
+
+\def\do@multiFloat+#1#2{%
+  \clist_set:Nn\l_clist_Type{{#1}}%
+  \clist_set:Nn\l_clist_Object{{#2}}%
+  \@ifnextchar[\do@multiFloat@i{\do@multiFloat@i[]}%
+}
+\def\do@multiFloat@i[#1]#2#3{%  lof-caption, caption,label
+  \ifx\relax#1\relax
+    \clist_set:Nn\l_clist_LofCaption{{}}%
+  \else
+    \clist_set:Nn\l_clist_LofCaption{{#1}}%
+  \fi
+  \clist_set:Nn\l_clist_Caption{{#2}}%
+  \ifx\relax#3\relax 
+    \clist_set:Nn\l_clist_Label{{}}%
+  \else
+    \clist_set:Nn\l_clist_Label{{#3}}%
+  \fi
+  \@ifnextchar+{\do@multiFloat@ii}{}%
+} 
+\def\do@multiFloat@ii+#1#2{%
+  \clist_put_right:Nn\l_clist_Type{{#1}}%
+  \clist_put_right:Nn\l_clist_Object{{#2}}%
+  \@ifnextchar[\do@multiFloat@iii{\do@multiFloat@iii[]}%
+}
+
+\def\do@multiFloat@iii[#1]#2#3{%  lof-caption, caption, label
+  \ifx\relax#1\relax
+    \clist_put_right:Nn\l_clist_LofCaption{{}}%
+  \else
+    \clist_put_right:Nn\l_clist_LofCaption{{#1}}%
+  \fi
+  \clist_put_right:Nn\l_clist_Caption{{#2}}%
+  \ifx\relax#3\relax 
+    \clist_put_right:Nn\l_clist_Label{{}}%
+  \else
+    \clist_put_right:Nn\l_clist_Label{{#3}}%
+  \fi
+  \@ifnextchar+\do@multiFloat@ii%
+    {\def\hvSet@CapWidth{n}%
+     \do@@@@hvFloat}%
+} 
+\ExplSyntaxOff
+
+
+\newcounter{hv@pfigure}
+\newcounter{hv@ptable}
+\newcounter{subhv@pfigure}
+\newcounter{subhv@ptable}
+
+\def\drawSepLine{%
+  \par\noindent
+  \if@twocolumn\rule{\columnwidth}{0.4pt}\else\rule{\linewidth}{0.4pt}\fi
+  \vspace{0pt}%
+}  
+
+\newcount\hv@cnta
+\newcount\hv@cntb
+
+
+\def\hvFloat@ii[#1]#2#3{%
+  \hv@maxImageWidth=\textwidth
+%  \hv@capbesidefalse
+  \ifx\relax#1\relax\else\setkeys{hvSet}{#1}\fi
+  \gdef\hv@floatType{#2}%
+  \ifx\relax#2\relax \setkeys{hvSet}{nonFloat=true}\fi
+  \gdef\hv@floatObject{#3}%
+  \@ifnextchar[{\do@@hvFloat}{\do@@hvFloat[]}%
+}
+\def\do@@hvFloat[#1]#2#3{%
+  \gdef\hv@shortCap{#1}%
+  \gdef\hv@longCap{#2}%
+  \gdef\hv@label{#3}%
+  \ifhv@fullpage
+    \def\hvSet@CapWidth{n}%  relative value
+    \do@@@@hvFloat%  fullpage with caption on other page
+  \else
+    \ifhv@FULLPAGE
+      \def\hvSet@CapWidth{n}%  relative value
+      \do@@@@hvFloat%  fullpage with caption on other page
+    \else
+      \do@@@hvFloat
+    \fi
+  \fi
+}
+%
+\def\do@@@hvFloat{%  no special float page
+  \def\@tempa{90}%
+  \ifx\hvSet@rotAngle\@tempa 
+    \setlength\hvMaxCapWidth{\textheight}%
+  \else 
+    \setlength\hvMaxCapWidth{\hvWideWidth}%
+  \fi
+%
+% First we save the object in \hvObjectBox
+%
+  \ifx\hvSet@objectAngle\hv@Zero % rotate the object?
+    \savebox{\hvObjectBox}{\ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi}%
+  \else
+    \savebox{\hvObjectBox}{%
+      \rotatebox{\hvSet@objectAngle}{%
+        \ifhv@useOBox\usebox{\hvOBox}\else\hv@floatObject\fi
+      }%
+    }%
+  \fi
+  \setlength\hvObjectWidth{\wd\hvObjectBox}%
+%
+% Now we save the caption with its defined \hvCapWidth
+%
+  \ifx\hvSet@capWidth\hv@Width%                captionwidth=objectwidth
+    \setlength\hvCapWidth{\hvObjectWidth}%
+  \else
+    \ifx\hvSet@capWidth\hv@Height%             captionwidth=objectheight
+      \setlength\hvCapWidth{\ht\hvObjectBox}%
+    \else
+      \ifx\hvSet@capWidth\hv@Natural%          captionwidth=\linewidth-\objectwidth-separation
+        \ifhv@capbeside
+          \ifhv@wide
+            \setlength\hvCapWidth{\the\dimexpr\hvWideWidth-\hvObjectWidth-\hvSet@floatCapSep\relax}%
+          \else
+            \ifhv@star
+              \setlength\hvCapWidth{\the\dimexpr\textwidth-\hvObjectWidth-\hvSet@floatCapSep\relax}%
+            \else
+              \setlength\hvCapWidth{\the\dimexpr\linewidth-\hvObjectWidth-\hvSet@floatCapSep\relax}%
+            \fi
+          \fi
+        \else
+          \setlength\hvCapWidth{\columnwidth}%
+        \fi
+      \else
+        \ifhv@capbeside
+          \ifhv@wide
+            \setlength\hvCapWidth{\hvSet@capWidth\hvWideWidth}%
+            \setlength\@tempdima{\the\dimexpr\hvWideWidth-\hvObjectWidth-\hvSet@floatCapSep\relax}%
+          \else
+            \setlength\hvCapWidth{\hvSet@capWidth\columnwidth}%
+            \setlength\@tempdima{\the\dimexpr\columnwidth-\hvObjectWidth-\hvSet@floatCapSep\relax}%
+          \fi
+          \ifdim\hvCapWidth>\@tempdima
+            \setlength\hvCapWidth{\@tempdima}%
+          \fi
+        \else
+          \ifhv@wide
+            \setlength\hvCapWidth{\hvSet@capWidth\hvWideWidth}%
+          \else
+            \setlength\hvCapWidth{\hvSet@capWidth\columnwidth}%
+          \fi
+        \fi
+      \fi
+    \fi    
+  \fi 
+  \saveCaptionSkip			% we put this space ourselve
+  \ifx\hvSet@capAngle\hv@Zero 		% need rotation?
+    \sbox\hvCaptionBox{%   NO rotation
+      \begin{minipage}[b]{\hvCapWidth}% minipage, to get hyphenation
+	\ifx\relax\hv@caption@format\relax\else\expandafter\captionsetup\expandafter{\hv@caption@format}\fi
+        \ifhv@nonFloat
+	  \ifhv@onlyText\hv@longCap
+  	  \else
+	    \ifx\hv@floatType\hv@figure
+	      \ifx\relax\hv@shortCap\relax \figcaption{\hv@longCap}\else\figcaption[\hv@shortCap]{\hv@longCap}\fi
+	    \else
+	      \ifx\relax\hv@shortCap\relax \tabcaption{\hv@longCap}\else\tabcaption[\hv@shortCap]{\hv@longCap}\fi
+	    \fi
+	  \fi
+	\else
+          \let\@captype\hv@floatType
+          \expandafter\ifx\expandafter\relax\hv@shortCap\relax \caption{\hv@longCap}\else\caption[\hv@shortCap]{\hv@longCap}\fi
+	\fi
+	\expandafter\label\expandafter{\hv@label}%
+      \end{minipage}%
+    }%
+  \else
+    \sbox\hvCaptionBox{%   Rotation
+      \rotatebox{\hvSet@capAngle}{%
+        \begin{minipage}[b]{\hvCapWidth}% minipage, to get hyphenation
+ 	  \ifx\relax\hv@caption@format\relax\else\expandafter\captionsetup\expandafter{\hv@caption@format}\fi
+  	  \ifhv@nonFloat
+  	    \ifhv@onlyText\hv@longCap
+  	  \else
+	    \ifx\hv@floatType\hv@figure 
+	      \ifx\relax\hv@shortCap\relax \figcaption{\hv@longCap}\else\figcaption[\hv@shortCap]{\hv@longCap}\fi
+	    \else
+	      \ifx\relax\hv@shortCap\relax \tabcaption{\hv@longCap}\else\tabcaption[\hv@shortCap]{\hv@longCap}\fi
+	    \fi
+	  \fi
+	\else
+          \let\@captype\hv@floatType
+          \expandafter\ifx\expandafter\relax\hv@shortCap\relax \caption{\hv@longCap}\else\caption[\hv@shortCap]{\hv@longCap}\fi
+        \fi
+        \label{\hv@label}%
+        \end{minipage}%
+      }%  rotatebox
+    }%  \sbox
+  \fi
+%
+% now we have the object and the caption with the right
+% rotated angles saved in different boxes
+%%
+  \restoreCaptionSkip% save old values
+  \def\fps@figure{\hvSet@floatPos}%
+  \ifhv@nonFloat
+    \begingroup%			Start the nonfloat part
+  \else
+    \ifhv@star 
+      \@nameuse{\hv@floatType*}%		Start the floating environment *****************************
+    \else
+      \begin{\hv@floatType} %		Start the floating environment
+    \fi
+  \fi
+  \checkoddpage
+  \ifx\hvSet@objectPos\hv@Right\raggedleft\fi
+  \ifx\hvSet@objectPos\hv@Center
+    \ifhv@nonFloat\hspace*{\fill}\else\centering\fi
+  \fi
+  \ifx\hvSet@objectPos\hv@Outer
+    \ifoddpage\raggedleft\fi
+  \fi
+  \ifx\hvSet@objectPos\hv@Inner
+    \ifoddpage\else\raggedleft\fi
+  \fi
+%
+% to rotate object and caption together, we save all in another box
+% the caption comes first, if its on the left or the top
+%  0 caption left, inner and odd page, oneside inner
+%  1 caption top
+%  2 caption right, inner and even page, oneside outer
+%  3 caption bottom
+%
+  \ifx\hvSet@capPos\hv@Left
+    \hv@@capPos=0
+  \else
+    \ifx\hvSet@capPos\hv@Top
+      \hv@@capPos=1
+    \else
+      \ifx\hvSet@capPos\hv@Right
+        \hv@@capPos=2
+      \else
+        \ifx\hvSet@capPos\hv@Bottom
+          \hv@@capPos=3
+        \else
+          \ifx\hvSet@capPos\hv@Inner
+            \ifoddpageoroneside\hv@@capPos=0\else\hv@@capPos=2\fi
+          \else
+            \ifx\hvSet@capPos\hv@Outer
+              \ifoddpageoroneside\hv@@capPos=2\else\hv@@capPos=0\fi
+            \else 
+              \ifx\hvSet@capPos\hv@Before
+                \hv@@capPos=0 % same as cappos=right
+              \else
+                \ifx\hvSet@capPos\hv@After
+                  \hv@@capPos=2 % same as capPos=right
+                \fi
+              \fi
+            \fi
+          \fi
+        \fi
+      \fi
+    \fi
+  \fi
+%%%%
+  \savebox{\@tempboxa}{%                     ***** @tempbox   start
+    \expandafter\ifcase\the\hv@@capPos% 0 is LEFT     START \ifcase
+      \ifx\hvSet@capVPos\hv@Center
+        \put@CaptionBox
+        \hspace{\hvSet@floatCapSep}% capfloatsep
+        \put@ObjectBox
+      \else
+        \ifx\hvSet@capVPos\hv@Top% caption and object at top aligned
+          \put@CaptionBox[1]%
+          \hspace{\hvSet@floatCapSep}% capfloatsep
+          \put@ObjectBox[1]%
+        \else% caption on bottom
+          \put@CaptionBox[2]%
+          \hspace{\hvSet@floatCapSep}% capfloatsep
+          \put@ObjectBox[2]%
+        \fi
+      \fi%  end caption left
+    \or%1 is top
+      \ifdim\wd\hvCaptionBox>\wd\hvObjectBox
+	\begin{minipage}{\wd\hvCaptionBox}%
+      \else
+	\begin{minipage}{\wd\hvObjectBox}%
+      \fi
+      \centering
+      \ifhv@fbox
+	\fbox{\usebox{\hvCaptionBox}}\\[\hvBelowCaptionSkip]%
+	\fbox{\usebox{\hvObjectBox}}%
+      \else
+	\usebox{\hvCaptionBox}\\[\hvBelowCaptionSkip]%
+	\usebox{\hvObjectBox}%
+      \fi
+      \end{minipage}%
+    \or   %2 is right
+      \ifx\hvSet@capVPos\hv@Center
+        \put@ObjectBox
+	\hspace{\hvSet@floatCapSep}%
+	\put@CaptionBox
+      \else
+	\ifx\hvSet@capVPos\hv@Top
+          \put@ObjectBox[1]%
+          \hspace{\hvSet@floatCapSep}% capfloatsep
+          \put@CaptionBox[1]%
+	\else
+          \put@ObjectBox[2]%
+          \hspace{\hvSet@floatCapSep}% capfloatsep
+          \put@CaptionBox[2]%
+	\fi
+      \fi
+    \or %3 bottom
+      \ifdim\wd\hvCaptionBox>\wd\hvObjectBox
+        \begin{minipage}{\wd\hvCaptionBox}%
+      \else
+        \begin{minipage}{\wd\hvObjectBox}%
+      \fi
+      \centering
+      \ifhv@fbox
+        \fbox{\usebox{\hvObjectBox}}\\[\hvAboveCaptionSkip]%
+          \fbox{\usebox{\hvCaptionBox}}%
+        \else
+          \ifhv@objectFrame\frame{\usebox{\hvObjectBox}}\else\usebox{\hvObjectBox}\fi\\[\hvAboveCaptionSkip]%
+          \usebox{\hvCaptionBox}%
+        \fi
+      \end{minipage}%
+    \fi%   \ifcase\the\hv@@capPos
+  }% End savebox Object and caption            %%%%%%%%%%%%%%%%%  @tempboxa
+%
+% now we rotate the object and caption, if needed
+%
+  \ifhv@wide
+    \ifoddpageoroneside\else\ifoddpage\else\hspace*{-\marginparwidth}\fi\fi%   <- for wide and left page
+  \fi
+  \ifx\hvSet@rotAngle\hv@Zero
+    \usebox{\@tempboxa}%
+  \else
+    \rotatebox{\hvSet@rotAngle}{\usebox{\@tempboxa}}%
+  \fi
+  \ifhv@nonFloat
+    \ifx\hvSet@objectPos\hv@Center
+      \ifhv@nonFloat
+	  \hspace{\fill}%
+      \fi
+    \fi
+    \endgroup%	End the nonfloat part
+  \else
+    \ifhv@star
+      \@nameuse{end\hv@floatType*}%	End the floating environment
+    \else
+      \end{\hv@floatType}%	End the floating environment
+    \fi
+  \fi
+  \endgroup% startet at main \hvFloat
+}
+%
+\newenvironment{hvFloatEnv}[1][\textwidth]
+  {\minipage{#1}\center}
+  {\endcenter\endminipage}
+%
+
+\ExplSyntaxOn
+\let\clist@item@Nn\clist_item:Nn
+\let\l@clist@Type\l_clist_Type
+\let\l@clist@LofCaption\l_clist_LofCaption
+\let\l@clist@Label\l_clist_Label
+\let\clist@count@N\clist_count:N
+\ExplSyntaxOff
+
+\def\do@@@@hvFloat{%  special float page: caption <-> fullpage image
+  \ifx\hvSet@capPos\hv@After \hv@@capPos=1
+  \else
+    \ifx\hvSet@capPos\hv@Even  \hv@@capPos=2
+    \else
+      \ifx\hvSet@capPos\hv@Odd   \hv@@capPos=3
+      \else
+        \ifx\hvSet@capPos\hv@Inner   \hv@@capPos=4
+        \else
+          \ifx\hvSet@capPos\hv@Outer   \hv@@capPos=5
+          \else
+            \ifx\hvSet@capPos\hv@Right   \hv@@capPos=6 % only for twocolumn mode
+            \else
+              \ifx\hvSet@capPos\hv@Left   \hv@@capPos=7 % only for twocolumn mode
+              \else
+                \hv@@capPos=0
+              \fi
+            \fi
+          \fi
+        \fi
+      \fi
+    \fi
+  \fi
+  \checkoddpage
+  \set@caption@object%  set caption and object into a box
+  \ifcase\hv@@capPos%   caption before object 0-> _always_ left
+    \setBottomCaption\setPageObject        
+  \or%                  caption after object 1-> _always_ right
+    \setPageObject\setBottomCaption        
+  \or%                  caption on even page 2-> left page
+    \ifoddpage
+      \afterpage{\setBottomCaption\setPageObject}%
+    \else% we are on an even page
+%      \zsaveposy{hv@currentPos}%
+%      \ifdim\the\dimexpr\zposy{hv@currentPos}sp-\hv@BottomSpace-1cm>\ht\TBox  % enough space*
+        \setBottomCaption\setPageObject
+%      \else
+%        \afterpage{\afterpage{\setBottomCaption\setPageObject}}%
+%      \fi
+    \fi
+  \or%                caption on odd page  3->right page
+    \if@twoside
+      \if@twocolumn
+        \ifoddpage
+          \if@firstcolumn%  on right side
+            \setBottomCaption\setPageObject        
+          \else
+            \afterpage{\setPageObject\setBottomCaption}% start next column
+          \fi
+        \else% left (even) page
+          \if@firstcolumn
+            \afterpage{\setPageObject\setBottomCaption}% start next column
+          \else
+            \setPageObject\setBottomCaption
+          \fi
+        \fi
+      \else % onecolumn
+        \ifoddpage
+          \setPageObject\setBottomCaption
+        \else%  even page
+          \afterpage{\setPageObject\setBottomCaption}%
+        \fi
+      \fi
+    \else % oneside
+      \if@twocolumn
+        \ifoddpage
+          \if@firstcolumn%  on right side
+            \setBottomCaption\setPageObject
+          \else
+          \setPageObject\setBottomCaption
+          \fi
+        \else
+          \if@firstcolumn%  on left side
+            \afterpage{\setPageObject\setBottomCaption}%
+          \else
+            \setPageObject\setBottomCaption
+          \fi
+        \fi
+      \else % onecolumn
+        \ifoddpage
+          \setBottomCaption\setPageObject
+        \else
+          \afterpage{\setBottomCaption\setPageObject}%
+        \fi
+      \fi
+    \fi
+  \or%                caption on the inner column 4->inner
+    \set@caption@object
+    \if@twocolumn
+      \ifoddpage
+        \if@firstcolumn%  on right side
+	  \setBottomCaption\setPageObject        
+        \else          % right column on right side
+          \setPageObject\setBottomCaption%  start next firstcolumn next page
+        \fi
+      \else
+        \if@firstcolumn%  on left side
+          \afterpage{\afterpage{\setBottomCaption\setPageObject}}% start next page/first column
+        \else% left page/column
+          \setBottomCaption\setPageObject% start on same page/column 
+        \fi
+      \fi 
+    \else % onecolumn
+      \setBottomCaption\setPageObject
+    \fi       
+  \or%                caption on the outer column  5->outer
+    \set@caption@object
+    \if@twocolumn
+      \ifoddpage
+        \if@firstcolumn
+          \afterpage{\afterpage{\setBottomCaption\setPageObject}}%
+        \else
+          \afterpage{\setBottomCaption\setPageObject}%
+        \fi
+      \else% even page (left)
+        \if@firstcolumn
+          \setBottomCaption\setPageObject
+        \else   
+          
+        \fi
+      \fi 
+    \else% onecolumn
+      \setBottomCaption\setPageObject
+    \fi 
+  \or%                caption after object on same page 6->right for twocolumn
+    \if@twocolumn
+      \if@firstcolumn
+        \afterpage{\setPageObject\setBottomCaption}%
+      \else
+        \setPageObject\setBottomCaption
+      \fi
+    \else%  always caption _after_ object for onecolumn 
+      \setPageObject\setBottomCaption
+    \fi  
+  \or%                caption before object on same page 7->left for twocolumn
+    \if@twocolumn
+      \if@firstcolumn
+        \setBottomCaption\setPageObject
+      \else
+        \afterpage{\setBottomCaption\setPageObject}
+      \fi    
+    \else%        onecolumn -> same as before
+      \setBottomCaption\setPageObject
+    \fi
+  \fi
+  \endgroup% startet at main \hvFloat
+}%
+%
+\def\setBottomCaption{%
+  \begin{\hv@floatType}[!b]
+  \ifhv@separatorLine\drawSepLine\fi
+  \par
+  \usebox\hvCaptionBox
+  \end{\hv@floatType}%
+}
+
+\def\setPageObject{%
+  \ifhv@star
+    \begin{\hv@floatType*}[p]%
+  \else
+    \begin{\hv@floatType}[p]%
+  \fi
+  \ifhv@FULLPAGE
+    \vspace*{\the\dimexpr-1in-\voffset-\topmargin-\headheight-\headsep}%-0.5\baselineskip}%
+    \checkoddpage
+    \if@twoside
+      \ifoddpage
+        \hspace*{\the\dimexpr-\oddsidemargin-\parindent-1in}%
+      \else
+        \hspace*{\the\dimexpr-\evensidemargin-\parindent-1in}%
+      \fi
+    \else
+      \hspace*{\the\dimexpr-\oddsidemargin-\parindent-1in}%
+    \fi
+    %\put(0,0){
+    \AtBeginShipoutNext{\thispagestyle{empty}}%
+    \usebox\hvObjectBox%}%    
+  \else
+    \usebox\hvObjectBox
+  \fi
+  \ifhv@star
+    \end{\hv@floatType*}%
+  \else
+    \end{\hv@floatType}%
+  \fi
+}
+
+\ExplSyntaxOn
+
+\def\getMultiCaptionAndLabel{%
+  \global\sbox\hvCaptionBox{\minipage[b]{\linewidth}%
+    \ifx\relax\hv@caption@format\relax\else\expandafter\captionsetup\expandafter{\hv@caption@format}\fi
+    \setlength\belowcaptionskip{5pt}%
+    \setlength\abovecaptionskip{0pt}%
+    \hv@cntb=\clist_count:N\l_clist_Type
+    \advance\hv@cntb by \@ne
+    \hv@cnta=1
+    \loop
+      \edef\@captype{\clist_item:Nn\l_clist_Type{\hv@cnta}}%
+      \edef\@tempa{\clist_item:Nn\l_clist_LofCaption{\hv@cnta}}%
+      \ifx\@tempa\@empty
+        \caption{\clist_item:Nn\l_clist_Caption{\hv@cnta}}%
+      \else
+        \expandafter\caption\expandafter[\@tempa]{\clist_item:Nn\l_clist_Caption{\hv@cnta}}%
+      \fi    
+      \edef\@tempa{\clist_item:Nn\l_clist_Label{\hv@cnta}}%
+      \ifx\@tempa\@empty
+      \else
+        \expandafter\label\expandafter{\clist_item:Nn\l_clist_Label{\hv@cnta}-cap}\fi
+      \advance\hv@cnta by \@ne
+    \ifnum\hv@cnta<\hv@cntb
+    \repeat
+  \endminipage}%
+}
+\def\getMultiObjectAndLabel{%
+  \global\sbox\hvObjectBox{\minipage{\linewidth}%
+    \ifx\relax\hv@caption@format\relax\else\expandafter\captionsetup\expandafter{\hv@caption@format}\fi
+    \ifx\hvSet@objectPos\hv@Right\raggedleft\else
+      \ifx\hvSet@objectPos\hv@Left\raggedleft\else
+        \ifx\hvSet@objectPos\hv@Center\centering
+    \fi\fi\fi
+    \hv@cntb=\clist_count:N\l_clist_Type
+    \advance\hv@cntb by \@ne
+    \hv@cnta=1
+    \loop
+      \def\@temp{\clist_item:Nn\l_clist_Object{\hv@cnta}}%
+      \ifhv@objectFrame\frame{\@temp}\else\@temp\fi
+      \edef\@tempa{\clist_item:Nn\l_clist_Label{\hv@cnta}}%
+      \ifx\@tempa\@empty
+      \else
+        \refstepcounter{\@captype}%
+        \expandafter\label\expandafter{\clist_item:Nn\l_clist_Label{\hv@cnta}}%
+      \fi
+      \ifnum\hv@cnta<\clist_count:N\l_clist_Type\par\hv@vskip\fi
+      \advance\hv@cnta by \@ne
+    \ifnum\hv@cnta<\hv@cntb
+    \repeat
+  \endminipage}%
+}
+
+\def\getMultiSubCaptionAndLabel{%
+  \global\sbox\hvCaptionBox{\minipage{\linewidth}%
+    \ifx\relax\hv@caption@format\relax\else\expandafter\captionsetup\expandafter{\hv@caption@format}\fi
+    \setlength\belowcaptionskip{5pt}%
+    \setlength\abovecaptionskip{0pt}%
+    \xdef\@captype{\clist_item:Nn\l_clist_Type{1}}%  the same for all subfloats
+    \edef\@tempa{\clist_item:Nn\l_clist_LofCaption{1}}%
+    \ifx\@tempa\@empty
+      \caption{\clist_item:Nn\l_clist_Caption{1}}%
+    \else
+      \expandafter\caption\expandafter[\@tempa]{\clist_item:Nn\l_clist_Caption{1}}%
+    \fi    
+    \edef\@tempa{\clist_item:Nn\l_clist_Label{1}}%
+    \ifx\@tempa\@empty\else\expandafter\label\expandafter{\clist_item:Nn\l_clist_Label{1}-cap}\fi
+  \endminipage}%
+}
+
+\def\getMultiSubObjectAndLabel{%
+  \global\sbox\hvObjectBox{\minipage{\linewidth}%
+    \ifx\relax\hv@subcaption@format\relax\else\captionsetup[sub]{\hv@subcaption@format}\fi
+    \ifx\hvSet@objectPos\hv@Right\raggedleft\else
+      \ifx\hvSet@objectPos\hv@Left\raggedleft\else
+        \ifx\hvSet@objectPos\hv@Center\centering    
+    \fi\fi\fi
+    \hv@cntb=\clist_count:N\l_clist_Caption
+    \advance\hv@cntb by \@ne
+    \hv@cnta=2
+    \xdef\@captype{\clist_item:Nn\l_clist_Type{1}}%  the same for all subfloats
+    \loop
+      \def\@temp{\clist_item:Nn\l_clist_Object{\hv@cnta}}%
+      \ifhv@objectFrame\frame{\@temp}\else\@temp\fi
+      \begingroup
+      \edef\@tempa{\clist_item:Nn\l_clist_LofCaption{\hv@cnta}}%
+      \ifx\@tempa\@empty
+        \subcaption{\clist_item:Nn\l_clist_Caption{\hv@cnta}}%
+      \else
+        \expandafter\subcaption\expandafter[\@tempa]{\clist_item:Nn\l_clist_Caption{\hv@cnta}}%
+      \fi    
+      \edef\@tempa{\clist_item:Nn\l_clist_Label{\hv@cnta}}%
+      \ifx\@tempa\@empty
+      \else
+        \expandafter\label\expandafter{\clist_item:Nn\l_clist_Label{\hv@cnta}}%
+      \fi
+      \endgroup
+      \ifnum\hv@cnta<\clist_count:N\l_clist_Type\par\hv@vskip\fi
+      \advance\hv@cnta by \@ne
+    \ifnum\hv@cnta<\hv@cntb
+    \repeat
+    \edef\@tempa{\clist_item:Nn\l_clist_Label{1}}%    the  main label at the end
+    \ifx\@tempa\@empty
+    \else
+      \refstepcounter{\@captype}
+      \expandafter\label\expandafter{\@tempa}%
+    \fi
+  \endminipage}%
+}
+\ExplSyntaxOff
+
+\def\getSingleCaptionAndLabel{%
+  \global\sbox\hvCaptionBox{\minipage{\linewidth}%
+    \ifx\relax\hv@caption@format\relax\else\expandafter\captionsetup\expandafter{\hv@caption@format}\fi
+    \setlength\belowcaptionskip{5pt}%
+    \setlength\abovecaptionskip{0pt}%
+    \edef\@captype{\hv@floatType}%
+    \expandafter\ifx\expandafter\relax\hv@shortCap\relax 
+      \caption{\hv@longCap}%
+    \else
+      \caption[\hv@shortCap]{\hv@longCap}%
+    \fi
+  \expandafter\ifx\expandafter\relax\hv@label\relax\else\label{\hv@label-cap}\fi
+  \endminipage}%
+}
+
+\def\set@caption@object{%    first caption, then object
+  \ifhv@multiFloat
+    \getMultiCaptionAndLabel
+  \else
+    \ifhv@subFloat
+      \getMultiSubCaptionAndLabel
+    \else
+      \getSingleCaptionAndLabel
+    \fi
+  \fi
+  \edef\@captype{hv@p\hv@floatType}%
+  \ifhv@multiFloat
+    \getMultiObjectAndLabel
+  \else
+    \ifhv@subFloat
+      \getMultiSubObjectAndLabel
+    \else
+      \global\sbox\hvObjectBox{%
+        \refstepcounter{\@captype}%
+        \ifhv@objectFrame\frame{\hv@floatObject}\else\hv@floatObject\fi
+        \expandafter\ifx\expandafter\relax\hv@label\relax
+        \else
+          \expandafter\label\expandafter{\hv@label}%
+        \fi
+      }%
+    \fi
+  \fi
+}
+%
+\endinput
-- 
cgit v1.2.3

