Positionnement de la table LaTeX

98

J'ai un document LaTeX qui contient un paragraphe suivi de 4 tableaux suivis d'un deuxième paragraphe. Je veux que les 4 tableaux apparaissent entre les deux paragraphes, ce qui, d'après ce que j'ai lu, signifie que je devrais utiliser l'option [h] après avoir commencé l'environnement de table (par exemple \begin{table}[h]).

En utilisant cela, les deux premiers tableaux apparaissent après le paragraphe 1 comme prévu, cependant le paragraphe 2 est alors affiché avec les deux derniers tableaux apparaissant sur la page suivante. Comment puis-je faire apparaître les tableaux au bon endroit?

J'ai essayé diverses choses pour corriger le positionnement, comme l'utilisation, [h!]mais cela ne semble pas avoir d'effet. Utiliser \clearpageaprès les tableaux a l'effet désiré de faire apparaître les tableaux avant le deuxième paragraphe, mais cela laisse ensuite les deux derniers tableaux sur leur propre page avec beaucoup d'espace blanc, alors que je préférerais que le deuxième paragraphe commence immédiatement après le les tables.

Paragraph 1...

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

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

Paragraph 2...
Jared Russell
la source
J'ai essayé cela aussi et cela n'a eu aucun effet.
Jared Russell
6
L'ordre de (toutes) les lettres dans l'argument optionnel n'a aucun effet.
Will Robertson
@Gacek, je parie que Will Robertson a raison. Selon mintaka.sdsu.edu/GF/bibliog/latex/floats.html , "[l] es arguments entre parenthèses indiquent à LaTeX où il est possible de placer le flottant; leur ordre n'a pas d'importance."
Waldir Leoncio
Ceci n'est que légèrement lié, mais je pense qu'il est important de savoir: l'option [h] ne devrait jamais être utilisée seule, et en fait, les nouvelles versions de LaTeX la remplacent automatiquement par [ht]. Cela pourrait aussi avoir été votre problème. Pour en savoir plus, lisez ce guide dans la section 17.2 «Placement des figures».
vauhochzett
@Gacek [h!]est la bonne version. C'est l'équivalent de [H]. Les deux nécessitent le floatpackage.
winklerrr

Réponses:

171

Après avoir fait quelques recherches sur Google, je suis tombé sur le paquet float qui vous permet d'empêcher LaTeX de repositionner les tables.

Dans le préambule:

\usepackage{float}
\restylefloat{table}

Ensuite, pour chaque table, vous pouvez utiliser l' Hoption de placement (par exemple \begin{table}[H]) pour vous assurer qu'elle n'est pas repositionnée.

Jared Russell
la source
22
Peut-être vaut-il la peine de souligner que "H" doit être utilisé et non "h". C'est ce que j'ai observé moi-même.
bikashg
@bikashg Héquivaut à h!(pour plus d'informations sur les paramètres, vérifiez ma réponse ici )
winklerrr
1
Dans le cas où quelqu'un utilise le mode org, mettez ceci en haut: #+LATEX_HEADER: \usepackage{float} #+LATEX_HEADER: \restylefloat{table} Et puis, #+CAPTION: A table #+NAME: tab:table-label #+ATTR_LATEX: :placement [H] :center t <<actual table content>> excusez le mauvais formatage de nouvelle ligne dans les commentaires.
Gaurav
23

Cela a fonctionné pour moi:

Au début, les usepackagedéfinitions incluent:

\usepackage{placeins}

Et avant et après ajouter:

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

Cela place le tableau exactement où vous le souhaitez dans le texte.

Don Giulio
la source
C'est un package vraiment très utile. Merci d'avoir partagé!
John David le
11

Positionnement de la table

Paramètres disponibles

Un tableau peut facilement être placé avec les paramètres suivants:

  • hPlacez le flotteur ici , c'est-à-dire approximativement au même point où il se trouve dans le texte source (mais pas exactement à l'endroit)
  • tPosition en haut de la page.
  • bPosition au bas de la page.
  • pMettre sur une page spéciale pour les flotteurs uniquement.
  • ! Remplacer les paramètres internes que LaTeX utilise pour déterminer les «bonnes» positions de flotteur.
  • HPlace le flotteur à l'emplacement précis du code LATEX. Nécessite le package float. C'est un peu équivalent à h!.

