Posicionamiento de la mesa LaTeX

98

Tengo un documento LaTeX que contiene un párrafo seguido de 4 tablas seguido de un segundo párrafo. Quiero que aparezcan las 4 tablas entre los dos párrafos, lo que por lo que he leído significa que debería usar la opción [h] después de comenzar el entorno de la tabla (por ejemplo \begin{table}[h]).

Con esto, las dos primeras tablas aparecen después del párrafo 1 como se esperaba, sin embargo, el párrafo 2 se muestra y las dos últimas tablas aparecen en la página siguiente. ¿Cómo puedo hacer que las tablas aparezcan en la ubicación correcta?

He intentado varias cosas para corregir el posicionamiento, como usar, [h!]sin embargo, esto no parece tener ningún efecto. Usar \clearpagedespués de las tablas tiene el efecto deseado de hacer que las tablas aparezcan antes del segundo párrafo, pero luego deja las dos últimas tablas en su propia página con muchos espacios en blanco, cuando preferiría que el segundo párrafo comenzara inmediatamente después de la mesas.

Paragraph 1...

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

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

Paragraph 2...
Jared Russell
fuente
Lo intenté también y no tuvo ningún efecto.
Jared Russell
6
El orden de (todas) las letras en el argumento opcional no tiene ningún efecto.
Will Robertson
@Gacek, apuesto a que Will Robertson tiene razón. Según mintaka.sdsu.edu/GF/bibliog/latex/floats.html , "[l] os argumentos entre paréntesis le dicen a LaTeX dónde es posible colocar el flotador; su orden no es importante".
Waldir Leoncio
Esto está solo ligeramente relacionado, pero creo que es importante saberlo: la opción [h] nunca debe usarse sola y, de hecho, las versiones más recientes de LaTeX la reemplazan con [ht] automáticamente. Ese también podría haber sido tu problema. Puede leer más en esta guía en la sección 17.2 "Colocación de figuras".
vauhochzett
@Gacek [h!]es la versión correcta. Es el equivalente a [H]. Ambos requieren el floatpaquete.
winklerrr

Respuestas:

171

Después de buscar un poco más en Google, encontré el paquete flotante que le permite evitar que LaTeX reposicione las tablas.

En el preámbulo:

\usepackage{float}
\restylefloat{table}

Luego, para cada mesa, puede usar la Hopción de ubicación (por ejemplo \begin{table}[H]) para asegurarse de que no se reposicione.

Jared Russell
fuente
22
Quizás vale la pena enfatizar que se debe usar "H" y no "h". Eso es lo que observé por mí mismo.
bikashg
@bikashg Hes equivalente a h!(para obtener más información sobre los parámetros, consulte mi respuesta aquí )
winklerrr
1
En caso de que alguien esté usando el modo org, ponga esto en la parte superior: #+LATEX_HEADER: \usepackage{float} #+LATEX_HEADER: \restylefloat{table} Y luego, #+CAPTION: A table #+NAME: tab:table-label #+ATTR_LATEX: :placement [H] :center t <<actual table content>> disculpe el formato deficiente de nueva línea en los comentarios.
Gaurav
23

Esto funcionó para mí:

Al principio con las usepackagedefiniciones se incluyen:

\usepackage{placeins}

Y antes y después agregue:

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

Esto coloca la tabla exactamente donde desea en el texto.

Don Giulio
fuente
Este es un paquete realmente muy útil. ¡Gracias por compartir!
John David
11

Colocación de la mesa

Parámetros disponibles

Una tabla se puede colocar fácilmente con los siguientes parámetros:

  • hColoque el flotador aquí , es decir, aproximadamente en el mismo punto en el que aparece en el texto fuente (sin embargo, no exactamente en el lugar)
  • tPosición en la parte superior de la página.
  • bPosición en la parte inferior de la página.
  • pColoque una página especial solo para carrozas.
  • ! Anula los parámetros internos que utiliza LaTeX para determinar posiciones flotantes "buenas".
  • HColoca el flotador precisamente en la ubicación del código LATEX. Requiere el paquete flotante. Esto es algo equivalente a h!.

Si desea utilizar H(o h!) para un posicionamiento exacto, asegúrese de tener el floatpaquete configurado correctamente en el preámbulo:

\usepackage{float}
\restylefloat{table}

Ejemplo

Si desea colocar la tabla en la misma página, ya sea en el lugar exacto o al menos en la parte superior de la página (lo que se adapta mejor al motor de látex), use los parámetros hy tasí:

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

Fuentes: Overleaf.com

winklerrr
fuente
7

¿Qué sucede si el texto más las tablas más el texto no caben en una sola página? Al intentar forzar la composición tipográfica de esta forma, es muy probable que acabe con páginas demasiado cortas; es decir, debido a que una tabla no puede dividirse por defecto en una página, será empujada a la siguiente y dejará un espacio en la página anterior. Notarás que nunca ves esto en un libro publicado.

¡El comportamiento flotante es algo bueno! Recomiendo usar [htbp]como configuración predeterminada para todas las tablas y figuras hasta que su documento esté completo; Solo entonces debería pensar en afinar su ubicación precisa.

PD Lea las preguntas frecuentes ; la mayoría de las otras respuestas aquí son combinaciones parciales de consejos que se dan allí.

Will Robertson
fuente
1
El comportamiento flotante evita dejar espacio, pero alejar las figuras dificulta la vida del lector. Por esta razón, Edward Tufte, un diseñador importante, recomienda integrar texto y figuras / tablas; en sus libros publicados, no se refiere a las tablas por número. "Ver tabla 1" no aparece, ya que la tabla está ahí. Simplemente los coloca en el lugar correcto: a mitad de la oración. Supongo que eso significa hacer más trabajo para diseñar las tablas, pero menos trabajo para los lectores.
Blaisorblade
@Blaisorblade: claro, y hay otros ejemplos notables, pero propongo que escribir un texto de esa manera es un orden de magnitud más difícil para la mayoría de las personas que usar flotadores. Estás hablando de descartar el 99% del diseño del libro por un óptimo inalcanzable. Considere el punto que hice en mi respuesta: '¿qué pasa si una tabla no cabe debajo del texto?' En tu escenario tienes que rediseñarlo o reescribirlo, y esto es insostenible en muchas situaciones.
Will Robertson
1
Bueno, estamos de acuerdo en cuál es el óptimo, y sí, la mayoría de las veces es prácticamente inalcanzable. En el día a día también suelo ceñirme a los flotadores. Pero tengo pequeñas tablas y figuras en línea, y funciona bastante bien (siempre que verifique la versión final, que es fácil solo porque tengo documentos de 20 páginas como máximo). Solo veo la flotación como una compensación razonable en lugar de algo bueno :-).
Blaisorblade
¿Cuál es la diferencia entre configurar [htbp]y no nada en absoluto?
Waldir Leoncio
@WaldirLeoncio al menos para mí, nada en todos los valores predeterminados a un [ht]lugar de[htbp]
MrJonas
7

Aquí tienes una solución sencilla de Wikilibros :

El paquete placeins proporciona el comando \ FloatBarrier, que se puede utilizar para evitar que los flotadores se muevan sobre él.

Solo pongo \FloatBarrierantes y después de cada mesa.

Jason Bertels
fuente
4

Si desea tener dos tablas una al lado de la otra, puede usar: (con el floatpaquete cargado)

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

Cada uno tendrá su propio título y número. Otra opción es el subfigurepaquete.

Crowley
fuente
3

Es posible que desee agregar esto a su preámbulo y ajustar los valores según sea necesario:

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

Particularmente, la fracción \ floatpage puede ser de interés.

Mica
fuente