Định vị bảng LaTeX


98

Tôi có một tài liệu LaTeX có chứa một đoạn văn theo sau là 4 bảng theo sau là đoạn thứ hai. Tôi muốn 4 bảng xuất hiện giữa hai đoạn văn mà từ những gì tôi đã đọc có nghĩa là tôi nên sử dụng tùy chọn [h] sau khi bắt đầu môi trường bảng (ví dụ \begin{table}[h]).

Sử dụng điều này, hai bảng đầu tiên xuất hiện sau đoạn 1 như mong đợi, tuy nhiên đoạn 2 sau đó được hiển thị với hai bảng cuối cùng xuất hiện ở trang sau. Làm cách nào để làm cho các bảng xuất hiện ở đúng vị trí?

Tôi đã thử nhiều cách khác nhau để sửa định vị, chẳng hạn như sử dụng [h!]nhưng điều này dường như không có bất kỳ tác dụng nào. Việc sử dụng \clearpagesau các bảng không có tác dụng mong muốn là làm cho các bảng xuất hiện trước đoạn thứ hai nhưng sau đó nó để lại hai bảng cuối cùng trên trang của chính chúng với vô số khoảng trắng, khi tôi muốn đoạn thứ hai bắt đầu ngay sau những cái bàn.

Paragraph 1...

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

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

Paragraph 2...

Tôi cũng đã thử điều đó và nó không có tác dụng.
Jared Russell

6
Thứ tự của (tất cả) các chữ cái trong đối số tùy chọn không có hiệu lực.
Will Robertson

@Gacek, tôi cá là Will Robertson đúng. Theo mintaka.sdsu.edu/GF/bibliog/latex/floats.html , "[t] anh ấy lập luận trong ngoặc cho LaTeX biết nơi có thể đặt float; thứ tự của chúng không quan trọng."
Waldir Leoncio

Điều này chỉ liên quan một chút, nhưng tôi cảm thấy điều quan trọng cần biết: Tùy chọn [h] không bao giờ được sử dụng một mình và trên thực tế, các phiên bản LaTeX mới hơn sẽ tự động thay thế nó bằng [ht]. Đó cũng có thể là vấn đề của bạn. Bạn có thể đọc thêm trong hướng dẫn này trong phần 17.2 "Vị trí Hình".
vauhochzett 11/09/18

@Gacek [h!]là phiên bản chính xác. Nó tương đương với [H]. Cả hai đều yêu cầu floatgói.
winklerrr

Câu trả lời:


171

Sau khi thực hiện thêm một số googling, tôi đã tìm thấy gói float cho phép bạn ngăn LaTeX định vị lại các bảng.

Trong phần mở đầu:

\usepackage{float}
\restylefloat{table}

Sau đó, đối với mỗi bảng, bạn có thể sử dụng Htùy chọn vị trí (ví dụ \begin{table}[H]) để đảm bảo nó không bị thay đổi vị trí.


22
Có lẽ điều đáng nhấn mạnh là "H" nên được sử dụng chứ không phải "h". Đó là những gì tôi quan sát được cho chính mình.
bikashg

@bikashg Htương đương với h!(để biết thêm thông tin về các thông số kiểm tra câu trả lời của tôi ở đây )
winklerrr

1
Trong trường hợp ai đó đang sử dụng chế độ tổ chức, hãy đặt điều này lên hàng đầu: #+LATEX_HEADER: \usepackage{float} #+LATEX_HEADER: \restylefloat{table} Và sau đó, #+CAPTION: A table #+NAME: tab:table-label #+ATTR_LATEX: :placement [H] :center t <<actual table content>> Xin lỗi vì định dạng dòng mới kém trong nhận xét.
Gaurav

23

Điều này đã làm việc cho tôi:

Ở phần đầu với các usepackageđịnh nghĩa bao gồm:

\usepackage{placeins}

Và trước và sau khi thêm:

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

Điều này đặt bảng chính xác nơi bạn muốn trong văn bản.


Đây là một gói thực sự thực sự hữu ích. Cám ơn vì đã chia sẻ!
John David

11

Định vị bảng

Các thông số có sẵn

Có thể dễ dàng đặt một bảng với các thông số sau:

  • hĐặt float ở đây , tức là, gần đúng cùng điểm mà nó xuất hiện trong văn bản nguồn (tuy nhiên, không chính xác tại vị trí)
  • tVị trí ở đầu trang.
  • bVị trí ở cuối trang.
  • pĐặt trên một trang đặc biệt chỉ dành cho phao.
  • ! Ghi đè các tham số nội bộ mà LaTeX sử dụng để xác định vị trí float "tốt".
  • HĐặt phao vào chính xác vị trí trong mã LATEX. Yêu cầu gói float. Điều này tương đương với h!.

