%% floats.tex -- Teil der OGFUDA
\def\filename{floats.tex}
\def\filedate{01-FEB-1993}
\def\fileversion{1.0}
\meldedich
\section{Gleitende Textbestandteile}

\r Wie kann man \LaTeX\ dazu bringen, flie"sende Objekte so
anzuordnen, da"s sie auf jeden Fall auf der Seite stehen, auf
der sie definiert wurden?  Mir ist zwar die Option \sq{{\tt
[h]}} f"ur "`{\em here}"' bekannt, aber damit macht \LaTeX\
nicht immer das, was man erwartet, n"amlich den gleitenden
Textbestandteil dort auszugeben, wo er notiert wurde.

\p Zur Erkl"arung dieses Verhaltens sollte man sich einmal kurz
die Vorgehensweise von \LaTeX\ ansehen.  Erscheint im Text ein
flie"sendes Objekt, d.\,h.\ Text innerhalb einer
\ttind{figure}- oder \env{table}, dann wird zuerst der
Platzbedarf dieses Objekt bestimmt.  Anschliessend wird anhand
der Plazierungseinschr"ankungen und des verbleibenden Platzes
auf der aktuellen Seite bestimmt, wo das Objekt plaziert wird.

Durch die Angabe~\sq{{\tt [h]}} im optionalen Argument darf
\LaTeX\ {\it nur\/} noch an der aktuellen Textstelle das Objekt
plazieren.  Ist auf der aktuellen Seite nicht mehr genug Platz,
so wird das Objekt gespeichert und erst am Ende des Kapitels
oder Dokuments mit allen anderen verbliebenen flie"senden
Objekte gesetzt.

\r Mit einer unangenehmen Begleiterscheinung: Da die
Reihenfolge von Gleitobjekten des gleichen Typs (also etwa
aller {\sf table}) nicht ge"andert werden darf, werden auch
alle nach diesem Gleitobjekt erscheinde Objekte desselben Typs
mit verschoben!

\p Daher stellen wir die Regel auf, im optionalen Argument,
{\em niemals\/} "`{\tt h}"' ohne eine weitere
Plazierungsm"oglichkeit anzugeben.

"Ubrigens ist die Reihenfolge der Buchstaben im optionalen
Argument nicht von Belang.  \LaTeX\ versucht immer in der
festen Reihenfolge, zuerst {\it h\/}ier, dann oben ({\it
t\/}op), anschliessend unten ({\it b\/}ottom) auf der Seite und
als letztes auf einer eigenen Seite ({\it p\/}age) ein
flie"sendes Objekt zu plazieren.

\r Das ist interessant.  Bisher dachte ich, da"s die Buchstaben
der Reihe nach ausgewertet werden.  Aber zur"uck zum
eigentlichen Problem.  Was mache ich nun mit meinem falsch
plazierten Objekt?

\p \LaTeX\ h"alt eine Menge Parameter f"ur Gleitobjekte bereit,
die leider in den Standard-Styles nicht mit den optimalen
Werten vorbesetzt werden!

\r Tats"achlich?  Das war mir nicht bekannt!

\p Tr"osten Sie sich, Sie sind nicht der erste \LaTeX{}niker,
der diese Parameter "ubersehen hat.

\r Wollen Sie mir die relevanten Parameter darstellen?

\p Aber gerne!  Ich erl"autere Ihnen die Parameter samt ihrer
Belegung in den Standard-Styles und gebe gleich noch ein paar
Anmerkungen dazu, wie man den Wert "andern sollte.

