
Мне немного сложно сохранять таблицы там, где я хотел. Я также не вижу, чтобы сделать MWE. Но документ загруженздесь.
В принципе, скажем так
текст (~\ref{}) находится на странице 70, а фактическая таблица — на странице 84;
текст (~\ref{}) находится на странице 71, а фактическая таблица — на 85;
текст (~\ref{}) находится на странице 72, а фактическая таблица — на 86;
где
\begin{table}[!hp]
использовался в начале всех таблиц.
Во всех случаях текст набран \subsection{}
шрифтом s. Таблицы, похоже, сдвинуты в конец всего раздела.
Я надеюсь получить таблицы, близкие к тексту, если не к тому, что есть на странице next
. Но простота !hp
вообще не работает.
решение1
В статье есть общие советы (в основном в ответе Уилла).более ранний вопрос
Однако у вас есть определенное требование (по какой-то причине) избегать плавающих элементов на текстовой странице и разрешать только h и p.
Это затрудняет позиционирование. Если float не может быть "здесь" (а это обычно так, поскольку эта точка находится слишком низко на странице, чтобы поместиться в float), то LaTeX задержит его, чтобы сделать float-страницу. Чтобы избежать очень пустых страниц, он ждет, пока не будет заполнена хотя бы \floatpagefraction
часть страницы (эта часть не игнорируется, если вы используете !
). По умолчанию article
это 0,5, поэтому должна быть заполнена как минимум половина страницы.
Это означает, что если у вас есть две фигуры, первая из которых чуть меньше половины страницы в высоту, то примерно в половине случаев они не поместятся "здесь", так как эта точка будет в нижней половине страницы. Первая плавающая фигура не может создать плавающую страницу, так как страница будет слишком короткой, но две фигуры не поместятся на плавающей странице, если вторая больше или даже если она меньше, но нет места для двух фигур и промежутка \floatsep
между ними. Это означает, что настройка [hp]
позволяет очень легко получить плавающие фигуры, которые нельзя разместить, и поскольку все фигуры хранятся в порядке, как только одна не может быть размещена, они все не могут быть размещены. Затем они будут удерживаться до тех пор, пока не будут смыты с помощью \clearpage
в конце документа или раздела.
Поэтому при наличии опции [hp]
вам необходимо установить \floatpagefraction
достаточно низкое значение, чтобы можно было разместить любую последовательность поплавков.
Самый простой — установить его очень низким, скажем, на 0,01. Тогда ни один флот не будет плавать больше одной страницы; он всегда будет отправлен немедленно. Однако, поскольку флоты не удерживаются, страницы флота будут иметь только один флот на страницу, так как латекс не будет ждать, чтобы посмотреть, подойдет ли следующий.
решение2
Есть несколько способов удержать плавающие объекты ближе к их местоположению.
Посмотрите этот замечательный ответ на вопрос о том, как работают плавающие объекты:
https://tex.stackexchange.com/a/39020/59716
С опциональной инструкцией размещения [!hp]
вы не много выиграете. Вы убираете некоторые варианты для LaTeX для размещения объектов float, а именно b
и t
, и добавляете !
и h
.
Стандартное размещение, если не указано никаких параметров btp
, можно изменить это значение по умолчанию с помощью пакета float:
\usepackage{float} \floatplacement{table}{htbp}
чтобы добавить h
по умолчанию.
Другой полезный пакет — это placeins
, который предлагает команду \FloatBarrier
, которая заставляет все текущие плавающие элементы размещаться перед ним.
Если загрузить вот так:
\usepackage[section, below]{placeins}
Плавающий элемент никогда не будет работать на странице, не принадлежащей его разделу.