%% 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