Posizionamento della tabella LaTeX


98

Ho un documento LaTeX che contiene un paragrafo seguito da 4 tabelle seguite da un secondo paragrafo. Voglio che le 4 tabelle appaiano tra i due paragrafi, il che da quello che ho letto significa che dovrei usare l'opzione [h] dopo aver avviato l'ambiente table (ad esempio \begin{table}[h]).

Usando questo le prime due tabelle appaiono dopo il paragrafo 1 come previsto, tuttavia il paragrafo 2 viene quindi visualizzato con le ultime due tabelle che compaiono nella pagina seguente. Come posso fare in modo che le tabelle vengano visualizzate nella posizione corretta?

Ho provato varie cose per correggere il posizionamento come l'utilizzo, [h!]tuttavia questo non sembra avere alcun effetto. L'utilizzo \clearpagedopo le tabelle ha l'effetto desiderato di far apparire le tabelle prima del secondo paragrafo, ma poi lascia le ultime due tabelle sulla propria pagina con un sacco di spazio bianco, quando preferirei che il secondo paragrafo inizi immediatamente dopo il tavoli.

Paragraph 1...

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

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

Paragraph 2...

Ho provato anche quello e non ha avuto alcun effetto.
Jared Russell

6
L'ordine di (tutte) le lettere nell'argomento facoltativo non ha effetto.
Will Robertson,

@ Gacek, scommetto che Will Robertson ha ragione. Secondo mintaka.sdsu.edu/GF/bibliog/latex/floats.html , "[gli] argomenti tra parentesi indicano a LaTeX dove è possibile mettere il float; il loro ordine non è importante."
Waldir Leoncio

Questo è solo leggermente correlato, ma sento che sia importante sapere: l'opzione [h] non dovrebbe mai essere usata da sola, e infatti, le versioni più recenti di LaTeX la sostituiscono con [ht] automaticamente. Potrebbe essere stato anche il tuo problema. Puoi leggere di più in questa guida nella sezione 17.2 "Posizionamento delle figure".
vauhochzett

@ Gacek [h!]è la versione corretta. È l'equivalente di [H]. Entrambi richiedono il floatpacchetto.
winklerrr

Risposte:


171

Dopo aver cercato su Google mi sono imbattuto nel pacchetto float che ti consente di impedire a LaTeX di riposizionare le tabelle.

Nel preambolo:

\usepackage{float}
\restylefloat{table}

Quindi per ogni tabella puoi utilizzare l' Hopzione di posizionamento (ad esempio \begin{table}[H]) per assicurarti che non venga riposizionata.


22
Forse vale la pena sottolineare che si dovrebbe usare "H" e non "h". Questo è ciò che ho osservato per me stesso.
bikashg

@bikashg Hè equivalente a h!(per maggiori informazioni sui parametri controlla la mia risposta qui )
winklerrr

1
Nel caso qualcuno stia usando la modalità org, mettilo sopra: #+LATEX_HEADER: \usepackage{float} #+LATEX_HEADER: \restylefloat{table} E poi, #+CAPTION: A table #+NAME: tab:table-label #+ATTR_LATEX: :placement [H] :center t <<actual table content>> scusa la scarsa formattazione di nuova riga nei commenti.
Gaurav

23

Questo ha funzionato per me:

All'inizio con le usepackagedefinizioni includono:

\usepackage{placeins}

E prima e dopo aggiungi:

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

Questo posiziona la tabella esattamente dove vuoi nel testo.


Questo è un pacchetto davvero molto utile. Grazie per la condivisione!
John David,

11

Posizionamento del tavolo

Parametri disponibili

È possibile posizionare facilmente una tabella con i seguenti parametri:

  • hPosiziona il galleggiante qui , cioè approssimativamente nello stesso punto in cui si trova nel testo di origine (tuttavia, non esattamente nel punto)
  • tPosizione nella parte superiore della pagina.
  • bPosizione in fondo alla pagina.
  • pMetti su una pagina speciale solo per i galleggianti.
  • ! Sovrascrivi i parametri interni che LaTeX usa per determinare le "buone" posizioni flottanti.
  • HPosiziona il float esattamente nella posizione nel codice LATEX. Richiede il pacchetto float. Questo è in qualche modo equivalente a h!.

