Für Gleitobjekte wie die Wie funktionieren sie, was bedeuten die einzelnen Parameter? Nach welchem Mechanismus werden Gleitumgebungen überhaupt gesetzt? Gibt es andere Möglichkeiten als die genannten Parameter, um die Positionierung zu beeinflussen? Wie funktionieren Gleitumgebungen überhaupt? gefragt 05 Dez '13, 19:53 cgnieder |
Der folgende Text ist nicht von mir sondern von Frank Mittelbach, der ihn auf TeX.sx veröffentlicht hat. Wer dort auch einen Account hat und ihm noch keine Stimme gegeben hat, sollte sich unbedingt überlegen, dort ein Upvote zu geben. Mein bescheidener Beitrag ist lediglich die Übersetzung ins Deutsche, weshalb die Antwort als Community Wiki markiert ist. Ich habe einige (sehr wenige) Sätze weggelassen und auch den letzten Abschnitt über die Dokumentation des Algorithmus' ausgelassen. TerminologieKlassen von GleitumgebungenJede von LaTeX's Gleitumgebungen gehört einer Klasse an. Der LaTeX-Kernel
kennt von sich aus erst einmal zwei: LaTeX wird nie die Reihenfolge von Gleitumgebungen einer Klasse änderen. Hat
man etwa GleitumgebungsbereicheIn einer Kolumne kennt LaTeX zwei Bereiche, in denen es Gleitumgebungen platzieren kann: den top-Bereich und den bottom-Bereich. In einem zweispaltigen Layout gibt es außerdem einen top-Bereich, der beide Spalten umfasst. Einen entsprechenden bottom-Bereich gibt es nicht. Außerdem kann LaTeX Gleitkolumnen oder -seiten machen, also Kolumnen oder Seiten, die nur Gleitumgebungen enthalten. Zu guter letzt kann LaTeX Gleitumgebungen „inline“ in den Text platzieren. PlatzierungsparameterUm eine Gleitumgebung in einen der genannten Bereiche zu platzieren, benötigt eine Gleitumgebung Platzierungsparameter als optionales Argument. Ohne Argument werden die Voreinstellungen verwendet. Das optionale Argument kann die folgenden Zeichen in beliebiger Reihenfolge enthalten:
Die Reihenfolge, in der diese Zeichen verwendet werden, beeinflussen nicht,
wie der Algorithmus bestimmt, wo die Gleitumgebung platziert wird.
Beispielsweise machen Wenn jedoch ein Zeichen nicht verwendet wird, dann wird die entsprechende Option überhaupt nicht beachtet! Parameter des AlgorithmusEs gibt ca. zwanzig Parameter, die die Platzierung einer Gleitumgebung beeinflussen. Sie bestimmen grundsätzlich
Referenzpunkt einer GleitumgebungDie Stelle, an die eine Gleitumgebung im Quelltext geschrieben wird, beeinflusst die Platzierung der Gleitumgebung im Output, da dadurch festgelegt ist, wann LaTeX die Gleitumgebung zum ersten Mal sieht. Wenn eine Gleitumgebung mitten in einem Absatz platziert wurde, dann ist der Referenzpunkt der nächste Zeilenumbruch oder Seitenumbruch in dem Absatz, in dem die Gleitumgebung geschrieben wurde. Grundlegende Regeln des GleitmechanismusMit dem jetzigen Wissen können wir in das Verhalten des Algorithmus etwas eintauchen. Zunächst muss man verstehen, dass alle von LaTeXs Algorithmen dergestalt konzipiert wurden, dass Rückverfolgung vermieden wird. Das bedeutet, LaTeX liest den Quelltext, formatiert, was es findet, und setzt es mehr oder weniger sofort. Diese Designentscheidung wurde getroffen, um einerseits die (dennoch recht hohe) Komplexität niedrig zu halten und andererseits eine vernünftige Geschwindigkeit zu erhalten. (Man denke daran, dass das aus den frühen Achtzigern stammt). Der Algorithmus für Gleitumgebungen ist gierig, d.h., wenn er eine Gleitumgebung findet, wird er versuchen, sie sofort zu platzieren. Wenn er erfolgreich war, wird er diese Entscheidung niemals rückgängig machen. Das bedeutet, er könnte eine Lösung wählen, die eigentlich unterlegen ist, wenn man später erhaltene Daten berücksichtigte. Wenn eine Die grundlegende ReihenfolgeDer Algorthmus durchläuft folgende Schritte:
Regeln, nach denen eine gefundene Gleitumgebung platziert wirdImmer, wenn LaTeX eine Gleitumgebung im Quelltext findet, schaut es zunächst in die Warteschlange, um zu sehen, ob schon eine weitere Umgebung derselben Klasse in der Schlange steht. Wenn das der Fall ist, wird die Gleitumgebung der Warteschlange sofort hinzugefügt. Wenn nicht, dann schaut LaTeX nach den Platzierungsparametern für diese Gleitumgebung, entweder die des optionalen Arguments oder die der Voreinstellung der entsprechenden Klasse.
Damit ist der Prozess beendet, der durchlaufen wird, wenn eine Gleitumgebung im Dokument gefunden wird. Leeren der Warteschlange bei einem SeitenubruchNachdem eine Seite fertiggestellt ist, begutachtet LaTeX die Warteschlange, und versucht, sie so gut wie möglich zu leeren. Dafür wird es zuerst versuchen, Gleitseiten zu erzeugen. Alle Gleitumgebungen, die an einer Gleitseite (oder -kolumne) teilnehmen,
müssen ein Darf eine Gleitumgebung auf eine Gleitseite platziert werden, wird sie für die
Seite vorgemerkt. Der Algorithmus kann aber immer noch abrechen, wenn die
Gleitseite nicht „voll genug“ würde. (Das hängt von den Parametereinstellungen
für Gleitseiten ab.) Erst ganz am Ende des Dokuments oder wenn ein
Das Erstellen von Gleitseiten geht so lange weiter, bis der Lagorithmus entweder keine weiteren Gleitumgebungen zum platzieren übrig hat, oder er scheitert, eine Gleitseite zu erstellen. Im letzten Fall werden alle Gleitumgebungen, die bis dahin noch nicht platziert wurden, als Kandidaten für die top- und bottom-Bereiche der nächsten Seite (oder Kolumne) behandelt. Das Vorgehen dann ist dasselbe, wie oben beschrieben mit der Ausnahme, dass
Jede Gleitumgebung, die bis hierhin noch nicht platziert werden konnte, wird wieder auf die Warteschlange gesetzt. Wenn LaTeX also wieder soweit ist, weiteres Textmaterial aus dem Quelltext aufzunehmen, kann die Warteschlange also bereits Gleitumgebungen enthalten. Eine Konsequenz daraus ist, dass dann eine Gleitumgebung, die im Dokument gefunden wird, zurückgehalten wird, nur weil eine frühere Gleitumgebung schon auf der Wartebank sitzt. Details zu den Parameter, die die Platzierung beeinflussenEs gibt vier Zähler, die kontrollieren, wie viele Gleitumgebungen in de verschiedenen Bereiche gesetzt werden dürfen:
Die Größe der einzelnen Bereiche, wird durch Parameter kontrolliert, die den
maximalen oder minimalen Anteil eines Bereichs als Bruchteil der Seitenhöhe
angeben. Sie können mit
Der Weißraum, der die Gleitumgebungen innerhalb eines Bereichs voneinander
trennt, wird durch die folgenden Parameter bestimmt. Sie alle sind
Gummilängen, dürfen also stauch- oder dehnbare Anteile enthalten. Ihre
Voreinstellung hängt von der Schriftgröße des Dokuments ab und ändert sich,
wenn Klassenoptionen wie
Gleitumgebungen, die „here“ platziert werden, wird der Abstand zum umgebenden Text durch folgende Länge vorgegeben:
Im Fall von Gleitseiten oder Gleitkolumnen (also einer Seite oder Spalte, die nur Gleitumgebungen enthält), gelten die Parameter nicht. Sie werden durch diesen Parameter kontrolliert:
Konsequenzen des AlgorithmusEine Gleitumgebung kann früher im Dokument erscheinen als im QuelltextDie Platzierung einer Gleitumgebung im Quelltext bestimmt den frühesten Punkt, and dem eine Gleitumgebung erscheinen darf. Sie kann im Dokument zu ienem bestimmten Grad rückwärts wandern, da sie in den top-Bereich der aktuellen Seite platziert werden könnte. Sie kann aber nicht auf einer früheren Seite als der umgebende Text erscheinen, da LaTeX keine Rückverfolgung macht und die früheren Seiten bereits gesetzt sind. Daher wird eine Gleitumgebung normalerweise in der Nähe seiner ersten Erwähnung (Text wie „siehe Tabelle~3“) platziert, weil man dadurch sicherstellt, dass die Gleitumgebung entweder auf der gleichen Seite wie der Text oder eine Seite später erscheint. In machnen Fällen möchte man die Gleitumgebung vielleicht auf der vorhergehenden Seite platzieren (wenn die Seite von der Erwähnung aus immer noch sichtbar ist). Das kann man nur erreichen, in dem man den Quelltext an eine frühere Stelle schiebt. Ganzseitige Gleitumgebungen in zweispaltigen Dokumenten werden immer erst zurückgehaltenWenn LaTeX eine ganzseitige Gleitumgebung (also Um also eine Gleitumgebung auf die aktuelle Seite zu setzen, muss man sie manuell an eine andere Stelle in der Quelle verschieben -- vor den Anfang der aktuellen Seite. Offensichtlich kann jede weitere Veränderung am Dokument diese Anpassung obsolet machen. Wenn man solche Anpassungen also überhaupt vornimmt, dann am besten in der allerletzten Phase der Dokumenterstellung -- wenn alles Material geschrieben ist und man sich auf Feineinstellungen des optischen Erscheinungsbilds konzentrieren kann. Es gibt keinen bottom-Bereich für ganzseitige GleitumgebungenEigentlich ist das keine Konsequenz aus dem Algorithmus sondern eine Tatsache
über ihn. Die einzigen Bereiche für zweispaltige Gleitumgebungen sind der
top-Bereich und eine Gleitseite. Wenn man also ein Alle Parameter schränken (normalerweise) die Platzierungsmöglichkeiten einDas mag offensichtlich erscheinen, ist es aber Wert, wiederholt zu werden: jeder Parameter beschränkt LaTeXs Möglichkeiten, Gleitumgebungen zu platzieren. es gibt immer eine Möglichkeit, einen Parameter so einzustellen, dass er die Platzierung nicht mehr beeinflusst. Leider lädt man damit zu eher schlecht aussehenden Platzierungen ein. LaTeXs Voreinstellungen sind ziemlich großzügig. Damit beispielsweise eine Gleitseite akzeptiert wird, muss/müssen die Gleitumgebung(en) mindestens eine halbe Seite einnehmen. Anders gesagt ist es erlabt, dass eine solche Seite zur Hälfte leer ist, was in den meisten Fällen sicherlich nicht die bestmögliche Lösung ist. Oft geschieht es, dass Anwernder versuchen, solche Einstellungen zu
verbessern, und dann überrascht sind, wenn sich plötzlich alle Gleitumgebungen
am Ende des Dokuments aufstapeln. Um bei dem eispiel zu bleiben: wenn man
Aus diesem Grund ist es am besten, nicht an den Parametern zu fummeln, während man ein Dokument schreibt. Oder wenigstens nicht so, dass man es dem Algorithmus schwerer macht, die Gleitumgebung in der nähe der Erwähnung zu platzieren. Zum Korrekturlesen ist es wesentlich wichtiger, dass die Gleitumgebung in der Nähe ihrer Erwähnung ist, als halbleere Seiten zu vermeiden. Einen weiteren SChluss, den man hier ziehen kann, ist, dass es Abhängigkeiten zwischen einigen der Parameter gibt. Es ist wichtig, dass man sie berücksichtigt, wenn man die Werte ändert. „Hier“ bedeutet eigentlich „hier, wenn es passt“... und oft passt es nicht. Für viele Leute ist es etwas überraschend, aber
durch die Art und Weise, wie der Algorithmus konzipiert wurde, ist Gleit-Optionen legen keine bevorzugte Reihenfolge festWie bereits erwähnt, versucht der Algorithmus, die Gleitumgebungen in einer vorgegebenen Reihenfolge in den verfügbaren Bereichen zu platzieren. Die Reihenfolge ist festprogrammiert: „here“, „top“, „bottom“ und -- bei Seitenumbrüchen -- zuerst „page“ und, nur falls das nicht möglich ist, „top“ gefolgt von „bottom“ auf der folgenden Seite. Wenn man also Zusammenhang zwischen Gleitumgebungen und FußnotenDieser Punkt ist nicht wirklich eine Konsequenz des Algorithmus' sonderen eher
eine seiner Implementierung: jedes mal, wenn LaTeX sich zu entscheiden
versucht, wo eine Gleitumgebung (oder ein Wenn jetzt aber die Seite schlußendlich an einer anderen Stelle gebildet wird, kann es passieren, dass die Fußnoten auf der falschen Seite oder in der falschen Spalte erscheinen. Das ist zwar ein ziemlich unwahrscheinliches Szenario, aber falls es passiert, sollte man überprüfen, ob in der Nähe des Seitenumbruchs eine Gleitumgebung ist. Dann kann man entweder die Gleitumgebung an eine andere Stelle schieben oder einen expliziten Seitenumbruch einfügen. Ein spezieller Fall ist es Wert, hervorgehoben zu werden: platziere keine Gleitumgebung direkt nach einer Überschrift, ausßer es ist eine Überschrift, die immer am Anfang einer Seite steht. Überschriften sind normalerweise recht große Objekte, verhinderen aber einen Seitenumbruch nach sich. Eine Gleitumgebung hier mittenrein zu setzen, bedeutet, die OR auszulösen, bevor sich LaTeX entscheiden kann, wo es umbrechen soll, wodurch Fupßnoten an die falsche Stelle geschoben werden.
Permanenter link
Dieser Antwort ist "Community Wiki" markiert.
beantwortet 14 Dez '13, 23:52 cgnieder |
Siehe http://texwelt.de/wissen/fragen/274/ausrichtung-der-figuren-in-scrartl-klasse/331
@Bes stimmt, @saputellos Antwort dort enthält schon wertvolle Informationen, die man hier mit erwähnen sollte, danke.