Мы расскажем о том:

  • какие пакеты нужны для того, чтобы вставить рисунок в документ LaTeX;
  • как вставить рисунок в документ;
  • как поместить рисунок в нужную часть страницы, снабдить его подписью и сделать на него ссылку.

Пакеты и настройка

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

Значение аргумента argument может быть следующим:

  • dvips (аргумент по умолчанию при компиляции с помощью latex ), если вы собираетесь компилировать документ при помощи latex для получения DVI-файла.
  • dvipdfm , если документ компилируется latex , и полученный в результате DVI-файл предполагается конвертировать в PDF при помощи dvipdfm .
  • pdftex (аргумент по умолчанию при компиляции с помощью pdflatex ), если документ предполагается компилировать pdftex , чтобы непосредственно получить PDF-файл.

В дальнейшем мы будем использовать для компиляции документа pdflatex , поэтому в преамбуле запишем:

безо всяких опций.

Теперь укажем путь к графическим файлам. Пусть они помещаются в подкаталог pictures текущего каталога

(текущим считается тот каталог, где находится наш файл *.tex).

Кроме того, в преамбуле можно указать список расширений, которые будут трактоваться как графические

Теперь, вставляя в документ файл одного из указанных выше типов, его расширение указывать не обязательно.

Итак, для вставки рисунков к преамбуле документа нужно добавить:

Команда вставки графического файла

В текст документа графический файл вставляется командой includegraphics :

Например, рисунок chick.png вставляется так:

(предполагается, что .png перечислено в списке расширений графических файлов). Это даёт, в результате:

Команда includegraphics может иметь список аргументов

Вот некоторые из них

ПараметрОписание
w >Задаёт ширину рисунка равной xx
heigth=xxЗадаёт высоту рисунка равной xx (если задана только ширина или только высота, то рисунок масштабируется пропорционально)
scale=xxУмножает размеры изображения на коэффициент xx
angle=xxПоворачивает изображение на xx градусов по часовой стрелке

Для указания размеров можно использовать переменные документа: ширину строки linewidth , ширину текста нас странице extwidth , высоту текста на странице extheight и т. п.:

переворачивает рисунок и уменьшает его размер вдвое.

Окружение figure

Если нужно не просто поместить картинку в документ, но — в нужное место документа, снабдить картинку подписью, а также иметь возможность сослаться на нее, то это можно сделать с помощью окружения figure :

  • Опция h означает "here" и рекомендует TеX’у разместить картинку "здесь", то есть в том месте, где встретилась команда inludegraphics .
  • Команда center центрирует рисунок по горизонтали.
  • Опция scale задает масштаб отображения рисунка: 50% от действительных размеров рисунка.
  • Подпись под рисунком вставляется с помощью caption .
  • label задает метку рисунка, что позволяет ссылаться на него.

Получаем нечто вроде:

Наличие опции h вовсе не означает, что рисунок действительно будет вставлен "здесь" — окончательное решение остается за TeX’ом, и принимается, исходя из заполненности страницы. Есть и другие подобные опции: t (top) — вверху страницы; b (bottom) — внизу страницы и т. п. Эти опции можно использовать в комбинации. Например, если вы хотите поместить рисунок непосредственно в месте вставки или же вверху страницы, то укажите

Добавление ! к опции позволяет игнорировать установки TeX’а и вставить рисунок именно там, где указываете вы:

Добавление буквы p позволяет разместить картинку на отдельной странице:

Обратите внимание, что к подписи под рисунком добавлено "Рис. 1" (или какой-то другой номер). Автоматическую нумерацию рисунков можно отключить, используя пакет caption и "*":

(не забудьте usepackage

в преамбуле документа).

На наш рисунок можно ссылаться с помощью команды
ef . Указав в тексте ". как показано на Рис.
ef" мы получим, после двухкратной компиляции: ". как показано на Рис. 1". Нужно только следить, чтобы метки рисунков не повторялись, и были, по возможности, осмысленными.

Важно использовать команду caption<> перед label<> , иначе в документе будет указана ссылка не на рисунок, а на текущую subsection . Итак: метка идёт после заголовка.

Пример

