Ihre Abbildung erscheint nicht dort, wo Sie sie geschrieben haben; eine Tabelle springt mehrere Seiten weiter. Das ist kein LaTeX-Fehler, sondern liegt daran, dass figure und table Floats (floating objects) sind. LaTeX löst Abbildungen und Tabellen aus dem Textfluss und lässt sie an die Stelle „schweben“, an der der Seitenumbruch am besten gelingt. Diese Seite zeigt, wie weit Sie das steuern können: die Platzierungsangaben in [htbp], die den Fluss sperrenden Befehle \FloatBarrier und \clearpage, Möglichkeiten für zwei Abbildungen nebeneinander und das Paket wrapfig für Textumfluss um eine Abbildung.
Was ein Float ist
Eine Abbildung oder Tabelle, die über einen Seitenumbruch läuft, sieht falsch aus: Man kann nicht hier die Hälfte zeigen und den Rest auf der nächsten Seite. LaTeX behandelt sie deshalb jeweils als eine Box und wählt automatisch eine Stelle, sobald ein Textabschnitt gesetzt ist: oben oder unten auf einer Seite oder auf einer eigenen Float-Seite. Das ist ein Float. Die beiden Standard-Float-Umgebungen sind figure und table.
Floats haben eine nützliche und eine irritierende Seite. Nützlich ist: Eine Abbildung wird nie über eine Seite zerteilt, und Nummerierung („Figure 1“, „Table 2“) sowie Querverweise mit \caption, \label und \ref passen automatisch zusammen. Irritierend ist: Die Stelle im Quelltext und die Ausgabestelle können auseinanderfallen. Der Entwurf beruht darauf, dass Sie mit \ref{fig:foo} „siehe Figure 1“ schreiben können; die Abbildung selbst muss daher nicht direkt neben diesem Satz stehen. Die Regel lautet also: nach Nummer verweisen, nicht nach Position. Bildherstellung und Projekte mit \input gehören auf andere Seiten; hier geht es nur darum, wo ein Float landet.
Die Platzierungsangaben [htbp]
Die Umgebungen figure und table akzeptieren ein optionales Argument, die Platzierungsangabe (placement specifier): eckige Klammern wie in \begin{figure}[htbp], die LaTeX mitteilen, welche Positionen es verwenden darf. Die folgenden Buchstaben können kombiniert werden.
| Angabe | Bedeutung | Hinweise |
|---|---|---|
h | here | Nahe der aktuellen Stelle im Text. h allein ist nicht erlaubt; LaTeX ergänzt automatisch t |
t | top | Oben auf einer Textseite |
b | bottom | Unten auf einer Textseite |
p | page | Eine eigene Float-Seite: nur Floats, kein Text |
! | override | Nur für diesen Float die Grenzen für Anzahl und Float/Text-Verhältnis ignorieren |
H | wirklich hier (kein Floating) | Vom float-Paket ergänzt; fixiert an Ort und Stelle, ohne Floating |
Lassen Sie die Angabe weg, verwenden Klassen wie article und book den Standard tbp (also ohne h). Geben Sie mehrere Buchstaben an, sucht LaTeX nach einer dieser erlaubten Positionen. Zwei Fallen sind wichtig. Erstens wird h allein weitgehend ignoriert: LaTeX erlaubt kein nacktes h und ergänzt still t, daher springt [h] oft trotzdem nach oben. Wenn Sie wirklich „genau hier“ brauchen, verwenden Sie [H] aus dem float-Paket, wie unten beschrieben.
Zweitens: Die Reihenfolge der Buchstaben ändert nicht die Reihenfolge, in der LaTeX sie ausprobiert. Ob [bt] oder [tb]: LaTeX testet seine Kandidaten in derselben Abfolge (grob: hier → oben → unten → Float-Seite). Die Buchstaben sind nur die *Menge* der erlaubten Positionen. Außerdem verarbeitet LaTeX Floats in der Reihenfolge ihres Auftretens im Quelltext, sodass eine spätere Abbildung eine frühere überholen kann. Praktisch heißt das: nicht zu stark einschränken. Je großzügiger Sie erlauben, etwa [tbp] oder [htbp], desto eher platziert LaTeX den Float in der Nähe. Auf einen Buchstaben verengen, besonders [h], lässt ihn oft weiter wegdriften.
\begin{figure}[htbp]
\centering
\includegraphics[width=0.6\textwidth]{plot}
\caption{実験結果}
\label{fig:result}
\end{figure}
図~\ref{fig:result} に結果を示す。Hier erlaubt [htbp] die aktuelle Stelle, oben, unten oder eine Float-Seite, und LaTeX wählt die beste Variante. \centering zum Zentrieren des Bildes, \caption für Überschrift und Nummer sowie \label für Verweise sind typische Inhalte eines Floats. Der Text verweist mit 図~\ref{fig:result} über die Nummer darauf, sodass die Prosa auch dann funktioniert, wenn die Abbildung etwas entfernt gedruckt wird (~ ist ein geschütztes Leerzeichen, das Wort und Nummer am Zeilenende zusammenhält).
Hier erzwingen — [H]
Wenn ein Float wirklich „genau dort bleiben“ muss, wo er im Quelltext steht, laden Sie im Vorspann das float-Paket und verwenden das große [H]. [H] ist kein gewöhnlicher Platzierungsbuchstabe: Es schaltet Floating vollständig aus und fixiert Abbildung oder Tabelle an Ort und Stelle. Es verhält sich fast so, als würde man dort eine große Box ablegen.
\usepackage{float}
% ...
\begin{figure}[H]
\centering
\includegraphics[width=0.6\textwidth]{diagram}
\caption{処理の流れ}
\end{figure}Betrachten Sie [H] dennoch als letztes Mittel. Ein fixierter Float kann eine große Lücke hinterlassen, wenn er unten auf der Seite nicht mehr passt, oder auf die nächste Seite geschoben werden und unten auf der aktuellen Seite Leere erzeugen. LaTeX mit einem großzügigen [htbp] arbeiten zu lassen, führt meist zu einem saubereren Ergebnis. [H] lohnt sich nur für kleine Abbildungen, die wirklich an einer exakten Textstelle stehen müssen, etwa in Schritt-für-Schritt-Anleitungen. Mit \floatplacement{figure}{H} lässt sich [H] dokumentweit voreinstellen; aus den genannten Gründen ist das aber nicht empfehlenswert.
Den Fluss sperren — \FloatBarrier und \clearpage
Das lästigste Float-Problem ist eine Abbildung, die nicht mehr in ihren Abschnitt passt und in den nächsten Abschnitt oder ins nächste Kapitel driftet. Wenn Figure 3 aus Abschnitt 2 mitten in Abschnitt 3 auftaucht, verliert der Leser die Orientierung. Dagegen setzt man eine Barriere, die Floats nicht überschreiten dürfen.
Diese Barriere ist \FloatBarrier aus dem placeins-Paket. An dieser Stelle werden alle noch ausstehenden Floats vor dem Befehl ausgegeben, und spätere Floats können ihn nicht überschreiten. Um Floats abschnittsweise einzuzäunen, schreiben Sie \FloatBarrier vor jedes \section, oder laden Sie \usepackage[section]{placeins}, das am Anfang jedes \section automatisch eine Barriere einfügt.
\usepackage{placeins}
% ...
\section{実験}
% ... 図や表 ...
\FloatBarrier % ここより先へフロートを越えさせない
\section{考察}Ein enger Verwandter ist \clearpage; der Unterschied ist der Seitenumbruch. \clearpage gibt alle ausstehenden Floats aus und beginnt dann eine neue Seite, während \FloatBarrier die Floats ausgibt, aber keinen Seitenumbruch erzwingt. Verwenden Sie also \FloatBarrier, wenn Sie Floats auf derselben Seite sperren möchten, und \clearpage, wenn ein vollständiger Seitenumbruch, etwa am Kapitelende, in Ordnung ist. Die [section]-Barriere ist standardmäßig streng und verbietet schon ein leichtes Hinausragen aus dem Abschnitt; [above] und [below] lockern das.
Eine Ebene tiefer folgt LaTeX bei der automatischen Platzierung einer Reihe von Float-Platzierungsparametern: internen Zahlen, als Bruchteile angegeben, die festlegen, wie viel einer Seite Floats einnehmen dürfen. Sie sind eine letzte Stellschraube, wenn sonst nichts hilft, wobei meist zuerst [htbp] geprüft werden sollte.
| Parameter | Standard | Bedeutung |
|---|---|---|
\topfraction | 0.7 | Maximaler Anteil des oberen Seitenbereichs, den Floats füllen dürfen |
\bottomfraction | 0.3 | Maximaler Anteil des unteren Seitenbereichs, den Floats füllen dürfen |
\textfraction | 0.2 | Minimaler Anteil einer Textseite, der Text bleiben muss |
\floatpagefraction | 0.5 | Mindestfüllung, bevor eine eigene Float-Seite entsteht |
topnumber | 2 | Maximale Zahl von Floats oben auf einer Seite |
bottomnumber | 1 | Maximale Zahl von Floats unten auf einer Seite |
totalnumber | 3 | Maximale Zahl von Floats auf einer einzelnen Seite |
Bruchteile ändern Sie mit \renewcommand{\topfraction}{0.85}, ganzzahlige Zähler mit \setcounter{totalnumber}{5}. Wenn Sie etwa \topfraction erhöhen und \textfraction senken, dürfen mehr Floats oben auf einer Seite stehen, und „passt nicht, also auf die nächste Seite“-Verschiebungen nehmen ab. Die frühere Angabe ! ist praktisch die lokale Variante dieser Abstimmung: Sie weist LaTeX an, diese Grenzen nur für einen Float zu ignorieren.
Zwei nebeneinander setzen
Oft sollen zwei Abbildungen oder Tabellen nebeneinander stehen. Da ein Float beliebigen Inhalt aufnehmen kann, ist die Grundidee, zwei nebeneinanderliegende Boxen in ein einziges figure zu setzen. Mit reinem LaTeX nimmt man minipage; sollen Teilabbildungen eigene Labels wie (a), (b) erhalten, verwenden Sie das Paket subcaption.
Eine minipage ist eine Umgebung, die eine „kleine Seite“ mit gewählter Breite erzeugt. Setzen Sie zwei davon nebeneinander und dazwischen \hfill als dehnbaren horizontalen Abstand, verteilen sie sich nach links und rechts. Der Trick ist, jede etwas schmaler als die halbe Textbreite zu machen, etwa 0.48\textwidth, damit die Summe knapp unter der vollen Breite bleibt.
\begin{figure}[htbp]
\centering
\begin{minipage}{0.48\textwidth}
\centering
\includegraphics[width=\linewidth]{left}
\caption{左の図}
\label{fig:left}
\end{minipage}
\hfill
\begin{minipage}{0.48\textwidth}
\centering
\includegraphics[width=\linewidth]{right}
\caption{右の図}
\label{fig:right}
\end{minipage}
\end{figure}Hier stehen zwei minipages der Breite 0.48\textwidth innerhalb von figure, und das \hfill dazwischen drückt den freien Raum nach außen, sodass sie an den Rändern sitzen. In jeder minipage bezeichnet \linewidth deren Breite; \includegraphics[width=\linewidth] füllt also die Box. Weil jede minipage ihre eigene \caption hat, erhalten sie getrennte Nummern, etwa „Figure 1“ und „Figure 2“. Soll das Paar als eine Abbildung gelten, setzen Sie nur eine \caption direkt unter figure.
Sollen die beiden als Teilabbildungen einer Abbildung nummeriert werden, etwa „Figure 2(a)“ und „Figure 2(b)“, verwenden Sie die Umgebung subfigure aus dem subcaption-Paket. Sie wird ähnlich wie minipage geschrieben; \subcaption oder \caption in der Umgebung erzeugt die Labels (a)/(b). Teilabbildungen und captions behandelt die eigene Seite „Captions & subfigures“ ausführlich. Zwei Tabellen nebeneinander funktionieren ebenso: In jede minipage kommt ein tabular.
Text um eine Abbildung fließen lassen — wrapfig
Wenn Fließtext seitlich um eine kleine Abbildung laufen soll, wie in Zeitschriftenlayouts, verwenden Sie die Umgebung wrapfigure aus dem wrapfig-Paket, für Tabellen wraptable. Die Syntax lautet:
\usepackage{wrapfig}
% ...
\begin{wrapfigure}[12]{r}[34pt]{0.4\textwidth}
\centering
\includegraphics[width=0.38\textwidth]{portrait}
\caption{人物像}
\end{wrapfigure}Die Umgebung hat vier Argumente, zwei davon sind Pflicht. {r} ist die Platzierung (welche Seite), und das letzte {0.4\textwidth} ist die Breite der Abbildung. Das optionale [12] ist die Zahl der umfließenden Zeilen, das optionale [34pt] der Überhang, also wie weit die Abbildung in den Rand ragt. Die Platzierungsbuchstaben kommen paarweise: Kleinbuchstaben fixieren vor Ort, Großbuchstaben erlauben Floating.
| Buchstabe | Seite | Hinweise |
|---|---|---|
r / R | rechts | r = hier, R = darf floaten |
l / L | links | l = hier, L = darf floaten |
i / I | innen | Zur Bindung hin; für twoside-Dokumente |
o / O | außen | Von der Bindung weg; für twoside-Dokumente |
Im Beispiel steht eine 0.4\textwidth breite Abbildung rechts vom Text, und die nächsten 12 Zeilen fließen links daran vorbei; [34pt] lässt sie in den rechten Rand ragen. Lassen Sie die Zeilenzahl [12] weg, schätzt wrapfig sie aus der Höhe der Abbildung. Geben Sie sie explizit an, wenn die Schätzung misslingt und der Umfluss unruhig wirkt. Für zweiseitigen Satz, bei dem die Abbildung von der Bindung weg stehen soll, verwenden Sie o (outer); dann wechseln die Seiten automatisch zwischen linken und rechten Seiten.
So nützlich wrapfig ist, es ist eigenwillig; behalten Sie daher seine Einschränkungen im Blick. Das Handbuch warnt im Kern:
- Nicht innerhalb, unmittelbar vor oder unmittelbar nach einer Liste verwenden. Halten Sie es aus
itemize,enumerate,descriptionund ähnlichen Umgebungen heraus. - Nicht über einen Seitenumbruch laufen lassen. Platzieren Sie die Umgebung so, dass der Umfluss nicht auf zwei Seiten geteilt wird; meiden Sie Seitenränder.
- Keine Überschriften oder großen Gleichungen darum herumfließen lassen. Aus optischen Gründen sollte nur normaler Fließtext umfließen; Abschnittsüberschriften und abgesetzte Gleichungen wirken schlecht.
- Für stabilere Ergebnisse an einer Absatzgrenze beginnen, nicht mitten im Absatz. In einer
minipageoderparboxmuss der Umfluss enden, bevor die Gruppe endet.
Wenn der Umfluss nicht sauber funktioniert, helfen meist eine etwas schmalere Abbildung, eine explizite Zeilenzahl oder ein um einen Absatz verschobener Start. Wenn es dann immer noch nicht passt, kann der Verzicht auf wrapfig zugunsten eines normalen Floats ([htbp] ober- oder unterhalb des Textes) am Ende besser lesbar sein.