From ad2d81e12d91e301a58e30c1ed1b3f83ee1573f0 Mon Sep 17 00:00:00 2001 From: Karl Berry 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 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 +%% +%% 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| + \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