Se vuoi usare H(o h!) per un posizionamento esatto, assicurati di aver floatimpostato correttamente il pacchetto nel preambolo:

\usepackage{float}
\restylefloat{table}

Esempio

Se vuoi posizionare la tabella sulla stessa pagina, nel punto esatto o almeno nella parte superiore della pagina (ciò che si adatta meglio al motore latex), usa i parametri he in tquesto modo:

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

Fonti: Overleaf.com


7

Cosa succede se il testo più le tabelle più il testo non si adattano a una singola pagina? Se provi a forzare la composizione tipografica in questo modo, molto probabilmente ti ritroverai con pagine troppo corte; cioè, poiché una tabella non può interrompersi per impostazione predefinita su una pagina, verrà spostata alla successiva e lascerà uno spazio vuoto nella pagina precedente. Noterai che non lo vedrai mai in un libro pubblicato.

Il comportamento fluttuante è una buona cosa! Consiglio di utilizzare [htbp]come impostazione predefinita per tutte le tabelle e le figure fino al completamento del documento; solo allora dovrebbe pensare a mettere a punto il loro posizionamento preciso.

PS Leggi le FAQ ; la maggior parte delle altre risposte qui sono combinazioni parziali di consigli forniti lì.


1
Il comportamento fluttuante evita di lasciare spazio, ma allontanare le figure rende la vita più difficile per il lettore. Per questo motivo Edward Tufte, un importante designer, consiglia di integrare testo e figure / tabelle - nei suoi libri pubblicati, non fa riferimento alle tabelle per numero. "Vedi tabella 1" non viene visualizzato, poiché la tabella è lì. Li mette solo al posto giusto - a metà frase. Immagino che questo significhi fare più lavoro per disporre le tabelle ma meno lavoro per i lettori.
Blaisorblade

@ Blaisorblade - certo, e ci sono altri esempi degni di nota, ma propongo che scrivere un testo in questo modo sia un ordine di grandezza più difficile per la maggior parte delle persone che usare i float. Stai parlando di scartare il 99% del design del libro per un ottimo irraggiungibile. Considera il punto che ho fatto nella mia risposta: "cosa succede se una tabella non può stare sotto il testo?" Nel tuo scenario devi ridisegnare o riscrivere, e questo è insostenibile in molte situazioni.
Will Robertson

1
Bene, siamo d'accordo su quale sia l'ottimo e sì, molto spesso è praticamente irraggiungibile. Nella vita di tutti i giorni di solito mi attengo anche ai galleggianti. Ma ho piccole tabelle e figure in linea, e funziona piuttosto bene (a condizione di controllare la versione finale, che è facile solo perché ho documenti di massimo 20 pagine). Vedo il fluttuare come un ragionevole compromesso piuttosto che una buona cosa :-).
Blaisorblade

Qual è la differenza tra l'impostazione [htbp]in opposizione a niente?
Waldir Leoncio

@WaldirLeoncio almeno per me, niente è impostato per impostazione predefinita a [ht]piuttosto che[htbp]
MrJonas,

7

Ecco una soluzione semplice, da Wikibooks :

Il pacchetto placeins fornisce il comando \ FloatBarrier, che può essere usato per impedire che i float vengano spostati su di esso.

Ho appena messo \FloatBarrierprima e dopo ogni tavolo.


4

Se vuoi avere due tabelle una accanto all'altra puoi usare: (con floatpacchetto caricato)

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

Ognuno avrà la propria didascalia e numero. Un'altra opzione è il subfigurepacchetto.


3

Puoi aggiungerlo al preambolo e regolare i valori secondo necessità:

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

In particolare, la \ floatpagefraction potrebbe essere di interesse.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.