Расположение стола LaTeX

102

У меня есть документ 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 , «[t] аргументы в скобках сообщают LaTeX, где можно разместить float; их порядок не имеет значения».
Waldir Leoncio
Это лишь немного связано, но я считаю, что важно знать: параметр [h] никогда не следует использовать отдельно, и, фактически, более новые версии LaTeX заменяют его на [ht] автоматически. Это могло быть и вашей проблемой. Вы можете прочитать больше в этом руководстве в разделе 17.2 «Размещение фигур».
vauhochzett
@Gacek [h!]- правильная версия. Это эквивалент [H]. Оба требуют floatпакета.
winklerrr

Ответы:

175

После еще нескольких поисков в Google я наткнулся на пакет float , который позволяет запретить LaTeX изменять положение таблиц.

В преамбуле:

\usepackage{float}
\restylefloat{table}

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

Джаред Рассел
источник
23
Возможно, стоит подчеркнуть, что следует использовать «H», а не «h». Это то, что я наблюдал на себе.
bikashg 01
@bikashg Hэквивалентен h!(для получения дополнительной информации о параметрах мой ответ здесь )
winklerrr
1
Если кто-то использует org-mode, поместите это сверху: #+LATEX_HEADER: \usepackage{float} #+LATEX_HEADER: \restylefloat{table} И затем, #+CAPTION: A table #+NAME: tab:table-label #+ATTR_LATEX: :placement [H] :center t <<actual table content>> извините за плохое форматирование новой строки в комментариях.
Gaurav
Извините, но утверждение о том, что необходимо запустить \restylefloat{table}, чтобы использовать [H]спецификатор позиционирования, неверно . Нужно только когда - либо работать , \restylefloat{table}если один был первым запустить пакет инструкций \floatstyle, \floatplacementили \floatname. Обновите свой ответ, чтобы удалить ссылку на \restylefloat. Если вам нужно больше доказательств того, что \restylefloatрегулярный запуск - не очень хорошая идея, посмотрите, что заголовок публикации и метка таблицы, двух таблиц, хранящихся рядом, назначены другой таблице .
Мико,
25

Это сработало для меня:

Вначале usepackageопределения включают:

\usepackage{placeins}

И до и после добавить:

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

Это поместит таблицу именно там, где вы хотите в тексте.

Дон Джулио
источник
Это действительно действительно полезный пакет. Спасибо, что поделился!
Джон Дэвид,
15

Расположение стола

Доступные параметры

Стол легко разместить со следующими параметрами:

  • 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

Winklerrr
источник
7

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

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

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

Уилл Робертсон
источник
1
Плавающее поведение позволяет избежать выхода из места, но перемещение фигур усложняет жизнь читателя. По этой причине Эдвард Тафт, известный дизайнер, рекомендует объединять текст и рисунки / таблицы - в своих изданных книгах он не ссылается на таблицы по номерам. «См. Таблицу 1» не появляется, так как таблица просто есть. Он просто помещает их в нужное место - в середине предложения. Я предполагаю, что это означает, что нужно больше работать над составлением таблиц, но меньше работать с читателями.
Blaisorblade
@Blaisorblade - конечно, и есть другие такие примечательные примеры, но я предполагаю, что написание текста таким способом для большинства людей на порядок сложнее, чем использование поплавков. Вы говорите об отказе от 99% книжного дизайна ради недостижимого оптимума. Обдумайте то, что я сделал в своем ответе: «А что, если таблица не помещается под текстом?» По вашему сценарию придется переделывать или переписывать, а это во многих ситуациях неприемлемо.
Will Robertson
1
Что ж, мы согласны с тем, что является оптимальным - и да, чаще всего это практически недостижимо. В повседневной жизни я тоже обычно придерживаюсь поплавков. Но у меня есть встроенные небольшие таблицы и рисунки, и это работает довольно хорошо (при условии, что я проверю окончательную версию - что легко только потому, что у меня есть документы максимум на 20 страниц). Я просто рассматриваю плавание как разумный компромисс, а не как хорошую вещь :-).
Blaisorblade
В чем разница между установкой [htbp]и отсутствием вообще?
Waldir Leoncio
@WaldirLeoncio, по крайней мере, для меня, по умолчанию нет ничего [ht]лучше, чем[htbp]
MrJonas
7

Вот простое решение из Викиучебника :

В пакете 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.

Слюда
источник
0

Чтобы разместить заголовки над плавающими таблицами, расположенными в [H], вставьте в преамбулу следующее:

\usepackage{float}
\floatstyle{plaintop}
\restylefloat{table}
CW
источник