summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/kluwer/klufloa.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-12 23:57:34 +0000
committerKarl Berry <karl@freefriends.org>2006-01-12 23:57:34 +0000
commit3eb843585fc56ace68d2c095ff32de0c743b9446 (patch)
tree287b2687611d62336f3d9ce623f6040a9caecb1b /Master/texmf-dist/tex/latex/kluwer/klufloa.sty
parent27fa66bacafe77045cae158eb1a517a5600e3332 (diff)
kluwer
git-svn-id: svn://tug.org/texlive/trunk@1017 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/kluwer/klufloa.sty')
-rw-r--r--Master/texmf-dist/tex/latex/kluwer/klufloa.sty733
1 files changed, 733 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/kluwer/klufloa.sty b/Master/texmf-dist/tex/latex/kluwer/klufloa.sty
new file mode 100644
index 00000000000..0e77ca52e98
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/kluwer/klufloa.sty
@@ -0,0 +1,733 @@
+%
+%<*other>
+%
+%
+\ifcat a\noexpand @\let\next\relax\else \def\next{%
+\documentclass{kluwer}\usepackage{doc}\MakePercentIgnore}\fi\next
+\def\filedate{1998/03/13}
+%\changes{v??}{1997/07/10}{Fixes in @klu@caption: inserted [b] and moved
+% kaprotate code from the else to after the fi.}
+\def\filename{klufloa.sty}
+%\DoNotIndex{\@M,\def,\c@secnumdepth,\baselineskip,\@pnumwidth,\else,\fi}
+%\DoNotIndex{\newcommand,\z@,\relax,\renewcommand,\ifnum,\csname,\endcsname}
+%\DoNotIndex{\baselineskip,\vskip,\hskip,\relax,\secdef,\gdef,\@cla,\@clb}
+%\DoNotIndex{\normalsize,\protect,\global,\setbox,\hbox,\vbox,\endinput}
+%\DoNotIndex{\egroup,\endgroup,\bgroup,\begingroup,\let}
+%\CodelineIndex
+%\newcommand{\Bs}{$\backslash$}
+%\parindent=0pt
+%\parskip=3pt
+%\hfuzz=10pt
+%\MakeShortVerb{\|}
+%\setlength{\marginparwidth}{0in}
+%\addtolength{\textwidth}{4pc}
+%\begin{document}
+%\begin{opening}
+%\title{\filename}
+%\date{\filedate}
+%\author{T. \surname{Hoekwater}}
+%\institute{Kluwer Academic Publishers, Dordrecht}
+%\begin{abstract}
+% This internal stylefile takes care of floats and the |kaprotate| macro's \\
+%
+%\noindent
+%{\bf Disclaimer:} This stylefile is to be used by Kluwer Academic
+% Publishers in the contruction of full class files. Therefore, the
+% user interface is not very high-level, and is definately not meant
+% for normal usage. This stylefile is provided {\bf as is}, i.e. we
+% accept no responsibilities whatsoever. You are free to use this file
+% in any way you like, provided you do not make {\it any\/} changes.
+% If you {\it do\/} make changes, you have to rename the changed file.
+%\end{abstract}
+%\end{opening}
+%\tableofcontents
+%\newpage\section{Usage}
+% At this moment, there are three float environments done here:
+% |table|, |figure| (with their starred and sub... forms) and |algorithm|.
+%
+%
+% In order to facilitate customization, the following commands are
+% exported:
+%
+% \def\pitem[#1]{\item[\ttfamily\string #1]\SpecialUsageIndex{#1}}
+%\begin{description}
+%\pitem[\tabwidth] Allows setting the width of a table that has to be
+%centered, but does not contain a |tabular| or |TABULAR|. Also,
+%it might be handy for tables that contain more than one |tabular|.
+%(e.g. |\tabwidth{20pc}|)
+%\pitem[\tabfont] Font specification for the main text of tables.\\
+% (default value |\footnotesize|)
+%\pitem[\tabcapfont] Font specification for table captions.
+% (default value |\footnotesize|)
+%\pitem[\figcapfont] Font specification for caption of figures. There is no
+% definition for the font of the text of figures.
+% (defaultvalue |\footnotesize|)
+%\pitem[\tableindent] Indentation for tables.
+% (default given by stylefile)
+% Tables and figures can be either indented over a specified width, or
+% centered. This can be done independent of each other, but both
+% always use the same indentation. i.e: You cannot
+% have figures indented 4 picas and tables 2 picas, but you can have
+% indented tables with centered figures.
+%\pitem[\figindent] Indentation for figures. From the note above for these
+%two commands it follows that if both are given, they have to set the same
+% value. If they don't, the last given value will prevail.
+% (default given by stylefile)
+%\pitem[\figtabdot] The dot after the number. (default value |.|)
+%\pitem[\captionskip] Vertical skip between caption and main body of float.
+% (default value 6pt)
+%\pitem[\tabcapspace] Space between heading of caption and
+%text of caption. This is a vertical or horizontal skip, depending on
+%whether captions are split or not. Default value .5em.
+%\pitem[\splittabcaptions] Splits the table captions in two parts.
+%\pitem[\splitfigcaptions] Splits the figure captions in two parts.
+%\pitem[\splitcaptions] Combines both.
+%\pitem[\indentedcaptions] Ordinarily, captions are centered above or below
+%the float. This setting allows you to specify a specific indentation.
+%\pitem[\captionindent] Value used for the previous option The default value
+%is 0pt (appears to make most sense).
+%\end{description}
+%
+%
+%
+%\newpage\section{Implementation}
+%
+% The |klutab| is necesarry here, because we need the definitions
+% of tabular \& co that set the correct widths. It also makes sure that
+% these two are nicely tied in to eachother (version control problems).
+%
+% \begin{macrocode}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{klufloa}[\filedate ]
+\RequirePackage{klutab}[1997/05/30]
+% \end{macrocode}
+%\subsection{Float parameters}
+% These are standard as in \LaTeXe.
+% \begin{macrocode}
+%</other>
+%<*main>
+\setcounter{topnumber}{2}
+\setcounter{bottomnumber}{1}
+\setcounter{totalnumber}{3}
+\setcounter{dbltopnumber}{2}
+% \end{macrocode}
+% The parameters below try to ensure that there are not so many float
+% pages. (prevents empty white space).
+%
+% In the old stylefiles,
+% |\topfraction| was $.99$, but that was bit to much, resulting in
+% pages with a huge float and only two text lines. Now a float has
+% to be $>.85$|\textheight| before it will result in a float page.
+% (oversimplified, but this is the general idea). This leaves
+% space on the page for a few more textlines.
+%
+% |\bottomfraction| used to be $.3$, but that is to small for almost
+% any float this style generates; there are split captions and tabnotes
+% to account for, so the value has increased a bit.
+% \begin{macrocode}
+\renewcommand{\topfraction}{.85}
+\renewcommand{\textfraction}{.01}
+\renewcommand{\bottomfraction}{.4}
+\renewcommand{\floatpagefraction}{.84}
+\renewcommand{\dblfloatpagefraction}{.84}
+\renewcommand{\dbltopfraction}{.7}
+% \end{macrocode}
+%\newpage
+% \subsection{Helper macros}
+% |\figtabdot| serves the same purpose as |\sectiondot| elsewhere,
+% and the
+% names of various strings.
+% \begin{macrocode}
+\def\figtabdot{.}
+\def\tablename{Table}%
+\def\figurename{Figure}%
+\def\algorithmname{Algorithm}%
+% \end{macrocode}
+% |\maxfloatwidth| is the allowed width of the table.\\
+% (If this is a rotated table or figure, it will use all of the
+% page. Of course, |\maxfloatwidth| then is |\textheight|.)\\
+% |\figtabbox| will contain the total float as a vbox.
+% |\floatindent| is the indentation skip for indented tables \& figures.
+% The last defined value will overwrite the previous one.\\
+% |\@tabskip| is an aid in helping to decide indentation of rotated tables.\\
+% |\cap@type| is an aid in keeping track of caption types\\
+% |\captionskip| is the vertical skip between caption and main body.
+% \begin{macrocode}
+\newdimen\maxfloatwidth
+\newbox\figtabbox
+\newdimen\floatindent
+\newdimen\@tabskip
+\gdef\cap@type{0}
+\newdimen\captionskip
+\setlength\captionskip{6pt}
+% \end{macrocode}
+%
+%
+% |\@tabwidth| is
+% supposed to contain the width of the table. (the width of |\figtabbox| is
+% probably either |\textwidth| or zero.) |tabular| and |TABULAR| from
+% |klutab.sty| set
+% this value automatically, but so should every |table|. If your table
+% does not contain a |tabular|, you can set this value yourself:
+% just say |\tabwidth{..}| somewhere in your table. Your text will
+% be typeset inside a |\vbox| with width |\maxfloatwidth|.
+% \begin{macrocode}
+\newdimen\@tabwidth
+\setlength\@tabwidth{\textwidth}
+\def\tabwidth#1{\global\setlength\@tabwidth{#1}}
+% \end{macrocode}
+%
+% |\@getindent| calculates the value of |\maxfloatwidth|,
+% It is called from figure and table.
+%
+% For rotated floats, |\maxfloatwidth| == |\vsize|. The use
+% of |\vsize| here is probably
+% better than |\textheight|, because it allows use of minipages and
+% |\vbox|es to get special effects (where |\textheight| $>$ |\vsize|).
+%
+% |\@floatcorrect| fixes indentation for rotated floats. This and\\
+% |\hbox@to@floatwidth| are just shortcuts.
+% \begin{macrocode}
+\def\@getmaxwidth{\maxfloatwidth=\hsize
+ \if@kaprotate \maxfloatwidth=\textheight \fi }
+\def\@floatcorrect{\if@kaprotate\else
+ \advance\maxfloatwidth -\floatindent \fi }
+\def\hbox@to@floatwidth#1{\leavevmode
+ \hbox to \@tabwidth{#1}}
+% \end{macrocode}
+%
+% |\@getindent| calculates the values for |\@tabskip| and
+% |\@floatindent|. The first check initializes |\@tabwidth| for
+% anything except tables. The macro\\ |\@centeredfloat| does the
+% hard work for centered floats, where |\floatindent| is not given
+% beforehand.
+% \begin{macrocode}
+\def\@getindent{%
+ \ifnum\cap@type=2 \else
+ \@tabwidth=\if@kaprotate \textheight \else \hsize \fi
+ \if@figindent\advance \@tabwidth -\floatindent \fi\fi
+ \ifnum\cap@type=1
+ \if@figindent \@tabskip\floatindent
+ \else \@centeredfloat \fi
+ \else \ifnum\cap@type=2
+ \if@tabindent \@tabskip\floatindent
+ \else \@centeredfloat \fi
+ \ifdim \@tabwidth > \maxfloatwidth
+ \@tabskip 0pt
+ \floatindent 0pt
+ \fi
+ \else
+ \@centeredfloat
+ \fi
+ \fi
+}
+% \end{macrocode}
+%
+% |\@centeredfloat|\\
+% Calculate |\@tabskip| for centering. In this macro, we know the
+% float will be centered. We calculate |\floatindent| ourselves from
+% |\maxfloatwidth|.
+%
+% We need to maintain this indentation for rotated floats (so they
+% will be vertically centered), but |\@tabskip| needs to be re-done.
+%
+% \begin{macrocode}
+\def\@centeredfloat{%
+ \floatindent\maxfloatwidth
+ \advance\floatindent by -\@tabwidth
+ \divide\floatindent by 2
+ \@tabskip\floatindent
+ \if@kaprotate
+ \@tabskip\hsize
+ \advance\@tabskip by -\ht\figtabbox
+ \advance\@tabskip by -\dp\figtabbox
+ \divide\@tabskip by 2
+ \fi
+}
+% \end{macrocode}
+%
+% \subsection{Table caption commands}
+% Here is the code for the captions.
+%
+%
+% |\indentedcaptions| is a user option that indents captions instead
+% (over a default value of 0pt).
+% \begin{macrocode}
+\newif\if@centeredfigcaption
+\newif\if@centeredtabcaption
+\@centeredtabcaptiontrue
+\@centeredfigcaptiontrue
+\def\indentedtabcaptions{\global\@centeredtabcaptionfalse }
+\def\indentedfigcaptions{\global\@centeredfigcaptionfalse }
+\def\indentedcaptions{\global\@centeredtabcaptionfalse
+ \global\@centeredfigcaptionfalse}
+\newdimen\captionindent
+\setlength\captionindent{0pt}
+\newtoks\@floatcaption
+\def\tabcapspace{.5em}
+\def\tabcapfont{\footnotesize }
+\long\def\@maketabcaption#1#2{\global\@floatcaption={#2}%
+ \message{\tablename\space\thetable \if@kaprotate
+ \space(rotated) \fi}}
+% \end{macrocode}
+%
+% Captions are centered above the table by default.\footnote{
+% In real life, {\tt @klu@caption} would be called {\tt make@caption},
+% since these do the typesetting}. This code is called from |\endtable|.
+% \begin{macrocode}
+\def\@klu@caption{%
+ \setbox1=\hbox{\tabcapfont\fnum@table\hskip\tabcapspace
+ \the\@floatcaption}%
+ \noindent
+ \ifdim\wd1 >\@tabwidth
+ {\if@centeredtabcaption\centering\else \hskip \captionindent\fi
+ \parbox[b]{\@tabwidth}{\tabcapfont\unhbox1}}%
+ \else
+ \hbox to \@tabwidth{%
+ \if@centeredtabcaption \hfil \else \hskip \captionindent\fi
+ \tabcapfont\fnum@table
+ \hskip\tabcapspace{\tabcapfont\the\@floatcaption}\hfil }%
+ \fi
+ \if@kaprotate \else \par \vskip -\baselineskip \fi
+ \par
+}
+\def\@klu@figcaption{%
+ \setbox1=\hbox{\figcapfont\fnum@figure\hskip\tabcapspace
+ \the\@floatcaption}%
+ \noindent
+ \ifdim\wd1 >\@tabwidth
+ {\if@centeredfigcaption\centering\else \hskip \captionindent\fi
+ \parbox{\@tabwidth}{\figcapfont\unhbox1}}%
+ \else
+ \hbox to \@tabwidth{%
+ \if@centeredfigcaption \hfil\else \hskip \captionindent\fi
+ \tabcapfont\fnum@figure
+ \hskip\tabcapspace{\figcapfont\the\@floatcaption}\hfil}%
+ \fi
+ \par
+}
+% \end{macrocode}
+%
+% |\splitcaptions| is a user option to generate a caption in which the
+% `Table 1' is separated from the caption text. The resulting
+% definitions depend on being inside a
+% vbox when called.
+% \begin{macrocode}
+\def\splitcaptions{\splittabcaptions\splitfigcaptions}
+\def\splittabcaptions{
+ \def\@klu@caption{%
+ \setbox1=\hbox{\tabcapfont\the\@floatcaption}%
+ \noindent
+ \ifdim\wd1 >\@tabwidth
+ \hbox to \@tabwidth{\if@centeredtabcaption\hss\else
+ \hskip\captionindent\fi
+ \tabcapfont\fnum@table\hss}\vskip \tabcapspace
+ \vskip 6pt
+ {\if@centeredtabcaption\centering\fi
+ \hskip \captionindent
+ \parbox{\@tabwidth}{\tabcapfont\unhbox1}}%
+ \else
+ \hbox to \@tabwidth{%
+ \if@centeredtabcaption \hfil\else \hskip\captionindent\fi
+ \tabcapfont\fnum@table\strut\hfil }\vskip \tabcapspace
+ \hbox to \@tabwidth{%
+ \if@centeredtabcaption \hfil\else \hskip\captionindent \fi
+ \tabcapfont\the\@floatcaption \hfil }%
+ \if@kaprotate \else \par \vskip -\baselineskip \fi
+ \fi
+ \par
+}}
+\def\splitfigcaptions{\def\@klu@figcaption{%
+ \setbox1=\hbox{\figcapfont\the\@floatcaption}%
+ \noindent
+ \ifdim\wd1 >\@tabwidth
+ \hbox to \@tabwidth{\if@centeredfigcaption\hfil\else
+ \hskip\captionindent\fi
+ \figcapfont\fnum@figure\hfil}\vskip \tabcapspace
+ \vskip 6pt
+ {\if@centeredfigcaption\centering\fi \hskip \captionindent
+ \parbox{\@tabwidth}{\figcapfont\unhbox1}}%
+ \else
+ \hbox to \@tabwidth{%
+ \if@centeredfigcaption \hfil\else \hskip\captionindent\fi
+ \figcapfont\fnum@figure\strut\hfil }\vskip \tabcapspace
+ \hbox to \@tabwidth{%
+ \if@centeredfigcaption \hfil\else \hskip\captionindent\fi
+ \figcapfont\the\@floatcaption \hfil }%
+ \fi
+ \par
+}}%
+% \end{macrocode}
+%\newpage
+%\subsection{Table}
+% Standard \LaTeX\ definitions first:
+%
+% |\newcounter| removed 7/6/96 to prevent errors when used as package.
+% (`counter |\c@table| already defined')
+% \begin{macrocode}
+\@ifundefined{thetable}{\newcounter{table}}{}
+\def\thetable{\arabic{table}}
+\def\fps@table{tbp}
+\def\ftype@table{2}
+\def\ext@table{lot}
+\def\fnum@table{\tablename~\thetable\figtabdot}
+% \end{macrocode}
+% Now the switch to control indentation.
+%
+% \begin{macrocode}
+\newif\if@tabindent \@tabindentfalse
+\def\tableindent#1{%
+ \global\floatindent= #1\global\@tabindenttrue }
+% \end{macrocode}
+% Default font for tables.
+% This could also be used to redefine the font
+% defaults like family and shape.
+% \begin{macrocode}
+\def\tabfont{\footnotesize}
+% \end{macrocode}
+% |\tabnotes| is intended to be used as `footnote' to a tabular
+% environment. |\@tabnotes| will be cleared before every table.
+% \begin{macrocode}
+\def\@tabnotes{}
+\newcounter{tabnote}
+\def\tabnotemark{\ensuremath{^{\thetabnote}}}
+\def\thetabnote{\arabic{tabnote}}
+\def\tabnotesep{\par}
+\def\tabnote#1{\stepcounter{tabnote}%
+ \rlap{\tabnotemark }%
+ \begingroup
+ \let\tabnotesep\relax
+ \xdef\@tabnotes{\@tabnotes\tabnotesep \tabnotemark #1\par}%
+ \endgroup }
+\long\def\tabnotes#1{\gdef\@tabnotes{{\tabfont\noindent #1\par}}}
+% \end{macrocode}
+% Now for the macro's that set the table itself. Just to recall: \\[6pt]
+%|\maxfloatwidth|== max. width of table\\
+%|\@tabskip|== horizontal offset\\
+%|\floatindent|==indent before table proper\\
+%|\@tabnotes|==macro containing tabnotes (in Tabfont)\\
+%|\figtabbox|==vbox containing table (minus caption \& tabnotes)
+%
+% Non-rotated version:\\
+% Check width of caption. If it is too wide to fit on one line, put it
+% in a |\parbox| with proper |\floatindent| before it.
+%
+% \begin{macrocode}
+\def\@setnotrotatedtabbox{%
+ \setbox4=\hbox to \maxfloatwidth{\vbox{\hsize=\maxfloatwidth
+ \@klu@caption
+ \vskip\captionskip \leavevmode
+ \unvbox\figtabbox\par
+ \noindent\parbox{\@tabwidth}{\tabfont\@tabnotes}\par}}%
+ \if@fixedfloat\calc@fixedspace4\fi
+ \noindent\kern \floatindent\box4
+ }
+% \end{macrocode}
+% Rotated version. We are inside a |\vbox| here, so we typeset 3
+% hboxes (and a |\vskip|).
+%
+% |\maxfloatwidth| is |\textheight| here, causing overfull boxes.
+%
+% \begin{macrocode}
+\def\@setrotatedtabbox{\begingroup \hfuzz=\vsize
+ \setbox2\hbox to \textheight{\hfil
+ \vbox to \hsize{\hsize=\vsize
+ \vfil
+ \hbox{\hbox@to@floatwidth{\vbox{\@klu@caption }}}
+ \vskip\captionskip
+ \hbox{\hbox@to@floatwidth{\box\figtabbox\hss}}%
+ \hbox{\hbox@to@floatwidth{\parbox{\@tabwidth}{\tabfont\@tabnotes}\hfil }}%
+ \vss
+ }\hss}\rotl{2}\endgroup
+}
+% \end{macrocode}
+% |\@makecaption| will be |\let| to |\@maketabcaption| in for the
+% duration of the table.
+%
+% This is quite simple code, apart from handling the optional argument
+% ourselves. |kaprotate| effectively kills Overfull and Underfull
+% hbox-es. I don't like that, but I also don't like the messages I
+% always get (Overfull hbox with width = |\textheight| $-$ |\textwidth|).
+% \begin{macrocode}
+\def\table{\let\@makecaption\@maketabcaption
+ \global\@floatcaption={}%
+ \gdef\@tabnotes{}\setcounter{tabnote}{0}\gdef\cap@type{2}%
+ \@ifnextchar[{\t@blewithoptions}{\t@blewithoptions[tbp]}}
+\def\t@blewithoptions[#1]{%
+ \if H#1\@fixedtable \else \@float{table}[#1]\fi
+ \@getmaxwidth \if@tabindent \@floatcorrect \fi
+ \setbox\figtabbox\vbox\bgroup\tabfont
+ \if@kaprotate\hfuzz=\vsize\fi }%
+% \end{macrocode}
+%
+% This |\hfuzz| is a bit more precise. At least ik will warn if the
+% tabular itself is too large.
+% \begin{macrocode}
+\def\endtable{\egroup \@getindent
+ \gdef\cap@type{0}\noindent
+ \hfuzz=\floatindent
+ \if@kaprotate \@setrotatedtabbox
+ \else \@setnotrotatedtabbox \fi
+ \if@fixedfloat \vskip\intextsep \@fixedfloatfalse
+ \else \end@float \fi
+ \hfuzz =0.1pt }%
+% \end{macrocode}
+%\subsection{Table starred}
+% This code is basically identical to the code above.
+% Multicolumn `Here' floats in twocolumn layout don't work, for obvious
+% reasons. If you need something like that, fake it with the
+% twocolumn package.
+% \begin{macrocode}
+\@namedef{table*}{\let\@makecaption\@maketabcaption
+ \global\@floatcaption={}%
+ \gdef\@tabnotes{}\setcounter{tabnote}{0}\gdef\cap@type{2}%
+ \@ifnextchar[{\dt@blewithoptions}{\dt@blewithoptions[tbp]}}
+\def\dt@blewithoptions[#1]{%
+ \if H#1\if@twocolumn \@dblfloat{table}[t]\else \@fixedtable\fi
+ \else \@dblfloat{table}[#1]\fi
+ \@getmaxwidth \if@tabindent \@floatcorrect \fi
+ \setbox\figtabbox\vbox\bgroup\tabfont
+ \if@kaprotate \hfuzz=\vsize \fi }%
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@namedef{endtable*}{\egroup \@getindent
+ \gdef\cap@type{0}\noindent
+ \hfuzz=\floatindent
+ \if@kaprotate \@setrotatedtabbox
+ \else \@setnotrotatedtabbox \fi
+ \if@fixedfloat \vskip\intextsep \@fixedfloatfalse
+ \else \end@dblfloat \fi
+ \hfuzz=0.1pt }%
+% \end{macrocode}
+% \subsection{fixed point tables and figures}
+% The fixedtable option. If there is enough room on the page, the
+% box is typeset right away. If there is not enough space, the page is
+% ended and the box is typeset at the top of the next page. This may
+% conflict with following `top' floats, but the exact location in
+% the text is maintained.
+%
+% Don't try to use |[H]| on rotated tables, and twocolumn will produce
+% overlapping text in the second column, also, these will not appear
+% in a `list of tables' unless you specifically ask that.
+% \begin{macrocode}
+\newif\if@fixedfloat
+\def\@fixedtable{\vskip\intextsep \@fixedfloattrue
+ \def\caption{\@ifnextchar[{\f@xedcap{table}}%
+ {\f@xedcap{table}[]}}}
+\def\@fixedfigure{\vskip\intextsep \@fixedfloattrue
+ \def\caption{\@ifnextchar[{\f@xedcap{figure}}%
+ {\f@xedcap{figure}[]}}}
+\def\f@xedcap#1[#2]#3{\refstepcounter{#1}\def\@tempa{#2}%
+ \ifx\@tempa\empty
+ \else \addcontentsline{\csname ext@#1\endcsname}{#1}{#2}\fi
+ \message{#1\space\csname the#1\endcsname \space (fixed)}%
+ \global\@floatcaption={#3}}
+\def\calc@fixedspace#1{%
+ \@tempdima=\pagegoal
+ \@tempdimb=\dp#1
+ \advance\@tempdimb \ht#1
+ \advance\@tempdima -\pagetotal
+ \advance\@tempdima -2\intextsep
+ \wlog{pageleft= \the\@tempdima,
+ size= \the\@tempdimb }%
+ \ifdim\@tempdima>\@tempdimb \else \newpage \fi}
+% \end{macrocode}
+%
+%\newpage \subsection{Figure}
+% Now we are going to do this all over again for
+% figures. Documentation will only mark important differences.
+%
+% Parameters.
+%
+% \begin{macrocode}
+\@ifundefined{thefigure}{\newcounter{figure}}{}
+\def\thefigure{\arabic{figure}}
+\def\fps@figure{tbp}
+\def\ftype@figure{1}
+\def\ext@figure{lof}
+\def\fnum@figure{\figurename~\thefigure\figtabdot}
+% \end{macrocode}
+% Indentation, font and caption.
+% \begin{macrocode}
+\newif\if@figindent \@figindentfalse
+\def\figindent#1{%
+ \global\floatindent #1
+ \global\@figindenttrue }
+\def\figcapfont{\footnotesize}
+\long\def\@makefigcaption#1#2{%
+ \message{\figurename\space\thefigure
+ \if@kaprotate \space (rotated)\fi }%
+ \global\@floatcaption={#2}}
+% \end{macrocode}
+%
+% The |fixed| option.
+%
+% \begin{macrocode}
+% \end{macrocode}
+% The figure environment itself.
+% \begin{macrocode}
+\def\figure{%
+ \gdef\cap@type{1}%
+ \let\@makecaption\@makefigcaption
+ \global\@floatcaption={}%
+ \@ifnextchar[{\f@gurewithoptions}{\f@gurewithoptions[tbp]}}%
+\def\f@gurewithoptions[#1]{%
+ \let\saved@centerline\centerline
+ \if H#1\@fixedfigure \else \@float{figure}[#1]\fi
+ \@getmaxwidth \if@figindent \@floatcorrect
+ \def\centerline##1{##1}\fi
+ \setbox\figtabbox\vbox\bgroup }%
+\def\endfigure{\egroup
+ \@getindent \gdef\cap@type{0}%
+ \hfuzz=\floatindent
+ \if@kaprotate \@setrotatedfigbox \pagebreak
+ \else \@setnotrotatedfigbox \fi
+ \let\centerline\saved@centerline
+ \if@fixedfloat \vskip\intextsep \@fixedfloatfalse
+ \else \end@float \fi
+ \hfuzz=0.1pt }%
+% \end{macrocode}
+% \subsection{figure starred}
+% \begin{macrocode}
+\@namedef{figure*}{%
+ \def\cap@type{1}%
+ \let\@makecaption\@makefigcaption
+ \global\@floatcaption={}%
+ \@ifnextchar[{\df@gurewithoptions}{\df@gurewithoptions[ttp]}}
+\def\df@gurewithoptions[#1]{%
+ \let\saved@centerline\centerline
+ \if H#1 \@fixedfigure \else \@dblfloat{figure}[#1]\fi
+ \@getmaxwidth \if@figindent \@floatcorrect
+ \def\centerline##1{##1}\fi
+ \setbox\figtabbox\vbox\bgroup }%
+\@namedef{endfigure*}{\egroup
+ \@getindent \gdef\cap@type{0}%
+ \hfuzz=\floatindent
+ \if@kaprotate \@setrotatedfigbox
+ \else \@setnotrotatedfigbox \fi
+ \let\centerline\saved@centerline
+ \if@fixedfloat \vskip\intextsep \@fixedfloatfalse
+ \else \end@dblfloat \fi
+ \hfuzz=0.1pt }%
+% \end{macrocode}
+% Non-rotated version (in figures |\caption| is done last):
+% \begin{macrocode}
+\def\@setnotrotatedfigbox{%
+ \setbox4=\hbox to \maxfloatwidth{\vbox{\hsize=\maxfloatwidth
+ \unvbox\figtabbox
+ \vskip\captionskip
+ \@klu@figcaption }}%
+ \if@fixedfloat\calc@fixedspace4 \fi
+ \noindent\kern \floatindent\box4
+}
+% \end{macrocode}
+% Rotated version:
+%
+% \begin{macrocode}
+\def\@setrotatedfigbox{%
+ \setbox2\vbox to \hsize{\hsize=\textheight
+ \leavevmode
+ \vrule width \textheight height 0pt depth 0pt\par
+ \vskip \@tabskip
+ \hbox to \textheight{\hss\box\figtabbox\hss}%
+ \vskip\captionskip
+ \hbox to \textheight{\vbox{\@klu@figcaption }}
+ \vss
+ }\rotl{2}}%
+% \end{macrocode}
+%\newpage \subsection{Algorithm}
+% This is a `standard' float.
+% \begin{macrocode}
+\newcounter{algorithm}
+\def\thealgorithm{\arabic{algorithm}}
+\def\fps@algorithm{tbp}
+\def\ftype@algorithm{4}
+\def\ext@algorithm{lof}
+\long\def\@makealgocaption#1#2{%
+ \hbox to \hsize{\parbox[t]{\hsize}{{\vskip 1ex \tabcapfont
+ #1\figtabdot~~#2}}}}
+\def\fnum@algorithm{\algorithmname\space \thealgorithm}
+\def\algorithm{\let\@makecaption\@makealgocaption
+ \@float{algorithm}\footnotesize\obeyspaces\obeylines}
+\let\endalgorithm\end@float
+% \end{macrocode}
+%\subsection{subtable and subfigure}
+% These are the sub... environments. If you need comment on what
+% happens, please see |kluthm.sty|, definition of |subequation|.
+% \begin{macrocode}
+\def\subtable{\@ifnextchar[{\@subtable}{\@subtable[alph]}}
+\def\@subtable[#1]{\refstepcounter{table}%
+ \def\@testoption{arabic}\def\@testparam{#1}%
+ \begingroup
+ \edef\old@table{\the\c@table}%
+ \edef\old@thetable{\thetable}%
+ \setcounter{table}{0}%
+ \ifx\@testoption\@testparam
+ \def\thetable{\old@thetable.\csname #1\endcsname{table}}%
+ \else
+ \def\thetable{\old@thetable\csname #1\endcsname{table}}%
+ \fi}
+\def\endsubtable{\setcounter{table}{\old@table}%
+ \endgroup \global\@ignoretrue}
+\def\subfigure{\@ifnextchar[{\@subfigure}{\@subfigure[alph]}}
+\def\@subfigure[#1]{\refstepcounter{figure}%
+ \def\@testoption{arabic}\def\@testparam{#1}%
+ \begingroup
+ \edef\old@figure{\the\c@figure}%
+ \edef\old@thefigure{\thefigure}%
+ \setcounter{figure}{0}%
+ \ifx\@testoption\@testparam
+ \def\thefigure{\old@thefigure.\csname #1\endcsname{figure}}%
+ \else
+ \def\thefigure{\old@thefigure\csname #1\endcsname{figure}}%
+ \fi}
+\def\endsubfigure{\setcounter{figure}{\old@figure}%
+ \endgroup \global\@ignoretrue}
+% \end{macrocode}
+% \subsection{kaprotate}
+% This appears to be an afterthought now, but in fact it is a quite
+% handy command. The environment is defined in this file, because
+% this reflects common usage, and this allows loading as a package
+% in e.g. |article|.
+%
+% \begin{macrocode}
+
+\newif\if@kaprotate \@kaprotatefalse
+\def\kaprotate{\global\@kaprotatetrue}
+\def\endkaprotate{\global\@kaprotatefalse}
+
+% \end{macrocode}
+%
+% \subsubsection{Rotation macros}
+% These are used in the |kaprotate| environment. Note that these
+% macros depend on PostScript output at this moment. Later,
+% I might include commands for (at least) Tpic.
+%
+% These are just a few macro's, so it isn't really worth including |graphicx|
+% at the moment.
+%
+% |\rotl| and |\rotr| rotate a given box over resp. 270 and 90 degrees
+% while typesetting that box. The new box has $wd_{new}=dp_1 + ht_1$ and
+% $ht_{new}=wd_1$, with $dp_{new} ==0$.
+% \begin{macrocode}
+\newdimen\rotdimen
+\def\rotstart#1{\special{ps: gsave currentpoint currentpoint translate
+ #1 neg exch neg exch translate}}
+\def\rotfinish{\special{ps: currentpoint grestore moveto}}
+\def\rotl#1{\rotdimen=\ht#1\advance\rotdimen by \dp#1
+ \hbox to \rotdimen{\vbox to\wd#1{\vskip \wd#1
+ \rotstart{270 rotate}\box #1\vss}\hss}\rotfinish}
+\def\rotr#1{\rotdimen=\ht #1\advance\rotdimen by \dp#1
+ \hbox to \rotdimen{\vbox to \wd#1{\vskip \wd#1
+ \rotstart{90 rotate}\box #1\vss}\hss}\rotfinish}
+%</main>
+%<*other>
+\endinput
+% \end{macrocode}
+%\newpage
+%\def\IndexParms{\hbadness=10000}
+%\PrintIndex
+%\end{document}
+% end of klufloa.sty
+%</other>