2009-11-04 18 views
64

Mam dokument LaTeX, który zawiera akapit, po którym następują 4 tabele, po których następuje akapit drugi. Chcę, aby 4 tabele pojawiały się między dwoma akapitami, co oznacza, że ​​mam do dyspozycji opcję [h] po uruchomieniu środowiska tabel (np. \begin{table}[h]).Pozycjonowanie tabel LaTeXa

Korzystanie z tych dwóch pierwszych tabel pojawia się po akapicie 1 zgodnie z oczekiwaniami, jednak akapit 2 jest wyświetlany z dwiema ostatnimi tabelami pojawiającymi się na następnej stronie. Jak mogę uzyskać wyświetlanie tabel we właściwej lokalizacji?

Próbowałem różnych rzeczy, aby poprawić pozycję, takich jak przy użyciu [h!], ale to nie wydaje się mieć żadnego wpływu. Używanie \clearpage po tabelach ma pożądany efekt polegający na tym, że tabele pojawiają się przed drugim akapitem, ale pozostawia dwie ostatnie tabele na swojej stronie z mnóstwem białych znaków, kiedy wolałbym, aby akapit drugi zaczął się zaraz po stoły.

Paragraph 1... 

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

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

Paragraph 2... 
+0

może [! H] zamiast [h!]? – Gacek

+0

Próbowałem tego również i nie miało to żadnego efektu. –

+4

Kolejność (wszystkich) liter w opcjonalnym argumencie nie działa. –

Odpowiedz

122

Po zrobieniu kilka googlowania natknąłem się pływaka pakiet, który pozwala zapobiec LaTeX od repozycjonowanie tabele.

W preambule:

\usepackage{float} 
\restylefloat{table} 

Następnie dla każdej tabeli można użyć opcji H kwalifikacyjny (np \begin{table}[H]), aby upewnić się, że nie zostanie przeniesiony.

+16

Być może warto podkreślić, że należy użyć litery "H", a nie "h". To właśnie obserwowałem dla siebie. – bikashg

3

Możesz dodać do swojej preambule, a następnie ustaw wartości w miarę potrzeby:

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

Szczególnie, \ floatpagefraction mogą być interesujące.

2

Jeśli chcesz mieć dwie tabele obok siebie można użyć: (z float pakietu załadowany)

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

Każdy z nich będzie miał własny podpis i numer. Inną opcją jest pakiet subfigure.

7

Co się stanie, jeśli tekst plus tabele i tekst nie zmieszczą się na jednej stronie? Próbując wymusić skład w ten sposób, najprawdopodobniej skończy się to, że strony są zbyt krótkie; tzn. ponieważ tabela nie może domyślnie przerywać strony, zostanie przeniesiona do następnej i wcześniej pozostawi lukę na stronie. Zauważysz, że nigdy nie widzisz tego w opublikowanej książce.

Pływające zachowanie to dobra rzecz! Zalecam używanie [htbp] jako domyślnego ustawienia dla wszystkich tabel i rycin aż do zakończenia twojego dokumentu; tylko wtedy powinni pomyśleć o dopracowaniu dokładnego umiejscowienia.

P.S. Przeczytaj FAQ; większość innych odpowiedzi tutaj to częściowe kombinacje udzielonych porad.

+1

Pływające zachowanie pozwala uniknąć pozostawiania miejsca, ale odsuwanie się figur utrudnia życie czytelnikowi. Z tego powodu Edward Tufte, ważny projektant, zaleca integrację tekstu i rysunków/tabel - w swoich publikowanych książkach nie odnosi się do tabel po numerze. "Patrz Tabela 1" nie pojawia się, ponieważ tabela jest właśnie tam. Po prostu umieszcza je we właściwym miejscu - w połowie zdania. Sądzę, że oznacza to więcej pracy przy rozkładaniu stołów, ale mniej pracy dla czytelników. – Blaisorblade

+0

@ Blaisorblade - jasne, i są inne godne uwagi przykłady, ale proponuję, że pisanie tekstu w taki sposób jest o rząd wielkości trudniejsze dla większości ludzi niż używanie pływaków. Mówisz o odrzuceniu 99% projektu książki za nieosiągalne optimum. Zastanów się nad tym, co napisałem w mojej odpowiedzi: "co by było, gdyby tabela nie mieściła się pod tekstem?" W twoim scenariuszu trzeba przeprojektować lub przepisać, a to nie jest możliwe w wielu sytuacjach. –

+1

Cóż, zgadzamy się co to jest optimum - i tak, najczęściej jest to praktycznie nieosiągalne. W codziennym życiu zwykle też trzymam się pływaków. Ale mam małe tabele i dane liczbowe, i działa całkiem przyjemnie (pod warunkiem, że sprawdzę ostateczną wersję - co jest łatwe tylko dlatego, że mam dokumenty co najwyżej 20 stron). Po prostu widzę pływanie jako rozsądną kompromis, a nie dobrą rzecz :-). – Blaisorblade

4

Oto proste rozwiązanie, z Wikibooks:

Pakiet placeins zapewnia polecenia \ FloatBarrier, który może być stosowany w celu zapobiegania pływaków z przemieszczane nad nim.

Po prostu wstawiam \FloatBarrier przed i po każdym stole.

8

ten pracował dla mnie,

na początku z definicjami usepackage obejmują:

\usepackage{placeins} 

oraz przed i po dodatku:

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

ten umieszcza tabelę dokładnie tam, gdzie chcesz w tekście.