Примечание. Если вас не устраивает вид подрисуночной подписи (например, вместо "Рис. 1:" необходимо "Рис. 1 — "), используйте пакет caption . В частности, для установки тире в качестве разделителя, вставьте в преамбулу документа следующий код:

Читайте также

Комментарии

Дмитрий Храмов
Компьютерное моделирование и все, что с ним связано: сбор данных, их анализ, разработка математических моделей, софт для моделирования, визуализации и оформления публикаций. Ну и за жизнь немного.

Автор таки вышел из пост-дипломного запоя и отпуска. На очереди экзамены в магистратуру и ещё два года ада.

На этот раз рассмотрим вставку картинок и других вкусностей в документы LaTeX.

Работа с картинками в LaTeX значительно отличается от привычных массам офисных пакетов тем что:

1) Картинки нельзя впихнуть в текстовый файл, картинки кладутся отдельными файлами и при передаче проекта требуется передать картинки тоже

2) Картинки встраивается при каждой пересборке проекта, что облегчает их обновление. Требуется лишь заменить картинку на новую с тем же именем. При работе с графиками из CAS возможно получить автоматическую синхронизацию графиков с проектом (настроить автосохранение графиков в файл).

3) Поддержка форматов — LaTeX поддерживает как растровые, так и векторные форматы, что позволяет экономить время на конвертации. Предпочтительный растровый формат для графиков/чертежей/прочих картинок с линиями и текстом — png. Для svg требуются дополнительные манипуляции — пересохранение в inkscape для LaTeX. В этом случае будет синхронизирован шрифт текста на картинке с текстом документа.

4) Позиционирование картинок LaTeX делает сам. Пользователь может высказывать пожелания где их расположить. Есть режимы для форсирования положения, но они не рекомендуются к использованию.

5) Размер картинок — подбирается либо опытным путём, либо по аналогичной картинке. Есть работа с относительными единицами extwidth, linewidth и т.д. После привыкания становится крайне удобно — вставка картинки сводится к копипасту кода прошлой картинки, правки названия и подписи.

6) Обтекание текстом — по умолчанию отсутствует. Почему? Потому что смотрится плохо. Для тех кому оно всё таки нужно, есть пакет wrapfig.

Для поддержки вставки картинок в современных форматах требуется добавить в преамбулу следующие пакеты:

usepackage%Вставка картинок правильная

usepackage%Обтекание фигур (таблиц, картинок и прочего)

Для вставки картинки используем следующий код:

Как видно из данного кода, производится вставка иллюстрации (figure), с выравниванием по центру (centering), файла 1oummm.jpg (лежащего в одной папке с проектом), подписью "диагрмма моментов. ", меткой fig:mpr, шириной 0.8 от ширины линии (соотношение сторон остаётся постоянным, если не указаны явно ширина и высота). Стоит также обратить внимание, что картинка вставлена не на месте кода, а ниже на строку. Это определяется параметром положения иллюстрации ([h]). Данный параметр может принимать следующие формы — h here, t top, b bottom, p page, H HERE (делает картинку плавающей с помощью пакета float). Также есть возможность форсировать положение добавив восклицательный знак — h! вставит картинку прямо на место кода, но это не является рекомендуемым вариантом вставки — достойный вид документа не гарантируется.

Картинки при вставке возможно вращать командой опцией angle (угол, против часовой стрелки в градуса), origin задают точку относительно которой вращается картинка (с соответствует центру)

Больше примеров возможно найти по следующей ссылке и в документации пакета graphics.

В этом блоге публикуются заметки и решения, найденные в процессе работы, освоения и жизни в дистрибутиве Debian GNU/Linux.

Иллюстрации и рисунки в LaTeX

Здесь приводятся базовые идеи и примеры, которые вам нужно освоить для вставки изображений и рисунков в LaTeX. Мы рассмотрим вставку нескольких рисунков в ряд и оформление групп рисунков, для чего будем пользоваться окружением minipage. Для набора дипломов по техническим специальностям приведённых сведений должно хватить.

Подготовка
Для начала работы с изображениями нужно подключить пакет graphicx, который обеспечивает их вставку в текст документа. Есть много драйверов для работы с изображениями, но мы будем использовать dvips — это позволит нам потом сравнительно легко и довольно просто конвертировать диплом из LaTeX в Word или OpenOffice через формат RTF, используя открытую программу latex2rtf. Для этого ваши рисунки нужно конвертировать в EPS, что делается программой convert из пакета imagemagick или утилитой sam2p. И imagemagick, и sam2p есть в стандартных репозиториях Debian и ставятся на раз.