Bitte beachten Sie auch, da"s die Werte in den Makros {\tt
...fraction} zwischen $0$ und~$1$, und zwar {\it ausschlie"slich},
liegen m"ussen; die Werte $0$ und $1$ selbst sind also nicht erlaubt.
Werte au"serhalb dieser Grenzen f"uhren neben
Fehlermeldungen zu einem seltsamen Verhalten von \LaTeX.

\begin{description}
\item[{\tt \string\topfraction};]
Vorbelegung~$0.7$.  Das ist der Anteil einer Spalte, der {\em
oben\/} von Gleitobjekten belegt sein darf.  Diesen Wert kann
man etwas erh"ohen, wenn man viele Bilder hat.  Er mu"s erh"oht
werden, wenn man keine {\it float pages\/} (Buchstabe~{\it
p\/}) zulassen will und gro"se Bilder im Dokument verwendet
werden.

\item[{\tt topnumber};]
Vorbelegung~$2$. Die maximal erlaubte Anzahl der gleitenden
Objekte {\em oben\/} auf einer Spalte an.  Bei vielen Bildern,
besonders wenn diese klein sind, kann man diesen Wert um eins
oder zwei erh"ohen.

\item[{\tt \string\bottomfraction, bottomnumber};]
Vorbelegung~$0.3$ und~$1$.  Analog zu den ersten beiden
betreffen diese Parameter die Werte {\em unten\/} auf der
Spalte.  {\tt bottomnumber} man nicht erh"ohen, da zuviele
Bilder unten auf einer Seite den Textzusammenhang mit der
n"achsten Seite st"oren.  Will man gr"o"sere Bilder zulassen,
sollte man aber {\tt \string\bottomfraction} erh"ohen.

\item[{\tt totalnumber};]
Vorbelegung~$3$.  Er gibt die maximale Anzahl von Gleitobjekten
pro Seite an.  Dieser Wert ist bei Verwendung von vielen
gleitenden Objekten viel zu klein, er erlaubt nur insgesamt
$3$~Objekte pro Seite.  Meist bringt eine Erh"ohung allein
dieses Parameters auf 5--10 schon akzeptablere Ergebnisse.

\item[{\tt \string\textfraction};]
Vorbelegung~$0.2$.  Er gibt an, wieviel Text eine Spalte
mindestens enthalten mu"s; im Original d"urfen demnach maximal
80\,\% einer Spalte durch Gleitobjekte unten und oben belegt
werden.  Eine Erniedrigung auf $0.1$ ist hilfreich, falls man
bei einem fast spaltenf"ullenden Gleitobjekten noch einige
Zeilen Text auf der Seite w"unscht.

\item[{\tt\string\floatpagefraction};]
Vorbelegung~$0.5$.  Er gibt den Anteil einer Spalte an, der
mindestens durch Gleitobjekte belegt werden mu"s, um eine
eigene Seite mit gleitenden Objekten zu bilden.  F"ullen also
bei dieser Einstellung die bisher noch nicht gesetzten
gleitenden Objekte mindestens 50\,\%\ einer Spalte, so wird
eine {\em float page\/} (ohne Text) erzeugt.  Dieser Wert ist
zu niedrig, wenn man "`fast leere"' {\em float pages\/}
vermeiden will.  Man erh"oht ihn besser auf ca.~0.65--0.75.
Der optimale Wert ist dabei abh"angig von der Anzahl und der
Gr"o"se der im Text existierenden Gleitobjekte.

\item[{\tt dbltopnumber}, {\tt\string\dbltopfraction};]
Vorbelegung~$2$ und~$0.7$. Entspricht den Parametern {\tt
topnumber} und {\tt \string\topfraction} f"ur Gleitobjekte
"uber beide Spalten bei zweispaltigem Satz.

\item[{\tt\string\dblfloatpagefraction};]
Vorbelegung~$0.5$.  Entspricht dem obigen Parameter {\tt
float\-page\-fraction} f"ur Gleitobjekte im zweispaltigen
Satz, falls die {\tt *}-Form der Gleitanweisung benutzt wird,
der gleitende Textteil also "uber beide Spalten gesetzt wird.
\end{description}
Dabei werden die Befehle {\tt ...fraction} mit
\cs{renewcommand}, die Z"ahler {\tt ...number} mit
\cs{setcounter}{\tt \{...number\}\{}{\it Wert}{\tt \}}
ver"andert.{\tolerance=2000\par}

\r Sie reden dauernd von Spalten; diese fallen jedoch im
einspaltigen Satz mit Seiten zusammen?

\p Ja, ganz recht.

\r Zusammenfassend s"ahen brauchbare Werte etwa so aus.
\begin{ogfudatim}
\setcounter{topnumber}{4}
\renewcommand{\topfraction}{.8}
\setcounter{bottomnumber}{2}
\renewcommand{\bottomfraction}{.7}
\setcounter{totalnumber}{10}
\renewcommand{\textfraction}{.1}
\renewcommand\floatpagefraction{.7}
\end{ogfudatim}
Und wenn das alles nichts hilft?

\p Sie sollten in jedem Fall zuerst einmal {\em alle\/}
optionalen Parameter entfernen und die oben vorgestellten
Parameter "andern.

\r Ja, aber dann erscheint ein Gleitobjekt nie dort, wo ich es
hinsetze!

\p Was Sie ansprechen, ist die Default-Plazierungsangabe, die in
den Standard-Styles mit{\tolerance=2000\par}
\begin{ogfudatim}
\newcommand{\fps@figure}{tbp}
\newcommand{\fps@table}{tbp}
\end{ogfudatim}
so eingeschr"ankt sind, da"s sie nicht "`{\it h\/}ere"'
{\it alleine} plaziert werden.  Dies k"onnen Sie in einer Styleoption
mit den Parametern "andern.

Damit duerfte Sie in den meisten F"allen ohne das optionale
Argument der {\sf figure}- und \env{table} auskommen.

\r Und wenn das nichts hilft?

\p Falls das Gleitobjekt eine Seite zu fr"uh oder zu sp"at
erscheint, verschieben Sie das Gleitobjekt im Text etwas nach
vorne oder nach hinten.

Soll das Gleitobjekt nicht an einer bestimmten Stelle, z.\,B.\
nicht unten auf der Seite, dann benutzen Sie f"ur dieses und
wirklich nur f"ur dieses Gleitobjekt die
Plazierungseinschr"ankung durch das optionale Argument.

Diese beiden M"oglichkeiten sind zwar nicht die elegantesten
L"osungen, aber sie funktionieren nach einigem Probieren.  Das
Plazierung von Gleitobjekten ist nun mal ein nichttriviales
Problem, in das viele Gesichtspunkte einflie"sen, die \LaTeX\
nicht beachtet, so da"s Sie hier manchmal etwas korrigierend
eingreifen m"ussen.

\endinput