Si vous souhaitez utiliser H(ou h!) pour un positionnement exact, assurez-vous que le floatpackage est correctement configuré dans le préambule:

\usepackage{float}
\restylefloat{table}

Exemple

Si vous souhaitez placer le tableau sur la même page, soit à l'endroit exact, soit au moins en haut de la page (ce qui convient le mieux au moteur latex), utilisez les paramètres het tcomme ceci:

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

Sources: Overleaf.com

winklerrr
la source
7

Que se passe-t-il si le texte, les tableaux et le texte ne tiennent pas sur une seule page? En essayant de forcer la composition de cette manière, vous risquez très probablement de vous retrouver avec des pages trop courtes; c'est-à-dire, parce qu'un tableau ne peut pas par défaut sauter sur une page, il sera poussé à la suivante et laissera un espace sur la page précédente. Vous remarquerez que vous ne voyez jamais cela dans un livre publié.

Le comportement flottant est une bonne chose! Je recommande d'utiliser [htbp]comme paramètre par défaut pour tous les tableaux et figures jusqu'à ce que votre document soit complet; alors seulement devrait penser à affiner leur placement précis.

PS Lisez la FAQ ; la plupart des autres réponses ici sont des combinaisons partielles de conseils qui y sont donnés.

Will Robertson
la source
1
Le comportement flottant évite de laisser de l'espace, mais le déplacement des figures rend la vie plus difficile pour le lecteur. Pour cette raison, Edward Tufte, un concepteur important, recommande d'intégrer du texte et des figures / tableaux - dans ses livres publiés, il ne fait pas référence aux tableaux par numéro. "Voir le tableau 1" n'apparaît pas, car le tableau est juste là. Il les place simplement au bon endroit - au milieu de la phrase. Je suppose que cela signifie faire plus de travail pour mettre en page les tableaux mais moins de travail pour les lecteurs.
Blaisorblade
@Blaisorblade - bien sûr, et il y a d'autres exemples notables, mais je propose qu'écrire un texte de cette manière est un ordre de grandeur plus difficile pour la plupart des gens que d'utiliser des flotteurs. Vous parlez de rejeter 99% de la conception du livre pour un optimum irréalisable. Considérez le point que j'ai fait dans ma réponse: "Et si un tableau ne peut pas tenir sous le texte?" Dans votre scénario, vous devez repenser ou réécrire, ce qui est intenable dans de nombreuses situations.
Will Robertson
1
Eh bien, nous sommes d'accord sur ce qu'est l'optimum - et oui, le plus souvent c'est pratiquement irréalisable. Dans la vie de tous les jours, je m'en tiens généralement aux flotteurs. Mais j'ai de petits tableaux et figures en ligne, et cela fonctionne plutôt bien (à condition que je vérifie la version finale - ce qui est facile uniquement parce que j'ai des documents d'au plus 20 pages). Je vois juste le flottement comme un compromis raisonnable plutôt que comme une bonne chose :-).
Blaisorblade
Quelle est la différence entre le réglage [htbp]et rien du tout?
Waldir Leoncio
@WaldirLeoncio au moins pour moi, rien du tout par défaut à [ht]plutôt que[htbp]
MrJonas
7

Voici une solution simple, de Wikibooks :

Le package placeins fournit la commande \ FloatBarrier, qui peut être utilisée pour empêcher les flotteurs d'être déplacés dessus.

Je mets juste \FloatBarrieravant et après chaque table.

Jason Bertels
la source
4

Si vous voulez avoir deux tables côte à côte, vous pouvez utiliser: (avec le floatpackage chargé)

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

Chacun aura sa propre légende et son propre numéro. Une autre option est le subfigurepackage.

Crowley
la source
3

Vous pouvez ajouter ceci à votre préambule et ajuster les valeurs si nécessaire:

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

En particulier, la \ floatpagefraction peut être intéressante.

Mica
la source