summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/hvfloat
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-12 23:56:53 +0000
committerKarl Berry <karl@freefriends.org>2006-01-12 23:56:53 +0000
commitad2d81e12d91e301a58e30c1ed1b3f83ee1573f0 (patch)
tree46735f74d7fa387cc67261db7b6cfa36d3c459f9 /Master/texmf-dist/tex/latex/hvfloat
parenta97fde11f2923bcd377e9046ec35844e8ea8f284 (diff)
hvfloat
git-svn-id: svn://tug.org/texlive/trunk@982 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/hvfloat')
-rw-r--r--Master/texmf-dist/tex/latex/hvfloat/hvfloat.sty413
1 files changed, 413 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..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