summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/hvfloat/latex/hvfloat.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/hvfloat/latex/hvfloat.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/hvfloat/latex/hvfloat.sty')
-rw-r--r--macros/latex/contrib/hvfloat/latex/hvfloat.sty1032
1 files changed, 1032 insertions, 0 deletions
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