LaTeX Tischpositionierung

97

Ich habe ein LaTeX-Dokument, das einen Absatz gefolgt von 4 Tabellen gefolgt von einem zweiten Absatz enthält. Ich möchte, dass die 4 Tabellen zwischen den beiden Absätzen angezeigt werden. Nach dem, was ich gelesen habe, sollte ich nach dem Start der Tabellenumgebung die Option [h] verwenden (z \begin{table}[h]. B. ).

Auf diese Weise werden die ersten beiden Tabellen erwartungsgemäß nach Absatz 1 angezeigt. Absatz 2 wird dann jedoch mit den letzten beiden Tabellen auf der folgenden Seite angezeigt. Wie kann ich dafür sorgen, dass die Tabellen an der richtigen Stelle angezeigt werden?

Ich habe verschiedene Dinge versucht, um die Positionierung zu korrigieren, z. B. die Verwendung, [h!]aber dies scheint keine Auswirkung zu haben. Die Verwendung \clearpagenach den Tabellen hat den gewünschten Effekt, dass die Tabellen vor dem zweiten Absatz angezeigt werden, aber dann bleiben die letzten beiden Tabellen auf ihrer eigenen Seite mit viel Leerraum, wenn ich es vorziehen würde, wenn der zweite Absatz unmittelbar nach dem beginnt Tabellen.

Paragraph 1...

\begin{table}[h]
    table1...
\end{table}

\begin{table}[h]
   table2...
\end{table}[h]
...

Paragraph 2...
Jared Russell
quelle
Ich habe das auch versucht und es hatte keine Wirkung.
Jared Russell
6
Die Reihenfolge (aller) Buchstaben im optionalen Argument hat keine Auswirkung.
Will Robertson
@Gacek, ich wette Will Robertson hat recht. Laut mintaka.sdsu.edu/GF/bibliog/latex/floats.html "[t] sagen die Argumente in Klammern LaTeX, wo es möglich ist, den Float zu platzieren; ihre Reihenfolge ist unwichtig."
Waldir Leoncio
Dies ist nur geringfügig verwandt, aber ich halte es für wichtig zu wissen: Die Option [h] sollte niemals alleine verwendet werden, und tatsächlich ersetzen neuere LaTeX-Versionen sie automatisch durch [ht]. Das könnte auch Ihr Problem gewesen sein. Weitere Informationen finden Sie in diesem Handbuch in Abschnitt 17.2 "Platzierung der Figuren".
Vauhochzett
@Gacek [h!]ist die richtige Version. Es ist das Äquivalent zu [H]. Beide benötigen das floatPaket.
Winklerrr

Antworten:

170

Nachdem ich noch ein bisschen gegoogelt hatte, stieß ich auf das Float- Paket, mit dem Sie verhindern können, dass LaTeX die Tabellen neu positioniert.

In der Präambel:

\usepackage{float}
\restylefloat{table}

Dann können Sie für jede Tabelle die HPlatzierungsoption (z. B. \begin{table}[H]) verwenden, um sicherzustellen, dass sie nicht neu positioniert wird.

Jared Russell
quelle
22
Vielleicht ist hervorzuheben, dass "H" verwendet werden sollte und nicht "h". Das habe ich für mich beobachtet.
Bikashg
@bikashg Hist äquivalent zu h!(für weitere Informationen über Parameter überprüfen Sie meine Antwort hier )
winklerrr
1
Wenn jemand den Organisationsmodus verwendet , setzen Sie dies oben: #+LATEX_HEADER: \usepackage{float} #+LATEX_HEADER: \restylefloat{table} Und #+CAPTION: A table #+NAME: tab:table-label #+ATTR_LATEX: :placement [H] :center t <<actual table content>> entschuldigen Sie dann die schlechte Formatierung der Zeilenumbrüche in den Kommentaren.
Gaurav
23

Das hat bei mir funktioniert:

Zu Beginn der usepackageDefinitionen gehören:

\usepackage{placeins}

Und vorher und nachher hinzufügen:

\FloatBarrier
\begin{table}[h]
    \begin{tabular}{llll}
      .... 
    \end{tabular}
\end{table}
\FloatBarrier

Dadurch wird die Tabelle genau dort platziert, wo Sie sie im Text haben möchten.

Don Giulio
quelle
Dies ist ein wirklich sehr nützliches Paket. Danke für das Teilen!
John David
11

Tischpositionierung

Verfügbare Parameter

Eine Tabelle kann einfach mit den folgenden Parametern platziert werden:

  • hPlatzieren Sie den Float hier , dh ungefähr an der Stelle, an der er im Quelltext auftritt (jedoch nicht genau an der Stelle).
  • tPositionieren Sie oben auf der Seite.
  • bPosition am unteren Rand der Seite.
  • pLegen Sie eine spezielle Seite nur für Floats an.
  • ! Interne Parameter überschreiben LaTeX verwendet zur Bestimmung "guter" Float-Positionen.
  • HPlatziert den Float genau an der Stelle im LATEX-Code. Benötigt das Float-Paket. Dies ist etwas äquivalent zu h!.

Wenn Sie H(oder h!) für eine genaue Positionierung verwenden möchten , stellen Sie sicher, dass Sie das floatPaket in der Präambel richtig eingerichtet haben:

\usepackage{float}
\restylefloat{table}