Как вставить в LaTeX-документ изображение?
Рисунок в технической статье или отчёте — это не просто картинка, а ещё и подпись к нему, и возможность поставить на рисунок ссылку. Для этого сначала в преамбуле документа (это те самые магические заклинания, которые до egin < document >) нужно вставить следующее:

Рисунки лучше хранить в отдельных каталогах, идеально — для каждой главы диплома свой каталог. Следует перечислить все каталоги с рисунками, чтобы ЛаТеХ смог их найти. Делается это так:

После этого копируем полученный eps-файл в каталог, указанный в graphicspath <>, в данном случае подкаталог noiseimages, который находится в каталоге с нашим tex-файлом.

Помимо вставки картинки, нам нужна к нему подпись и возможность сослаться. В общем, мы можем:

  1. определить место рисунка в тексте — разрешить алгоритмам ТеХа принять решение исходя из заполненности страницы egin < figure >[h] "хотелось бы картинку здесь", настойчиво просить разместить после текста egin < figure >[h!] "очень хочу картинку здесь", и ударить кулаком по столу — картинку тут и точка egin < figure >[H] "ХОЧУ картинку здесь и баста", а с прибавлением буквы p мы заставляем поместить ЛаТеХ картинку отдельно на страницу так: egin < figure >[pH].
  2. задать размер изображения в относительных единицах — долях от ширины строки или текста
  3. вставить подпись под рисунком caption
  4. вставить ссылку на рисунок label

А теперь всё сразу:

Результат в документе:

Всё просто и понятно в этом примере: мы разместили рисунок, который находится в файле image, в тексте — оставляем выбор размещения за ТеХом. Размер его будет во всю строку, подпись — "Рис.N:Зависимость сигнала от шума для данных.", где N — номер рисунка, который будет вставлен позже, во время сборки документа. Расширение у документа не указывается: если вы используете драйвер dvips, то это обязательно postscipt.

Теперь надо ссылаться на рисунок так: как показано на Рис.

ef < ris:image >- так вы всегда сошлётесь на правильный рисунок. Только нужно следить, чтобы имена рисунков не повторялись. Главное — делать название рисунков осмысленными и понятными вам, а не просто ris1, ris2. Естественно, что LaTeX — это язык программирования, так что все советы по грамотному написанию программ уместны и здесь.
Маленькая хитрость: команду caption <> нужно использовать обязательно перед label < >, иначе в документе ссылка будет не на рисунок, а на текущую subsection.

Полезно запомнить, что ЛаТеХ рассматривает рисунок как одну большую букву. Поэтому в некоторых сложных случаях полезно применять грубую силу, т.е. например можно сделать интервал от подписи командой vspace <1cm>- не очень изящно, зато действенно.

Два рисунка в строчку
Немного усложним пример — вставим два рисунка в строку, с единой подписью под каждым. Можно вставить ещё один includegraphics , но под рисунками должны быть подписи а) и б) и нужно, чтобы они были по центру. Для этого есть замечательное окружение egin < minipage >.. end < minipage >. То есть резервируем место под рисунок, и вставляем его во фрейм. Вот так:

Здесь ширина рисунка указана 1 linewidth то есть во всю строку, но строка теперь ширины 0.49 linewidth так что рисунок будет во весь фрейм размера в половину строки. Кроме того, после каждого рисунка идётразрыв строки и буква, обозначающая рисунок. Нужно помнить, что ссылка и подпись под рисунками одна.

Результат, как всегда, логичен и приятен:

Команда hfill позволяет раздвинуть рисунки к краям страницы, как бы заполняя между ними пространство пустотой. Из приведённых примеров должно быть понятно, как вставлять несколько рисунков в строку, теперь немного усложним задачу и попробуем вставить два рисунка в строчку и два в столбец.

