%%% ==================================================================== %%% @LaTeX-style-file{ %%% author = "David Carlisle", %%% version = "1.01", %%% date = "12 June 1992", %%% time = "15:26:24 BST", %%% filename = "here.sty", %%% address = "Computer Science Department %%% Manchester University %%% Oxford Road %%% Manchester %%% England %%% M13 9PL", %%% telephone = "+44 61 275 6139", %%% FAX = "+44 61 275 6236", %%% checksum = "52285 214 1175 8528", %%% email = "carlisle@cs.man.ac.uk (Internet)", %%% codetable = "ISO/ASCII", %%% keywords = "LaTeX, figure, table, floats", %%% supported = "yes", %%% docstring = " %%% %%% here.sty %%% %%% A LaTeX style option giving floats a [H] option, %%% meaning `do not float', or `PUT IT HERE'. %%% %%% Documentation requires Mittelbach's doc.sty. %%% %%% The checksum field above was produced by %%% Robert Solovay's checksum utility.", %%% } %%% ==================================================================== % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % * Version 1, 13 Sept 1991 % * Version 1.01, added \vbox accidently omitted from previous version. % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %<*x> % This file may be used without modification as a style (.sty) file. % % If you have Mittelbach's doc.sty, this file may be formatted with a % command like: % latex here.sty % % If you have the Mittelbach/Duchier/Braams docstrip utility, you may % produce a faster loading .sty file. Rename this file to: here.doc % Then run this file through *plain* TeX: % tex here.doc % This should produce the file here.sty. % If you do not have plain TeX on your system, you can trick LaTeX into % doing the work as follows: % latex \def\fmtname{plain} \input here.doc % Note that you may need to quote the arguments here to stop your % operating system treating the \ characters incorrectly. % % latex here.doc % Will produce a typeset version of the documentation, as above. % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\plain{plain}\ifx\fmtname\plain\csname fi\endcsname \def\batchfile{here.doc} \input docstrip \preamble Do not distribute the stripped version of this file. The checksum in the header refers to the documented version. \endpreamble \generateFile{here.sty}{t}{\from{here.doc}{}} \endinput \fi % \ifcat a\noexpand @\let\next\relax\else\def\next{% \documentstyle[here,doc]{article}\MakePercentIgnore}\fi\next % %\def\eatmodule<#1>{}\eatmodule % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \textwidth=355pt ^^A Allow macrocode text with 72 columns. % \CodelineIndex ^^A Code lines numbered. % \DisableCrossrefs ^^A No Cross references. % \MakeShortVerb{\|} ^^A |\foo| works like \verb+\foo+ % % \title{here.sty} % \author{D. P. Carlisle} % \date{12 June 1992} % \begin{document} % \maketitle % \begin{abstract} % {\tt here.sty} gives environments such as {\tt figure} and {\tt table} % a {\tt [H]} option which means `PUT IT HERE'. As opposed to the % standard {\tt [h]} option which means `You may put it here if you % wish'. % \end{abstract} % % \begin{figure}[H] % This figure will not float, even if this causes a bad page break. % \caption{It may be captioned as usual.} % \end{figure} % % Many people have problems with \LaTeX's floating environments. A % common complaint is that all the environments appear at the end of the % document (or chapter). Many users try to correct this behaviour by % using the {\tt [h]} option. Incorect use of this option, in particular % using just {\tt [h]} rather than a more liberal option such as {\tt % [hp]} actually makes the problem worse! % % \LaTeX\ will only position a float (even one with the {\tt [h]} % option) in a position which does not violate the rules for float % placement set by the document style. These rules are determined by the % following parameters: % % \begin{table}[H] % \begin{tabular}{lp{220pt}} % |\c@topnumber|& Number of floats allowed at the top of a % column.\\ % |\topfraction|& Fraction of column that can be devoted to % floats.\\ % |\c@dbltopnumber|\\ \verb|\dbltopfraction|& Same as above, but for % double-column floats.\\ % |\c@bottomnumber|\\ \verb|\bottomfraction|& Same as above for % bottom of page.\\ % |\c@totalnumber|& Number of floats allowed in a single column,\\ % & including in-text floats.\\ % |\textfraction|& Minimum fraction of column that must contain % text.\\ % |\floatpagefraction|& Minimum fraction of page that must be taken % up by a float page.\\ % |\dblfloatpagefraction|&As above, for double-column floats. % \end{tabular} % \caption{\LaTeX`s float placement parameters} % \end{table} % % The default settings (in {\tt article.doc} for {\tt article} style) % for these parameters make it difficult to set floats if the document % has a lot of small floats. The result is that \LaTeX\ `holds them % back' in the hope of finding a better place later. At the end of the % document (or at a |\clearpage|) it gives up and outputs all the % remaining floats. % % It may be seen from the above paragraph that the `correct' way to % handle float problems is to write a style file modifying these % parameters, however for many purposes, authors to not want a float at % all, they just use the {\tt figure} or {\tt table} environments to get % the correct spacing, and a counter that may be referenced. This style % option provides an easy solution in this case. If the {\tt [H]} option % is specified, the environment will not float even if it causes a bad % page break, or breaks the rules specified in the above parameters. The % main drawback is that if the [H] option is used in one figure, and the % following figure uses the {\tt [t]} option, then the second figure may % float in front of the first. % % Note that the {\tt [H]} should not be used in conjunction with the % other options. {\tt [Htp]} is not allowed by this style. The {\tt h} % option may still be used, so {\tt [htp]} is OK. % \typeout{End of the Introduction and Examples.} % \typein[\answer]% % {Do you want an annotated listing of the macro definitions (y/n) ?} % \def\next{y}\ifx\answer\next\else\expandafter\stop\fi % % \section{The Macros} % First we make sure that this file is only loaded once. % \begin{macrocode} \ifx\@Hxfloat\@Hundef\else\expandafter\endinput\fi % \end{macrocode} % % \begin{macro}{\@Hxfloat} % Now we can save the original version of |\@xfloat|. % \begin{macrocode} \let\@Hxfloat\@xfloat % \end{macrocode} % \end{macro} % \begin{macro}{\@xfloat} % The new version of |@xfloat| looks for a |[H]| argument. % If it is present |\@HHfloat| is called, otherwise the original macro % (renamed to |\@Hfloat|) is called. % \begin{macrocode} \def\@xfloat#1[{\@ifnextchar{H}{\@HHfloat{#1}[}{\@Hxfloat{#1}[}} % \end{macrocode} % \end{macro} % \begin{macro}{\@HHfloat} % First gobble the |[H]|. Note that {\tt H} should not be used in % conjunction with the other placement options, nor as the value of the % default placement, as set in |\fps@|{\it type}. % \begin{macrocode} \def\@HHfloat#1[H]{% % \end{macrocode} % Locally redefine the end of the environment. % \begin{macrocode} \expandafter\let\csname end#1\endcsname\end@Hfloat % \end{macrocode} % Add the vertical space, and define |\caption|. Also reset % |\parindent| for compatibility with the standard {\tt [h]} option. % \begin{macrocode} \vskip\intextsep\vbox\bgroup\def\@captype{#1}\parindent\z@ % \end{macrocode} % The final |\ignorespaces| is needed to gobble any spaces or newlines % after the {\tt[H]} tokens. % \begin{macrocode} \ignorespaces} % \end{macrocode} % \end{macro} % \begin{macro}{\end@Hfloat} % Add the same vertical space as would be added by a float placed with % {\tt[h]}. % \begin{macrocode} \def\end@Hfloat{\egroup\vskip \intextsep} % \end{macrocode} % \end{macro} % \end{document}