From ad2d81e12d91e301a58e30c1ed1b3f83ee1573f0 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Thu, 12 Jan 2006 23:56:53 +0000
Subject: hvfloat

git-svn-id: svn://tug.org/texlive/trunk@982 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/tex/latex/hvfloat/hvfloat.sty | 413 ++++++++++++++++++++++++
 1 file changed, 413 insertions(+)
 create mode 100644 Master/texmf-dist/tex/latex/hvfloat/hvfloat.sty

(limited to 'Master/texmf-dist/tex/latex/hvfloat/hvfloat.sty')

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..a3039d82038
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/hvfloat/hvfloat.sty
@@ -0,0 +1,413 @@
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{hvfloat}[2003/05/31 rotating of floating objects]
+%%
+%% IMPORTANT NOTICE:
+%%
+%% This is file `hvfloat.sty',
+%%
+%% Herbert Voss <voss@perce.de>
+%%
+%% 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.1}
+\def\filedate{2003/05/31}
+\message{`hvfloat' v\fileversion, \filedate\space (Herbert Voss)}
+%
+%
+\RequirePackage{graphicx}
+\RequirePackage{keyval}
+\RequirePackage{ifthen}
+%
+\newif\ifhv@fbox \hv@fboxfalse
+\DeclareOption{fbox}{%
+	\hv@fboxtrue%
+	\setlength{\fboxsep}{1pt}%
+}
+\ProcessOptions\relax
+%
+\newlength{\hvObjectWidth}
+\newlength{\hvCapWidth}
+\newlength{\hvMaxCapWidth}
+\newsavebox{\hvObjectBox}
+\newsavebox{\hvCaptionBox}
+\newsavebox{\hvOBox}
+%
+\newif\ifhv@useOBox
+\newif\ifhv@nonFloat
+\newif\ifhv@onlyText
+\newif\ifhv@framedCaption
+\newif\ifhv@framedObject
+%
+\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}%
+}
+\define@key{hvSet}{framedCaption}[false]{%		boxed caption
+	\lowercase{\hvSet@boolkey{#1}}{framedCaption}%
+}
+\define@key{hvSet}{framedObject}[false]{%		boxed object
+	\lowercase{\hvSet@boolkey{#1}}{framedObject}%
+}
+%
+\def\setDefaults{%
+\setkeys{hvSet}{%
+	floatPos=htbp, rotAngle=0, capWidth=0.8, capAngle=0,%
+	capPos=b, capVPos=c, objectPos=c, objectAngle=0,%
+	floatCapSep=5, useOBox=false, nonFloat=false,%
+	onlyText=false}%
+}
+\setDefaults%
+\ifhv@fbox
+	\setkeys{hvSet}{framedCaption=true, framedObject=true}%
+\fi
+%
+\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}%
+	\ifthenelse{\equal{#1}{}}{\caption{#2}}{\caption[#1]{#2}}}
+\newcommand{\tabcaption}[2][]{\def\@captype{table}%
+	\ifthenelse{\equal{#1}{}}{\caption{#2}}{\caption[#1]{#2}}}
+%
+%
+%
+\def\hvFloat{\@ifnextchar[{\do@hvFloat}{\do@hvFloat[]}}
+\def\do@hvFloat[#1]#2#3{%
+	\setDefaults%
+	\ifthenelse{\equal{#1}{}}{}{\setkeys{hvSet}{#1}}%
+	\gdef\hv@floatType{#2}%
+	\ifthenelse{\equal{#2}{}}{\setkeys{hvSet}{nonFloat=true}}{}%
+	\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%
+						    \ifthenelse{\equal{\hv@floatType}{figure}}{%
+							\ifthenelse{\equal{#1}{}}{\figcaption{#2}}{\figcaption[#1]{#2}}%
+						    }{%
+							\ifthenelse{\equal{#1}{}}{\tabcaption{#2}}{\tabcaption[#1]{#2}}%
+						    }%
+						\fi%
+					\else%
+						\ifx\hv@shortCap\empty\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%
+							    \ifthenelse{\equal{\hv@floatType}{figure}}{%
+								\ifthenelse{\equal{#1}{}}{\figcaption{#2}}{\figcaption[#1]{#2}}%
+							    }{%
+								\ifthenelse{\equal{#1}{}}{\tabcaption{#2}}{\tabcaption[#1]{#2}}%
+							    }%
+							\fi%
+						\else%
+							\ifx\hv@shortCap\empty\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@framedCaption%
+						\fbox{\parbox{\wd\hvCaptionBox}{\usebox{\hvCaptionBox}}}%
+					\else
+						\parbox{\wd\hvCaptionBox}{\usebox{\hvCaptionBox}}
+					\fi%
+		        	\hspace{\hvSet@floatCapSep pt}% capfloatsep
+					\ifhv@framedObject%
+						\fbox{\parbox{\wd\hvObjectBox}{\usebox{\hvObjectBox}}}
+					\else
+						\parbox{\wd\hvObjectBox}{\usebox{\hvObjectBox}}
+					\fi%
+				\else%
+					\ifx\hvSet@capVPos\hv@Top % caption at top
+						\ifhv@framedCaption%
+							\fbox{\raisebox{-\height}{\usebox{\hvCaptionBox}}}%
+						\else
+							\raisebox{-\height}{\usebox{\hvCaptionBox}}%
+						\fi
+						\hspace{\hvSet@floatCapSep pt}% capfloatsep
+						\ifhv@framedObject%
+							\fbox{\raisebox{-\height}{\usebox{\hvObjectBox}}}%
+						\else
+							\raisebox{-\height}{\usebox{\hvObjectBox}}%
+						\fi%
+					\else% caption on bottom
+						\ifhv@framedCaption%
+							\fbox{\usebox{\hvCaptionBox}}
+						\else
+							\usebox{\hvCaptionBox}
+						\fi%
+						\hspace{\hvSet@floatCapSep pt}%
+						\ifhv@framedObject%
+							\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@framedCaption%
+						\fbox{\usebox{\hvCaptionBox}}\\[\hvBelowCaptionSkip]
+					\else
+						\usebox{\hvCaptionBox}\\[\hvBelowCaptionSkip]%
+					\fi%
+					\ifhv@framedObject%
+						\fbox{\usebox{\hvObjectBox}}%
+					\else
+						\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@framedObject
+							\fbox{\usebox{\hvObjectBox}}\\[\hvAboveCaptionSkip]
+						\else
+							\usebox{\hvObjectBox}\\[\hvAboveCaptionSkip]
+						\fi%
+						\ifhv@framedCaption
+							\fbox{\usebox{\hvCaptionBox}}%
+						\else
+							\usebox{\hvCaptionBox}%
+						\fi%
+						\end{minipage}
+					\else% the last option: put the caption on the right
+						\ifx\hvSet@capVPos\hv@Center%
+							\ifhv@framedObject
+								\fbox{\parbox{\wd\hvObjectBox}{\usebox{\hvObjectBox}}}
+							\else
+								\parbox{\wd\hvObjectBox}{\usebox{\hvObjectBox}}
+							\fi%
+							\hspace{\hvSet@floatCapSep pt}%
+							\ifhv@framedCaption
+								\fbox{\parbox{\wd\hvCaptionBox}{\usebox{\hvCaptionBox}}}%
+							\else
+								\parbox{\wd\hvCaptionBox}{\usebox{\hvCaptionBox}}
+							\fi%
+						\else%
+							\ifx\hvSet@capVPos\hv@Top
+								\ifhv@framedObject
+									\fbox{\raisebox{-\height}{\usebox{\hvObjectBox}}}%
+								\else
+									\raisebox{-\height}{\usebox{\hvObjectBox}}%
+								\fi%
+								\hspace{\hvSet@floatCapSep pt}%
+								\ifhv@framedCaption
+									\fbox{\raisebox{-\height}{\usebox{\hvCaptionBox}}}%
+								\else
+									\raisebox{-\height}{\usebox{\hvCaptionBox}}%
+								\fi
+							\else
+								\ifhv@framedObject
+									\fbox{\usebox{\hvObjectBox}}%
+								\else
+									\usebox{\hvObjectBox}%
+								\fi
+								\hspace{\hvSet@floatCapSep pt}%
+								\ifhv@framedCaption
+									\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
+	\ifhv@fbox % reset local settings
+	    \setkeys{hvSet}{framedCaption=true, framedObject=true}
+	\fi
+}
+%
+\endinput
-- 
cgit v1.2.3