Два рисунка в строчку и два в столбец
Следующий уровень — вставляем рисунки не только в строчку, но и по столбцам. Идея таже, только после заполнения строчек вставляем команду vfill которая растолкнёт рисунки по строкам. Всё остальное остаётся в силе: используем окружение minipage и грамотно выставляем ширину этих самых minipage так, чтобы оставался небольшой зазор: для двух картинок 0.48, для трёх 0.31 и так далее. Собственно, код:

То есть теперь мы не падаем в обморок от просьбы вставить 12 рисунков по 3 в ряд. Все идеи те же самые, хотя едва ли в дипломе вам придётся столкнуться с большим количеством хитро расположенных рисунков.


Два рисунка с разными подписями

Это важный частный случай, так как довольно часто сделать одну подпись для двух рисунков или длинно, или сложно, и поэтому лучше выделить их в два отдельных рисунка, но в ряд. Мы не будем привлекать для этого отдельные сущности, а воспользуемся старым-добрым minipage. Надеюсь, благодарный читатель ещё помнит, что ЛаТеХ — он как рельса, прост и бесхитростен, и делает то, что вы ему прикажете, как бы костыляво это не выглядело:

Для этого случая код следующий:

Как видно, всё достаточно легко и просто. Не забываем проставлять нужные размеры minipage и рисунков, периодически посматривая на результат в kdvi и корректируя код по ходу дела.


Три рисунка с индивидуальными ссылками

Вариация на тему предыдущего случая, но через subfigure. При этом можно ссылаться на под-рисунки отдельными ссылками, например "см. Рис

ef< fig:actuatorscouplingSheme _ decoupledcase > будет отображено как "Рис 2(а)". Добавляем в преамбулу:

usepackage < subfigure >

и далее вставляем этот код:

Так что теперь в тексте можем ссылаться отдельно на рисунок 2а, 2b или 2c с помощью команды
ef <>. На самом деле, subfigures умеют намного больше.

Три рисунка разной высоты
Иногда случается такая партизанская засада, как разномасштабные рисунки, которые под один размер подгонять нехорошо по смыслу, и нужно сделать так, чтобы подписи к ним были в одну строчку. Иначе получается некрасиво: буквы под рисунками в разных положениях. Я не претендую на истину в последней инстанции, но вот выход, который я нашёл для себя:

Как это выглядит в документе:

Здесь игра в том, что после всех окружений minipage, в которых вставлены картинки, идёт отдельная minipage. В ней — таблица, ширина колонок которой точно такая же, как и ширина minipage для картинок. Вот, собственно, код:

Я немного забегаю вперёд и использую таблицы, которые будут описываться в другом разделе, но думаю, что человек с высшим образованием без труда переведёт слово tabular.

Рисунок с обтеканием текста в LaTeX
В дипломах такие фокусы не приветствуются, но если очень нужно — делается сравнительно просто пакетом расширения wrapfig. Для это подключаем этот пакет в преамбуле usepackage .

После этого у нас появляется замечательная возможность продемонстрировать свою невероятную оформительскую крутизну, используя окружение egin < wrapfigure >. end < wrapfigure >, когда нужно сделать обтекание рисунка:

[16] — определяет высоту рисунка в число строк текста и позволяет отбить дополнительное место для рисунков.

— положение картинки на странице, можно слева или справа .
— ширина картинки в относительных единицах от ширины линии.

Тонкий момент: на самом деле, параметр положения рисунка на странице можно писать с маленькой буквы (слева или справа ), но это заставляет ЛаТеХ поместить изображение именно там, где вы прикажете. Если же ставить большие буквы (слева или справа ), то это даст больше свободы ЛаТеХу.

Ещё тонкость в том, что автоматика может сделать слишком много (или мало) места в верхней или нижней части обтекаемого рисунка. Вот тут нам поможет дополнительный аргумент [lineheight] , который в данном примере задан как [16]. Он-то определяет высоту рисунка в строках текста. Другой возможностью является добавление или удаления промежутков с помощью команды vspace и данном примере vspace ЛаТеХу приказывается сместить картинку немного вверх, чтобы выиграть место для текста.

Обратите внимание на красную точку — она должна присутствовать. Можно изменить способ, которым формируются счётчики, с помощью следующих команд:

  • arabic 4
  • oman iv
  • Roman IV
  • alph d
  • Alph D

Больше узнать о счётчиках можно тут.