Beispiel

Wenn Sie die Tabelle auf derselben Seite platzieren möchten, entweder genau an der richtigen Stelle oder zumindest oben auf der Seite (was für die Latex-Engine am besten geeignet ist), verwenden Sie die Parameter hund folgendermaßen t:

\begin{table}[ht]
    table content ...
\end{table}

Quellen: Overleaf.com

winklerrr
quelle
7

Was passiert, wenn der Text plus Tabellen plus Text nicht auf eine einzelne Seite passt? Wenn Sie versuchen, den Satz auf diese Weise zu erzwingen, werden Sie höchstwahrscheinlich Seiten erhalten, die zu kurz sind. Das heißt, da eine Tabelle standardmäßig nicht über eine Seite hinwegbrechen kann, wird sie zur nächsten verschoben und hinterlässt zuvor eine Lücke auf der Seite. Sie werden feststellen, dass Sie dies in einem veröffentlichten Buch nie sehen.

Das schwebende Verhalten ist eine gute Sache! Ich empfehle, [htbp]als Standardeinstellung für alle Tabellen und Abbildungen zu verwenden, bis Ihr Dokument vollständig ist. Nur dann sollten Sie über eine Feinabstimmung ihrer genauen Platzierung nachdenken.

PS Lesen Sie die FAQ ; Die meisten anderen Antworten hier sind teilweise Kombinationen von Ratschlägen, die dort gegeben werden.

Will Robertson
quelle
1
Das schwebende Verhalten vermeidet es, Platz zu lassen, aber das Wegbewegen von Figuren erschwert dem Leser das Leben. Aus diesem Grund empfiehlt Edward Tufte, ein wichtiger Designer, die Integration von Text und Abbildungen / Tabellen - in seinen veröffentlichten Büchern bezieht er sich nicht auf Tabellen nach Zahlen. "Siehe Tabelle 1" wird nicht angezeigt, da die Tabelle nur vorhanden ist. Er platziert sie einfach an der richtigen Stelle - mitten im Satz. Ich denke, das bedeutet mehr Arbeit, um die Tabellen zu decken, aber weniger Arbeit für die Leser.
Blaisorblade
@Blaisorblade - sicher, und es gibt andere bemerkenswerte Beispiele, aber ich schlage vor, dass das Schreiben eines solchen Textes für die meisten Menschen um eine Größenordnung schwieriger ist als die Verwendung von Floats. Sie sprechen davon, 99% des Buchdesigns für ein unerreichbares Optimum zu verwerfen. Betrachten Sie den Punkt, den ich in meiner Antwort angesprochen habe: "Was ist, wenn eine Tabelle nicht unter den Text passt?" In Ihrem Szenario müssen Sie neu entwerfen oder umschreiben, und dies ist in vielen Situationen unhaltbar.
Will Robertson
1
Nun, wir sind uns einig, was das Optimum ist - und ja, meistens ist es praktisch unerreichbar. Im Alltag halte ich mich normalerweise auch an Schwimmer. Aber ich habe kleine Tabellen und Abbildungen inline und es funktioniert ziemlich gut (vorausgesetzt, ich überprüfe die endgültige Version - was nur einfach ist, weil ich Dokumente mit höchstens 20 Seiten habe). Ich sehe Floating nur als vernünftigen Kompromiss und nicht als gute Sache :-).
Blaisorblade
Was ist der Unterschied zwischen Einstellung [htbp]und gar nichts?
Waldir Leoncio
@ WaldirLeoncio zumindest für mich, nichts ist standardmäßig [ht]eher als[htbp]
MrJonas
7

Hier ist eine einfache Lösung von Wikibooks :

Das placeins-Paket enthält den Befehl \ FloatBarrier, mit dem verhindert werden kann, dass Floats darüber verschoben werden.

Ich habe gerade \FloatBarriervor und nach jedem Tisch gesetzt.

Jason Bertels
quelle
4

Wenn Sie zwei Tabellen nebeneinander haben möchten, können Sie Folgendes verwenden: (mit floatgeladenem Paket)

\begin{table}[H]
 \begin{minipage}{.5\textwidth}
  %first table
 \end{minipage}
 \begin{minipage}{.5\textwidth}
  %second table
 \end{minipage}
\end{table}

Jeder hat eine eigene Beschriftung und Nummer. Eine weitere Option ist das subfigurePaket.

Crowley
quelle
3

Sie können dies zu Ihrer Präambel hinzufügen und die Werte nach Bedarf anpassen:

 %------------begin Float Adjustment
%two column float page must be 90% full
\renewcommand\dblfloatpagefraction{.90}
%two column top float can cover up to 80% of page
\renewcommand\dbltopfraction{.80}
%float page must be 90% full
\renewcommand\floatpagefraction{.90}
%top float can cover up to 80% of page
\renewcommand\topfraction{.80}
%bottom float can cover up to 80% of page
\renewcommand\bottomfraction{.80}
%at least 10% of a normal page must contain text
\renewcommand\textfraction{.1}
%separation between floats and text
\setlength\dbltextfloatsep{9pt plus 5pt minus 3pt }
%separation between two column floats and text
\setlength\textfloatsep{4pt plus 2pt minus 1.5pt}

Insbesondere kann die \ floatpagefraction von Interesse sein.

Glimmer
quelle