Как заставить две фигуры оставаться на одной странице в LaTeX?

84

У меня есть два изображения, которые я хочу отобразить на странице в виде цифр. Каждый занимает чуть меньше половины доступного места, поэтому на этой странице не так много места для других вещей, но я знаю, что места достаточно для обеих фигур. Я попытался разместить рисунки с помощью [ht] и [hb], обоих [h] и обоих [ht], но все же я не могу поместить эти два изображения на одну страницу, а вместо этого, по крайней мере, несколько абзацев между ними.

Как мне заставить эти две фигуры оставаться на одной странице?

Кусти
источник
Аналогичный вопрос недавно был задан на TeX.SX, и я считаю, что ответ с помощью этой \afterpageкоманды - лучший ответ.
Мне нравится

Ответы:

141

Вы можете поместить две фигуры внутри одной фигуры. Например:

\begin{figure}[p]
\centering
\includegraphics{fig1}
\caption{Caption 1}
\includegraphics{fig2}
\caption{Caption 2}
\end{figure}

Каждый заголовок будет генерировать отдельный номер рисунка.

Роб Хайндман
источник
2
Это хороший ответ, чтобы запомнить :). Никогда не думал об этом, но выглядит чистым :).
bastijn
5
Другая возможность - это пакет subfigure и команда в среде figure чего-то вроде \subfloat[Caption]{\includegraphics{file}}.
Руперт Нэш,
11
кажется, что вы не можете \ обозначить две разные фигуры независимо друг от друга
Mulone
1
Изменен флаг "правильный ответ", потому что он кажется лучшим.
Кусти
2
@Mulone - Кажется, можно, если поместить \labelвнутрь \captionокружающей среды.
Крис
20

Если вы хотите иметь изображения на ту же тему, вы можете использовать subfigureпакет и конструкцию:

\begin{figure}
 \subfigure[first image]{\includegraphics{image}\label{first}}
 \subfigure[second image]{\includegraphics{image}\label{second}}
 \caption{main caption}\label{main_label}
\end{figure}

Если вы хотите разместить, например, два разных изображения рядом друг с другом, вы можете использовать:

\begin{figure}
 \begin{minipage}{.5\textwidth}
  \includegraphics{image}
  \caption{first}
 \end{minipage}
 \begin{minipage}{.5\textwidth}
  \includegraphics{image}
  \caption{second}
 \end{minipage}
\end{figure}

Для изображений в столбцах у вас будет [1] [2] [3] [4] в источнике, но это будет выглядеть так:

[1] [3]

[2] [4].

Кроули
источник
1
Вы также можете использовать конструкцию, упомянутую здесь Джерредом Расселом: stackoverflow.com/questions/1673942/latex-table-position Точка использует floatpackage.
Crowley
15

У меня возникла эта проблема при попытке смешать рисунки и текст. Для меня сработал вариант «H» без символа «!». вариант. \begin{figure}[H]
'H' пытается заставить цифру быть именно там, где вы ее поместили в коде. Это требует, чтобы вы включили \usepackage{float}

Варианты объяснены здесь

Шредер
источник
1
Да, floatпакет здесь определенно правильный ответ. Я часто жалуюсь, что с помощью! символ, так как in \begin{figure}[h!]может быть переписан в TeX, \pleaseпоскольку компилятор все еще сам решает, куда поместить ваше изображение. На этот раз он просто подмигивает вам вместо того, чтобы игнорировать вас. floatПакет будет сделать это делать то , что вы хотите точно.
ely
6

Если вы хотите, чтобы они оба были на одной странице, и оба они занимали практически всю страницу, то лучше всего сказать LaTeX, чтобы они поместили их обоих на отдельную страницу!

\begin{figure}[p]

Вероятно, было бы противоречить здравым типографским принципам (например, некрасиво) иметь две фигуры на странице с несколькими строками текста над или под ними.


Между прочим, причина, по которой это [!h]работает, заключается в том, что он сообщает LaTeX переопределить свои обычные ограничения на то, сколько места должно быть выделено для плавающих объектов на странице с текстом. Как подразумевается выше, ограничения существуют не просто так. Это не значит, что их можно немного ослабить; см. FAQ по этому поводу .

Уилл Робертсон
источник
1
Точнее, [p]только указывает компилятору поместить их на страницу только с плавающими точками. Это может привести, а может и не привести к разделению страниц для двух фигур, в зависимости от их размера.
fotNelton
2

Попробуйте добавить !, например [h!].

Бастьен Леонар
источник
не работает, латекс заменит его на [ht], а затем все равно перенесет рисунок на отдельную страницу.
Boris van Schooten
Работает в шаблоне журнала Wiley.
Аник Ислам Абхи
1

попробуйте сначала [h!], но иначе вы можете сделать это некрасиво.

LateX немного сложно размещать изображения с такими ограничениями, поскольку он сам себя размещает. Что я обычно делаю, если хочу, чтобы фигура была прямо в этом месте, так это что-то вроде |:

text in front of image here

 \newpage 
 \figure1 
 \figure2

text after images here

Я знаю, что это может быть неправильный способ, но он работает как шарм :).

//редактировать

Вы можете сделать то же самое, если хотите немного текста вверху страницы, но тогда просто используйте / clearpage. Конечно, вы также можете масштабировать их немного меньше, чтобы этого больше не было. Возможно, невидимые пробелы немного больше, чем вы подозреваете, я всегда стараюсь уменьшить масштаб изображения до тех пор, пока они не появятся на одной странице, просто чтобы быть уверенным, что совпадение не похоже на 1%, что делает все это ненужным. .

Bastijn
источник
Спасибо, [ч!] Сработало! Я поддержал ваш ответ, потому что "уродливый способ", кажется, тоже неплохо знать, даже если в данном случае он мне не нужен.
Kusti