Мы расскажем о том:
- какие пакеты нужны для того, чтобы вставить рисунок в документ 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 <
Помимо вставки картинки, нам нужна к нему подпись и возможность сослаться. В общем, мы можем:
- определить место рисунка в тексте — разрешить алгоритмам ТеХа принять решение исходя из заполненности страницы egin < figure >[h] "хотелось бы картинку здесь", настойчиво просить разместить после текста egin < figure >[h!] "очень хочу картинку здесь", и ударить кулаком по столу — картинку тут и точка egin < figure >[H] "ХОЧУ картинку здесь и баста", а с прибавлением буквы p мы заставляем поместить ЛаТеХ картинку отдельно на страницу так: egin < figure >[pH].
- задать размер изображения в относительных единицах — долях от ширины строки или текста
- вставить подпись под рисунком caption
- вставить ссылку на рисунок 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
Больше узнать о счётчиках можно тут.