Рисунки: graphicx и плавающие figure

Урок учит вставлять изображения и оформлять их как плавающие рисунки с подписью.

Плавающее окружение (figure) — это блок, который LaTeX сам размещает в удобном месте страницы, чтобы не оставлять некрасивых пустот.

Картинку в LaTeX вставляют командой из пакета graphicx, а чтобы у неё были номер и подпись и она аккуратно «обтекалась» текстом — оборачивают в окружение figure.

Вставка изображения

Подключите пакет и используйте \includegraphics:

\usepackage{graphicx}   % в преамбуле
...
\includegraphics[width=0.5\textwidth]{plot.png}

Опция width=0.5\textwidth масштабирует картинку до половины ширины текста — почти всегда задают ширину относительно \textwidth, чтобы рисунок подстраивался под формат. Поддерживаются PNG, JPG, PDF (а в XeLaTeX/LuaLaTeX ещё и другие форматы).

Плавающий рисунок с подписью

\begin{figure}[htbp]
  \centering
  \includegraphics[width=0.7\textwidth]{plot.png}
  \caption{Зависимость ошибки от числа итераций.}
  \label{fig:error}
\end{figure}

Здесь \centering центрирует картинку, \caption добавляет подпись «Рис. N: ...» с автоматическим номером, \label ставит метку для ссылок. Окружение figure делает рисунок «плавающим».

Параметр размещения [htbp]

Буквы в скобках подсказывают LaTeX, куда поставить рисунок, в порядке предпочтения:

БукваГде разместить
hhere — примерно здесь, где в коде
ttop — вверху страницы
bbottom — внизу страницы
ppage — на отдельной странице с плавающими

Комбинация [htbp] означает «попробуй здесь, иначе вверху, иначе внизу, иначе на отдельной странице». Это рекомендуемый по умолчанию набор. Важно понять философию: вы не приклеиваете рисунок к конкретной строке — вы даёте LaTeX свободу разместить его красиво, а связь с текстом обеспечиваете ссылкой по метке.

Как работает под капотом

Плавающие объекты складываются в очередь и размещаются алгоритмом, который минимизирует пустоты и старается уважать [htbp]. Поэтому рисунок может «уплыть» на страницу вперёд или назад — это нормально и правильно. \caption увеличивает счётчик рисунков и пишет запись в файл .lof (список рисунков, аналог оглавления). Поскольку текст «привязан» к рисунку не местом, а ссылкой \ref{fig:error}, перемещение картинки ничего не ломает — номер в ссылке всегда верен.

Форматы файлов и пути к картинкам

Набор поддерживаемых форматов зависит от движка. Классический pdflatex понимает PNG, JPG и PDF, но не работает напрямую с EPS (его сначала конвертируют, например через пакет epstopdf). Современные xelatex и lualatex к этому набору добавляют ряд других форматов. Векторную графику почти всегда стоит хранить в PDF — она остаётся резкой при любом масштабе, тогда как растровый PNG на больших увеличениях «зернит». Чтобы не выписывать длинные пути в каждом \includegraphics, в преамбуле задают \graphicspath{{figures/}{images/}}: тогда LaTeX сам ищет файл по списку папок, а в коде остаётся только имя картинки. Расширение лучше не указывать — движок подберёт подходящий формат сам.

Несколько картинок рядом: subcaption

Когда нужно показать панель из нескольких связанных изображений с подписями «(a)», «(b)», «(c)», подключают пакет subcaption и внутри одного figure используют окружения subfigure. У каждой подпанели своя \caption и своя \label, поэтому на них можно ссылаться по отдельности — \ref{fig:a} и \ref{fig:b}, — а сам составной рисунок при этом остаётся единым плавающим объектом с одним общим номером. Это куда надёжнее, чем вручную приставлять буквы к подписям: нумерация панелей тоже становится автоматической.

Список рисунков и жёсткое размещение

Команда \listoffigures вставляет автоматический список всех рисунков — по сути оглавление иллюстраций, собранное из тех самых записей .lof, которые пишет каждая \caption. Для дипломов и книг это стандартное требование, и LaTeX выполняет его без ручного труда. Если же рисунок упорно нельзя отпускать в свободное плавание (скажем, он должен стоять строго в этом месте), подключают пакет float и пишут [H] — спецификатор «именно здесь, без плавания». Пользоваться им стоит редко и осознанно: он отключает алгоритм размещения и может оставить под рисунком некрасивую пустоту. Радикальное средство «вытолкнуть» все накопившиеся плавающие объекты — команда \clearpage, которая завершает страницу и размещает очередь до начала нового материала.

Частые ошибки

  • Бороться с «уплыванием» жёсткой опцией [h!] везде — ломает вёрстку. Доверьте размещение LaTeX и ссылайтесь по метке.
  • \label до \caption — метка укажет не на тот номер. Ставьте \label сразу после \caption.
  • Указать пиксельный размер вместо \textwidth — рисунок не подстроится под формат страницы.

Итоги

  • \includegraphics[width=...]{файл} из graphicx вставляет картинку.
  • Окружение figure + \caption дают плавающий рисунок с авто-номером.
  • [htbp] задаёт предпочтения размещения; связь с текстом — через метку, не место.
Проверьте себя
1. Почему ширину рисунка обычно задают как доля \textwidth?
AЭто короче
BЧтобы рисунок автоматически подстраивался под ширину текста и формат страницы
CИначе картинка не вставится
DЭто требование graphicx
2. Что означает параметр [htbp] у окружения figure?
AРазмер картинки
BПредпочтения размещения: here, top, bottom, page — в этом порядке
CТип файла изображения
DТолщину рамки
3. Куда ставить \label у рисунка?
AВ самое начало figure
BСразу после \caption
CВ преамбулу
DПеред \includegraphics