Позиціонування таблиці LaTeX


98

У мене є документ LaTeX, який містить абзац, за яким 4 таблиці, а другий абзац. Я хочу, щоб між двома абзацами з'явилися 4 таблиці, що з прочитаного означає, що я повинен використовувати опцію [h] після початку середовища таблиці (наприклад \begin{table}[h]).

Використовуючи це, перші дві таблиці з’являються після абзацу 1, як очікувалося, однак параграф 2 потім відображається з двома останніми таблицями, що з’являються на наступній сторінці. Як я можу змусити таблиці відображатися у правильному місці?

Я пробував різні речі, щоб виправити позиціонування, наприклад використання, [h!]однак це, здається, не має ніякого ефекту. Використання \clearpageпісля таблиць має бажаний ефект, коли таблиці з’являються перед другим абзацом, але потім дві останні таблиці залишаються на власній сторінці з великою кількістю пробілів, коли я вважаю за краще, щоб другий абзац починався відразу після столи.

Paragraph 1...

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

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

Paragraph 2...

Я теж спробував це, і це не мало ніякого ефекту.
Джаред Рассел

6
Порядок (усіх) букв у необов’язковому аргументі не впливає.
Уілл Робертсон,

@Gacek, впевнений, Уілл Робертсон має рацію. Відповідно до mintaka.sdsu.edu/GF/bibliog/latex/floats.html , "[аргументи] в дужках повідомляють LaTeX, куди можна поставити флоат; їх порядок неважливий".
Вальдір Леонсіо

Це лише трохи пов’язано, але я вважаю, що важливо знати: параметр [h] ніколи не слід використовувати окремо, і насправді новіші версії LaTeX замінюють його автоматично на [ht]. Це могло бути і вашою проблемою. Детальніше ви можете прочитати в цьому посібнику в розділі 17.2 "Розміщення малюнків".
vauhochzett,

@Gacek [h!]- правильна версія. Це еквівалент [H]. Обом потрібен floatпакет.
winklerrr

Відповіді:


171

Зробивши ще кілька гуглинь, я натрапив на флоат- пакет, який дозволяє запобігти перестановці таблиць LaTeX.

У преамбулі:

\usepackage{float}
\restylefloat{table}

Тоді для кожної таблиці ви можете використовувати параметр Hрозміщення (наприклад \begin{table}[H]), щоб переконатись, що вона не переставляється.


22
Можливо, варто підкреслити, що слід використовувати "H", а не "h". Це я спостерігав за собою.
bikashg

@bikashg Hеквівалентно h!(для отримання додаткової інформації про параметри перевірте мою відповідь тут )
winklerrr

1
Якщо хтось використовує організаційний режим, поставте це зверху: #+LATEX_HEADER: \usepackage{float} #+LATEX_HEADER: \restylefloat{table} А потім, #+CAPTION: A table #+NAME: tab:table-label #+ATTR_LATEX: :placement [H] :center t <<actual table content>> вибачте за погане форматування нового рядка в коментарях.
Гаурав

23

Це спрацювало для мене:

На початку з usepackageвизначеннями включають:

\usepackage{placeins}

І до, і після додавання:

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

Це розміщує таблицю саме там, де ви хочете в тексті.


Це дійсно дуже корисний пакет. Дякую, що поділились!
Джон Девід

11

Позиціонування таблиці

Доступні параметри

Таблицю можна легко розмістити з такими параметрами:

  • hПомістіть поплавок сюди , тобто приблизно в ту саму точку, де це відбувається у вихідному тексті (однак, не зовсім на місці)
  • tПозиція вгорі сторінки.
  • bПозиція внизу сторінки.
  • pРозмістити на спеціальній сторінці лише для поплавків.
  • ! Переосмислення внутрішніх параметрів LaTeX використовує для визначення "хороших" плаваючих позицій.
  • HРозташовує поплавок в точному місці в коді LATEX. Потрібен пакет float. Це дещо еквівалентно h!.

Якщо ви хочете скористатися H(або h!) для точного позиціонування, переконайтесь, що ви floatправильно встановили пакет у преамбулі:

\usepackage{float}
\restylefloat{table}

Приклад

Якщо ви хочете розмістити таблицю на одній і тій же сторінці, або в точному місці або принаймні вгорі сторінки (що найкраще підходить для латексного двигуна), використовуйте параметри hі tтак:

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

Джерела: Overleaf.com


7

Що станеться, якщо текст плюс таблиці плюс текст не вміщуються на одній сторінці? Намагаючись змусити набір версій таким чином, ви з великою ймовірністю отримаєте сторінки, які працюють занадто коротко; тобто, оскільки таблиця за замовчуванням не може розбитися на сторінку, вона буде перенесена на наступну і залишить пробіл на сторінці раніше. Ви помітите, що цього ніколи не побачите в опублікованій книзі.

Плаваюча поведінка - це добре! Я рекомендую використовувати[htbp] як налаштування за замовчуванням для всіх таблиць та рисунків, поки ваш документ не буде завершений; лише тоді слід подумати про точне налаштування їх точного розміщення.

PS Прочитайте FAQ ; більшість інших відповідей тут - це часткові поєднання порад, даних там.


1
Плаваюча поведінка уникає залишити простір, але віддалення фігур ускладнює життя читачеві. З цієї причини Едвард Туфте, важливий дизайнер, рекомендує інтегрувати текст та малюнки / таблиці - у своїх виданих книгах він не посилається на таблиці за номерами. "Див. Таблицю 1" не відображається, оскільки таблиця просто там. Він просто розміщує їх у потрібному місці - в середині речення. Я думаю, це означає зробити більше роботи над розкладкою таблиць, але менше роботи для читачів.
Blaisorblade

@Blaisorblade - звичайно, є й інші такі помітні приклади, але я вважаю, що написання тексту таким чином на порядок складніше для більшості людей, ніж використання поплавків. Ви говорите про те, щоб відмовитись від 99% дизайну книг для недосяжного оптимуму. Розглянемо пункт, який я сказав у своїй відповіді: "а якщо таблиця не може поміститися під текстом?" У вашому сценарії доводиться переробляти або переписувати, і це неможливо у багатьох ситуаціях.
Уілл Робертсон,

1
Ну, ми погоджуємось, що таке оптимум - і так, найчастіше це практично недосяжно. У повсякденному житті я також зазвичай тримаюся поплавців. Але в мене є маленькі таблиці та фігури, які вбудовані, і це працює досить непогано (за умови, що я перевіряю остаточну версію - що просто, тому що у мене є документи щонайменше на 20 сторінках). Я просто бачу плаваючий як розумний компроміс, а не як хорошу річ :-).
Blaisorblade

Яка різниця між налаштуваннями, [htbp]а не взагалі нічого?
Вальдір Леонсіо

@WaldirLeoncio принаймні для мене, взагалі нічого не має за замовчуванням, [ht]а не[htbp]
MrJonas

7

Ось просте рішення з Wikibooks :

Пакет placeins надає команду \ FloatBarrier, яку можна використовувати для запобігання переміщенню поплавків по ній.

Я просто ставив \FloatBarrierперед і після кожного столу.


4

Якщо ви хочете мати дві таблиці поруч, ви можете використовувати: (із floatзавантаженим пакетом)

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

Кожен з них матиме власний підпис та номер. Ще один варіант - subfigureпакет.


3

Можливо, ви захочете додати це до своєї преамбули та за необхідності відкоригуйте значення:

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

Зокрема, \ floatpagefraction може представляти інтерес.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.