1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
|
%%
%% This is file `floatfge.tex',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% floatflt.dtx (with options: `gammalkod')
%%
%% Copyright (c) 1994-1998 by Mats Dahlgren <matsd@sssk.se>.
%% All rights reserved. See the file `floatflt.ins' for information
%% on how you may (re-)distribute the `floatflt' package files.
%% You are not allowed to make any changes to this file without
%% explicit permission from the author.
%%
\documentclass[11pt]{article}
%
\textheight=1.1\textheight
\textwidth=1.15\textwidth
\oddsidemargin=0pt
\evensidemargin=0pt
%
\begin{document}
%
\title{\LaTeX-Paragraphs Floating around Figures}
\author{{\it Thomas Kneser}\\{\footnotesize
Gesellschaft f\"ur wissenschaftliche Datenverarbeitung
mbH G\"ottingen, FRG}}
\date{August 20, 1990}
\maketitle
%
\begin{abstract}
%
\noindent Frequently figures do not fill the full pagewidth.
If the width of such figures is only half of the
pagewidth or even less,
textlines should be set beside the figures,
or -- from another point of view -- figures should `float'
in paragraphs.
This article presents the \LaTeX{} style option {\tt FLOATFIG}
which can be used to set such Floating Figures as easily
as \LaTeX's standard figures.
\end{abstract}
%
\section{The name of the game}
The macros which make up the {\tt FLOATFIG} style option
are based on PLAIN-\TeX\ macros developed by Thomas Reid
(TUGBoat Vol. 8 \# 3 page 315), who pointed out
how to set figures
{\bf right justified} with paragraphs floating around them.
For such objects
Th. Reid has chosen the term `Floating Figures'.
This choice might cause some confusion,
when we adapt these macros for \LaTeX,
since Leslie Lamport uses the term `float' for objects
which are realized as \TeX-\verb+\inserts+.
While L. Lamports floats are floating in `main vertical list',
floats introduced by Th. Reid
are floating in paragraphs.
For the following we adopt the latter meaning.
\section{How to use it}
The Floating Figures style option is fully compatible with
\LaTeX's standard figure facility:
\begin{enumerate}
\item Floating Figures and standard figures may be requested
in any sequence,
\item Floating Figures can be captioned like standard figures,
\item captioned Floating Figures are inserted in the list of figures
which may be printed by the standard
\verb+\listoffigures+ command.
\end{enumerate}
A Floating Figure may be requested as follows:
\begin{verbatim}
\documentstyle[floatfig]{article}
\begin{document}
\initfloatingfigs
.
.
\begin{floatingfigure}{5.6cm}
\vspace{6.cm}
\caption{Intermolecular potential K-Xe}% optional !
\end{floatingfigure}
.
.
\end{document}
\end{verbatim}
where {\tt 5.6cm} specifies the width of the figure space.
A Floating Figure may only be requested in vertical mode, that is
between paragraphs.
A Floating Figure will be set as soon as possible after its request
has be encountered by \TeX.
That means,
it will be tested if there is enough vertical space
on the current page;
otherwise the figure moves to the next page.
Floating Figures are set {\bf alternating},
that is on the right hand side on odd and
on the left hand side on even numbered pages.
%
\subsection{Restrictions}
\begin{enumerate}
\item The {\tt FLOATFIG} style option may not be combined with the
{\tt TWOCOLUMN} style option,
\item a Floating Figure will never appear in a paragraph
which begins on top of a page.
\end{enumerate}
%
\section{About the internals}
%
We have extended the macros designed by Th.~Reid with regard to:
\begin{enumerate}
\item implantation into the \LaTeX{} context,
\item alternating setting of Floating Figures as explained above,
\item generation of warning messages for `collisions' of
two Floating Figures.
\end{enumerate}
%
\subsection{Implantation into the \LaTeX{} context}
The PLAIN-\TeX{} implementation by Th.~Reid
is based on a redefined \verb+\output+ routine:
%
\begin{verbatim}
\edef\oldoutput{\the\output}%
\output={\the\outputpretest\ifoutput\oldoutput\fi}
\outputpretest={\outputtrue}
\end{verbatim}
%
If a Floating Figure is requested,
the content of the
\verb+\outputpretest+ token register is prepared to decide:
\begin{enumerate}
\item if there is enough vertical space to set the Floating Figure,
\item if setting of a Floating Figure is in progress or
\item if indeed the current page has to be sent to the DVI file.
\end{enumerate}
%
In general, \TeX{} has to deal with more than one paragraph until
a Floating Figure will be completely processed.
During this process
the redefined \verb+\output+ routine is
called at the begin of {\bf every} paragraph;
this is done indirectly
by expanding the control sequence \verb+\tryfig+.
Therefore, the \verb+\everypar+ token
list is prepared by the following command sequence:
\begin{verbatim}
\edef\oldeverypar{\the\everypar}
\everypar={\tryfig\oldeverypar}
\end{verbatim}
Now \verb+\tryfig+ triggers the (modified)
\verb+\output+ routine, which then does the decisions
and actions mentioned above.
Adopting this concept when using the macros in the \LaTeX{} context,
we are faced with the following problems:
\begin{enumerate}
\item At the time \hbox{\tt FLOATFIG.STY} is read in,
the \verb+\output+ routine is still undefined;
its definition is retarded until
\verb+\begin{document}+ will be expanded;
so the redefinition of the \verb+\output+ routine has to be
done after \verb+\begin{document}+
by the command \verb+\initfloatingfigs+
(see section `Known Problems' below).
\item There are situations where
\LaTeX{} decides to redefine the \verb+\everypar+ token list
without saving of the former content;
this occurs for instance when expanding
a \verb+\section+ control sequence.
We overcome this by redefining \verb+\everypar+ whenever
the \verb+\floatingfigure+ environment is entered.
%
Hence to avoid problems, a Floating Figure should be requested
early enough before any sectioning control sequence
(see also subsection `Misleading collision warnings').\hfil\break
%
Furthermore, the concurrent definitions of
\verb+\everypar+ are the reason why
Floating Figures cannot move across section boundaries.
\end{enumerate}
%
\subsection{Alternating figure setting}
The problem to be solved
is to decide if a certain figure has to be set
left- or rightjustified.
This decision has to made according to
the value of the pagecount (left if even, right if odd).
That is we are dealing with the wellknown problem
to associate a certain part of input text with the number
of the page on which it will be set finally.
As pointed out by D.E. Knuth in `The {\TeX}book' this association
is done not before \verb+\output+ routine time.
But the problem is not so hard to solve,
since in Th.~Reid's version there is already a modified
\verb+\output+ routine which decides if a certain figure will
fit on the current page.
As a by-product of this decision one easily gains
the information `odd' or `even' for the pagecount
of the current page.
So our problem reduces to the following simple decision:
\begin{verbatim}
\ifodd\count0 %
\hbox to \hsize{\hss\copy\figbox}%
\global\oddpagestrue
\else% leftsetting
\hbox to \hsize{\copy\figbox\hss}%
\global\oddpagesfalse
\fi% \ifodd\count0
\end{verbatim}
%
\subsection{Collisions of Floating Figures}
We define a collision as a situation where:
\begin{enumerate}
\item a Floating Figure is requested before the predecessor
has been finished,
\item some sectioning is requested before a Floating Figure has been
finished.
\end{enumerate}
While the {\tt FLOATFIG} style option cannot avoid such collisions,
it will recognize them.
For diagnostic purposes we have therefore defined
the switch \verb+\iffigprocessing+ and another count register called
\verb+\ffigcount+.
This count register is used to attach
a sequence number to each Floating Figure,
so they can be identified uniquely within collision warning messages.
These sequence numbers are not to be confused
with the figure count maintained by standard \LaTeX.
%
\section{Known Problems}
\subsection{Need of Initialization}
The present version of the style option needs to be initialized
by control sequence
{\tt\verb+\initfloatingfigs+} as mentioned above.\footnote{%
This is not needed with \LaTeXe{}. /MD}
We hope a later version will initialize itself,
when the first request to a Floating Figure is encountered.
One problem with such an automatic initialization seems
to be,
that we are grouped down
since we are inside a \LaTeX{} environment.
Our first attempt failed
to make the respective settings \verb+\global+.
%
\subsection{Misleading collision warnings}
As mentioned above, Floating Figures do not move
across section boundaries.
If a Floating Figure is requested near a section end,
the figure will be truncated,
if it does not fit in the current section.
If this occurs for instance with floating figure number~4,
a collision will be reported when the request for
floating figure number~5 is encountered;
so the respective warning message may be substantially retarded.
In fact, the message will tell us that there is a problem with figure~4,
but there will be no further hint.
So one has to analyze `by hand' that the problem is {\bf not} caused
by collision with figure~5 but with a section heading;
even worse: if there is no floating figure~5, one gets no warning message
at all.
Furthermore, warning messages will be generated if a Floating Figure
ends in paragraph $n$ and the next one begins with paragraph $n+1$.
These warning messages are to be ignored; they are due to some retardation
caused by the \verb+\everypar+ mechanism.
%
\section{Conclusions}
Working on \texttt{FLOATFIG.STY} we had some unexpected problems
which were caused
by \LaTeX's somewhat unsafe assignments to the \verb+\everypar+ token list.
This is due to the fact that the use
of this token list is fundamental
to the algorithm designed by Th.~Reid.
On the other hand we did expect problems to couple
the Floating Figures with \LaTeX's figure caption adminstration,
that is to achieve a single figure caption numbering for
the standard figures and the Floating Figures and to get both types
listed by the \verb+\listoffigures+ control sequence.
%
But these problems could easily be solved
by the following local definiton within the {\tt FLOATFIG} environment:
\begin{verbatim}
\def\@captype{figure}
\end{verbatim}
Obviously this is due to the fact
that \LaTeX's caption apparatus is thoroughly parameterized.
The \verb+FLOATFIG.STY+ file is stored in the
{\tt EARN/BITNET} listserver
in Heidelberg; \hfil\break
{\tt VM/CMS} users should enter the commands:
\begin{verbatim}
TELL LISTSERV AT DHDURZ1 GET LATEXSTY INDEX
TELL LISTSERV AT DHDURZ1 GET LATEXSTY README
TELL LISTSERV AT DHDURZ1 GET LATEXSTY FILELIST
TELL LISTSERV AT DHDURZ1 GET FLOATFIG ZOOUUE LATEXSTY
\end{verbatim}
to obtain information about how to obtain the style option file.
\subsection{Note by Mats Dahlgren}
Several features described in this document still apply to the
\LaTeXe\ \texttt{floatflt} package, whereas others do not. Please
run \LaTeX{} on \texttt{floatflt.dtx} twice and read the resulting
documentation before you use the package.
(This note was added on October 20, 1994; changed on December 27,
1994.)
%\tableofcontents
\end{document}
\endinput
%%
%% End of file `floatfge.tex'.
|