summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/hvfloat/hvfloat.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2017-04-10 13:51:08 +0000
committerKarl Berry <karl@freefriends.org>2017-04-10 13:51:08 +0000
commit553fc76e143dd5a37bfc90a2035b9f5412143169 (patch)
tree2d4eea9a5c4012a8422da607149595190e042a0f /Master/texmf-dist/tex/latex/hvfloat/hvfloat.sty
parentf2e7325a1f405f4410dd6a372ff36adebee8560f (diff)
hvfloat rearrange
git-svn-id: svn://tug.org/texlive/trunk@43732 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/hvfloat/hvfloat.sty')
-rw-r--r--Master/texmf-dist/tex/latex/hvfloat/hvfloat.sty366
1 files changed, 366 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/hvfloat/hvfloat.sty b/Master/texmf-dist/tex/latex/hvfloat/hvfloat.sty
new file mode 100644
index 00000000000..d3fcaf319df
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/hvfloat/hvfloat.sty
@@ -0,0 +1,366 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{hvfloat}[2012/03/04 rotating of floating objects]
+%%
+%% IMPORTANT NOTICE:
+%%
+%% This is file `hvfloat.sty',
+%%
+%% Herbert Voss <voss@perce.de>
+%% march 04, 2017
+%%
+%% 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{1.2}
+\def\filedate{2017/01/28}
+\message{`hvfloat' v\fileversion, \filedate\space (Herbert Voss)}
+%
+\newif\ifhv@fbox \hv@fboxfalse
+\DeclareOption{fbox}{\hv@fboxtrue\setlength{\fboxsep}{1pt}}
+\ProcessOptions
+%
+\RequirePackage{graphicx}
+\RequirePackage{keyval}
+%\RequirePackage{ifthen}
+\RequirePackage{caption}
+%
+\newlength\hvObjectWidth
+\newlength\hvCapWidth
+\newlength\hvMaxCapWidth
+\newsavebox\hvObjectBox
+\newsavebox\hvCaptionBox
+\newsavebox\hvOBox
+%
+\newif\ifhv@useOBox
+\newif\ifhv@nonFloat
+\newif\ifhv@onlyText
+
+\def\hv@figure{figure}
+%
+\def\hvSet@boolkey#1#2{\csname hv@#2\ifx\relax#1\relax true\else#1\fi\endcsname}
+%
+\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}[.8]{ % 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}[b]{ % (l)eft|(b)ottom|(t)op|(r)ight
+ \def\hvSet@capPos{#1}% it is relativ to the object
+}
+\define@key{hvSet}{capVPos}[c]{ % (b)ottom|(c)enter|(t)op
+ \def\hvSet@capVPos{#1}% it is relativ to the object
+}
+\define@key{hvSet}{objectPos}[c]{ % (l)eft|(c)enter|(r)ight
+ \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}[5]{ % a width with the unit pt
+ \def\hvSet@floatCapSep{#1}%
+}
+\define@key{hvSet}{useOBox}[false]{ % use of the hvOBox contents
+ \lowercase{\hvSet@boolkey{#1}}{useOBox}%
+}
+\define@key{hvSet}{nonFloat}[false]{% Do not use float environment
+ \lowercase{\hvSet@boolkey{#1}}{nonFloat}%
+}
+\define@key{hvSet}{onlyText}[false]{% Write the caption only as text
+ \lowercase{\hvSet@boolkey{#1}}{onlyText}%
+}
+%
+\newcommand{\setDefaults}{%
+\setkeys{hvSet}{%
+ floatPos=htbp, rotAngle=0, capWidth=.8, capAngle=0,%
+ capPos=b, capVPos=c, objectPos=c, objectAngle=0,%
+ floatCapSep=5, useOBox=false, nonFloat=false,%
+ onlyText=false}%
+}
+%
+\def\hv@Top{t}
+\def\hv@Bottom{b}
+\def\hv@Right{r}
+\def\hv@Left{l}
+\def\hv@Center{c}
+\def\hv@Width{w}
+\def\hv@Height{h}
+\def\hv@Zero{0}
+%
+\newlength{\hvAboveCaptionSkip}
+\newlength{\hvBelowCaptionSkip}
+\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}%
+ \ifx\relax#1\relax \caption{#2}\else\caption[#1]{#2}\fi}
+\newcommand{\tabcaption}[2][]{\def\@captype{table}%
+ \ifx\relax#1\relax \caption{#2}\else\caption[#1]{#2}\fi}
+%
+%
+%
+\def\hvFloat{\@ifnextchar[{\do@hvFloat}{\do@hvFloat[]}}
+\def\do@hvFloat[#1]#2#3{%
+ \setDefaults
+ \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{%
+ \def\hv@shortCap{#1}
+ \def\hv@longCap{#2}
+ \def\hv@label{#3}
+%\newcommand*{\hvFloat}[5][]{%
+% [#1}: keyvalues
+% #2: type figure | table | ...
+% #3: float contents
+% [#4]: short caption
+% #5: caption
+% #6: label
+% \setDefaults%
+% \def\@tempa{#1}%
+% \ifx\@tempa\empty\else\setkeys{hvSet}{#1}\fi% set options, only when not empty
+ \def\@tempa{90}%
+ \ifx\hvSet@rotAngle\@tempa \setlength{\hvMaxCapWidth}{\textheight}
+ \else \setlength{\hvMaxCapWidth}{\linewidth}
+ \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\setlength{\hvCapWidth}{\hvObjectWidth}
+ \else
+ \ifx\hvSet@capWidth\hv@Height\setlength{\hvCapWidth}{\ht\hvObjectBox}
+ \else
+ \setlength{\hvCapWidth}{\hvObjectWidth}
+ \ifx\hvSet@capPos\hv@Left\addtolength{\hvMaxCapWidth}{-\hvObjectWidth}\fi
+ \ifx\hvSet@capPos\hv@Right\addtolength{\hvMaxCapWidth}{-\hvObjectWidth}\fi
+ \ifdim\hvSet@capWidth\columnwidth<\hvMaxCapWidth
+ \setlength{\hvCapWidth}{\hvSet@capWidth\columnwidth}
+ \else
+ \setlength{\hvCapWidth}{\hvMaxCapWidth}
+ \fi
+ \fi
+ \fi
+%
+% now we have the object and the caption with the right
+% rotated angles saved in boxes
+%
+ \def\fps@figure{\hvSet@floatPos}
+ \ifhv@nonFloat\begingroup% Start the nonfloat part
+ \else \begin{\hv@floatType}% Start the floating environment
+ \fi
+ \saveCaptionSkip% we put this space ourselve
+ \ifx\hvSet@capAngle\hv@Width % need rotation?
+ \sbox{\hvCaptionBox}{%
+ \begin{minipage}[b]{\hvCapWidth}% minipage, to get hyphenation
+ \ifhv@nonFloat
+ \ifhv@onlyText#2
+ \else
+ \ifx\hv@floatType\hv@figure
+ \ifx\relax#1\relax \figcaption{#2}\else\figcaption[#1]{#2}\fi
+ \else
+ \ifx\relax#1\relax \tabcaption{#2}\else\tabcaption[#1]{#2}\fi%
+ \fi
+ \fi
+ \else
+ \expandafter\ifx\expandafter\relax\hv@shortCap\relax \caption{#2}\else\caption[#1]{#2}\fi
+ \fi
+ \label{#3}%
+ \end{minipage}%
+ }%
+ \else
+ \sbox{\hvCaptionBox}{%
+ \rotatebox{\hvSet@capAngle}{%
+ \begin{minipage}[b]{\hvCapWidth}% minipage, to get hyphenation
+ \ifhv@nonFloat
+ \ifhv@onlyText#2
+ \else
+ \ifx\hv@floatType\hv@figure
+ \ifx\relax#1\relax \figcaption{#2}\else\figcaption[#1]{#2}\fi
+ \else
+ \ifx\relax#1\relax \tabcaption{#2}\else\tabcaption[#1]{#2}\fi%
+ \fi
+ \fi
+ \else
+ \expandafter\ifx\expandafter\relax\hv@shortCap\relax \caption{#2}\else\caption[#1]{#2}\fi%
+ \fi
+ \label{#3}%
+ \end{minipage}%
+ }%
+ }%
+ \fi%
+%%
+ \restoreCaptionSkip% save old values
+ \ifx\hvSet@objectPos\hv@Right\raggedleft%
+ \else%
+ \ifx\hvSet@objectPos\hv@Center
+ \ifhv@nonFloat\hspace*{\fill}\else\centering\fi%
+ \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
+%
+ \savebox{\@tempboxa}{%
+ \ifx\hvSet@capPos\hv@Left % caption on left side
+ \ifx\hvSet@capVPos\hv@Center%
+ \ifhv@fbox\fbox{\parbox{\wd\hvCaptionBox}{\usebox{\hvCaptionBox}}}%
+ \else \parbox{\wd\hvCaptionBox}{\usebox{\hvCaptionBox}}%
+ \fi%
+ \hspace{\hvSet@floatCapSep pt}% capfloatsep
+ \ifhv@fbox\fbox{\parbox{\wd\hvObjectBox}{\usebox{\hvObjectBox}}}
+ \else \parbox{\wd\hvObjectBox}{\usebox{\hvObjectBox}}
+ \fi%
+ \else%
+ \ifx\hvSet@capVPos\hv@Top % caption at top
+ \ifhv@fbox\fbox{\raisebox{-\height}{\usebox{\hvCaptionBox}}}%
+ \else \raisebox{-\height}{\usebox{\hvCaptionBox}}%
+ \fi
+ \hspace{\hvSet@floatCapSep pt}% capfloatsep
+ \ifhv@fbox\fbox{\raisebox{-\height}{\usebox{\hvObjectBox}}}%
+ \else \raisebox{-\height}{\usebox{\hvObjectBox}}%
+ \fi%
+ \else% caption on bottom
+ \ifhv@fbox\fbox{\usebox{\hvCaptionBox}}
+ \else\usebox{\hvCaptionBox}
+ \fi%
+ \hspace{\hvSet@floatCapSep pt}%
+ \ifhv@fbox\fbox{\usebox{\hvObjectBox}}
+ \else \usebox{\hvObjectBox}
+ \fi%
+ \fi%
+ \fi%
+ \else
+ \ifx\hvSet@capPos\hv@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}
+ \else
+ \ifx\hvSet@capPos\hv@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
+ \usebox{\hvObjectBox}\\[\hvAboveCaptionSkip]
+ \usebox{\hvCaptionBox}
+ \fi%
+ \end{minipage}
+ \else% the last option: put the caption on the right
+ \ifx\hvSet@capVPos\hv@Center%
+ \ifhv@fbox
+ \fbox{\parbox{\wd\hvObjectBox}{\usebox{\hvObjectBox}}}
+ \else
+ \parbox{\wd\hvObjectBox}{\usebox{\hvObjectBox}}
+ \fi%
+ \hspace{\hvSet@floatCapSep pt}%
+ \ifhv@fbox
+ \fbox{\parbox{\wd\hvCaptionBox}{\usebox{\hvCaptionBox}}}%
+ \else
+ \parbox{\wd\hvCaptionBox}{\usebox{\hvCaptionBox}}
+ \fi%
+ \else%
+ \ifx\hvSet@capVPos\hv@Top
+ \ifhv@fbox
+ \fbox{\raisebox{-\height}{\usebox{\hvObjectBox}}}%
+ \else
+ \raisebox{-\height}{\usebox{\hvObjectBox}}%
+ \fi%
+ \hspace{\hvSet@floatCapSep pt}%
+ \ifhv@fbox
+ \fbox{\raisebox{-\height}{\usebox{\hvCaptionBox}}}%
+ \else
+ \raisebox{-\height}{\usebox{\hvCaptionBox}}%
+ \fi
+ \else
+ \ifhv@fbox
+ \fbox{\usebox{\hvObjectBox}}%
+ \else
+ \usebox{\hvObjectBox}%
+ \fi
+ \hspace{\hvSet@floatCapSep pt}%
+ \ifhv@fbox
+ \fbox{\usebox{\hvCaptionBox}}%
+ \else
+ \usebox{\hvCaptionBox}%
+ \fi%
+ \fi%
+ \fi
+ \fi
+ \fi
+ \fi
+ }% End savebox Object and caption
+%
+% now we rotate the object and caption, if needed
+%
+ \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
+ \end{\hv@floatType}% End the floating environment
+ \fi
+}
+%
+\newenvironment{hvFloatEnv}[1][\textwidth]
+ {\minipage{#1}\center}
+ {\endcenter\endminipage}
+%
+\endinput