Nếu bạn muốn sử dụng H(hoặc h!) để định vị chính xác, hãy đảm bảo rằng bạn đã floatthiết lập đúng gói trong phần mở đầu:

\usepackage{float}
\restylefloat{table}

Thí dụ

Nếu bạn muốn đặt bảng ở cùng một trang, ở vị trí chính xác hoặc ít nhất là ở đầu trang (những gì phù hợp nhất cho động cơ latex), hãy sử dụng các thông số htnhư sau:

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

Nguồn: Overleaf.com


7

Điều gì xảy ra nếu văn bản cộng với bảng cộng với văn bản không vừa với một trang? Bằng cách cố gắng bắt buộc sắp chữ theo cách này, bạn rất có thể gặp phải những trang quá ngắn; tức là, theo mặc định, một bảng không thể ngắt trên một trang, nó sẽ được đẩy sang trang tiếp theo và để lại khoảng trống trên trang trước đó. Bạn sẽ nhận thấy rằng bạn không bao giờ thấy điều này trong một cuốn sách đã xuất bản.

Hành vi nổi là một Điều tốt! Tôi khuyên bạn nên sử dụng [htbp]làm cài đặt mặc định cho tất cả các bảng và số liệu cho đến khi tài liệu của bạn hoàn tất; chỉ khi đó mới nên nghĩ đến việc tinh chỉnh vị trí chính xác của chúng.

PS Đọc câu hỏi thường gặp ; hầu hết các câu trả lời khác ở đây là sự kết hợp một phần của lời khuyên được đưa ra ở đó.


1
Hành vi trôi nổi tránh để lại khoảng trống, nhưng di chuyển hình người đi làm cho cuộc sống của người đọc khó khăn hơn. Vì lý do này, Edward Tufte, một nhà thiết kế quan trọng, khuyến nghị tích hợp văn bản và số liệu / bảng - trong các cuốn sách đã xuất bản của mình, ông không đề cập đến bảng theo số. "Xem Bảng 1" không xuất hiện, vì bảng chỉ ở đó. Anh ấy chỉ đặt chúng vào đúng vị trí - giữa câu. Tôi đoán điều đó có nghĩa là phải làm nhiều việc hơn để sắp xếp các bảng nhưng ít công việc hơn cho người đọc.
Blaisorblade,

@Blaisorblade - chắc chắn, và có những ví dụ đáng chú ý khác như vậy, nhưng tôi đề xuất rằng việc viết một văn bản theo cách như vậy là một thứ tự độ lớn khó hơn đối với hầu hết mọi người so với việc sử dụng float. Bạn đang nói về việc loại bỏ 99% thiết kế sách để đạt được mục đích tối ưu không thể đạt được. Hãy xem xét điểm tôi đã đưa ra trong câu trả lời của mình: 'điều gì sẽ xảy ra nếu một bảng không thể nằm gọn bên dưới văn bản?' Trong kịch bản của bạn phải thiết kế lại hoặc viết lại, và điều này là không thể thực hiện được trong nhiều tình huống.
Will Robertson,

1
Chà, chúng tôi đồng ý về điều gì là tối ưu-và vâng, hầu hết nó thực tế là không thể đạt được. Trong cuộc sống hàng ngày, tôi cũng thường dính vào những cuộc nổi. Nhưng tôi có nội tuyến các bảng và số liệu nhỏ, và nó hoạt động khá độc đáo (miễn là tôi kiểm tra phiên bản cuối cùng - điều này chỉ dễ dàng vì tôi có tài liệu tối đa 20 trang). Tôi chỉ xem thả nổi như một Sự Đánh đổi Hợp lý hơn là Một Điều Tốt :-).
Blaisorblade:

Sự khác biệt giữa thiết lập [htbp]trái ngược với không có gì là gì?
Waldir Leoncio

@WaldirLeoncio ít nhất là đối với tôi, không có gì mặc định [ht]thay vì[htbp]
MrJonas 22/02/19

7

Đây là một giải pháp dễ dàng, từ Wikibooks :

Gói placeins cung cấp lệnh \ FloatBarrier, có thể được sử dụng để ngăn các phao di chuyển qua nó.

Tôi chỉ đặt \FloatBarriertrước và sau mỗi bàn.


4

Nếu bạn muốn có hai bảng bên cạnh nhau, bạn có thể sử dụng: (khi floatđã tải gói)

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

Mỗi người sẽ có chú thích và số riêng. Một tùy chọn khác là subfiguregói.


3

Bạn có thể muốn thêm điều này vào phần mở đầu của mình và điều chỉnh các giá trị nếu cần:

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

Đặc biệt, \ floatpagefraction có thể được quan tâm.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.