Журнал LinuxFormat - перейти на главную

LXF86:LaTeX

Материал из Linuxformat
Версия от 13:44, 24 декабря 2008; Crazy Rebel (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск
Компьютерные TeXнологии Учимся использовать культовую систему вёрстки


Содержание

Графика

ЧАСТЬ 3: Порой иллюстрация стоит тысячи слов – и сегодня Евгений Балдин расскажет, как добавить их в создаваемые вами документы LaTeX!
Q: Как быстро написать на LaTeX-е курсовую, в которой кроме текста есть и графики?
A: Сделать для начала графики.
Вопрос и краткий ответ


Вероятно, на текущий момент TeX лучше других программ вёрстки умеет разбивать абзацы на строки, то есть удачнее всех разливать порции «клея» между «боксами». Но подготовка графики выносится за рамки этого процесса. Почти…

С точки зрения TeX, картинка – это просто очень большой прямоугольник, который надо как-то разместить на странице. От пользователя нужны только размеры этого прямоугольника. Отображение же иллюстрации лежит на плечах драйверов. Самым востребованным форматом для представления графики в LaTeX до сих пор является Encapsulated PostScript.

Encapsulated PostScript

Уже больше двадцати лет прошло с тех пор, как никому не известная фирма Adobe Systems Inc. получила от компании Apple инвестиции на «обучение» лазерных принтеров молодому языку PostScript. Как следствие, этот платформеннонезависимый язык с полностью открытой спецификацией стал безальтернативным стандартом. Даже сейчас PostScript фактически не имеет конкурентов в области допечатной подготовки. Поэтому почти все «уважающие себя» графические программы умеют экспортировать результаты своей деятельности в виде инструкций PostScript. Это особенно касается векторных графических редакторов, так как PostScript подразумевает векторную графику.

Encapsulated PostScript (EPS) – графический формат [скорее даже язык программирования, – прим. ред.]. Файлы в этом формате обычно имеют расширение .eps. По сути дела, это PostScript с некоторыми упрощениями и дополнительными договорённостями. Самая интересная с точки зрения LaTeX договорённость – это обязательное наличие в заголовке информации о размере картинки, которая передаётся вместе с комментарием:

 %!PS-Adobe-2.0 EPSF-2.0
 %%Creator: dvips(k) 5.95b Copyright 2005 Radical Eye Software
 %%Title: picture.dvi
 %%BoundingBox: 127 464 430 667
 %%DocumentFonts: SFRM1200 SFRM0800
 %%EndComments

Первая строка комментария обычно содержит версию PostScript (Некоторые программы (не будем тыкать пальцем в драйвер для РostScript-принтеров одной очень распространённой операционной системы) добавляют перед комментарием бинарный мусор. Для полноценной работы с такими файлами этот мусор следует удалить.). Вслед за комментарием BoundingBox идёт информация о размерах. Первые два числа соответствуют координатам левого нижнего угла картинки, а последние соответствуют координатам правого верхнего угла. Единицей измерения является «большой пункт» (bp=1/72 in), который примерно равен 0,351 мм. Для вёрстки текста указанной информации достаточно.

Чтобы из уже имеющегося одностраничного PostScript-файла сделать EPS, необходимо и, как правило, достаточно добавить BoundingBox. Для вычисления искомых размеров можно воспользоваться утилитой ps2eps из одноимённого пакета. Если же в стандартной поставке эта программа отсутствует, то можно напрямую воспользоваться программой Ghostscript – свободным программным интерпретатором PostScript:

 > gs -q -dSAFER -dNOPAUSE -dBATCH -sDEVICE=bbox «имя файла»

Размеры выясняются с помощью указания специального драйвера bbox. Ключи -q, -dNOPAUSE и -dBATCH используются для подавления вывода ненужной информации и вопросов со стороны программы. Ключ -dSAFER гарантирует, что Ghostscript не будет производить никаких деструктивных действий (Отключается возможность выполнения таких команд, как удаление и переименование, а чтение файлов происходит в режиме read-only. Очень полезный ключ, если Ghostscript используется в качестве фильтра.).

Ещё одной особенностью формата EPS является возможность добавлять растровое изображение для предварительного просмотра. Это было сделано для ситуаций, когда программа не понимает PostScript, а что-то на месте «дырки» для картинки отобразить надо. Такое добавление идёт вразрез с принципиальной кроссплатформенностью PostScript и его следует, по возможности, избегать. Для операций с этим расширением, в том числе и для добавления/удаления растра, можно воспользоваться утилитой epstool из одноимённого пакета.

В конце рассказа про EPS хотелось бы упомянуть о замечательной утилите pstoedit из, естественно, одноимённого же пакета. Не все, но некоторые из болееменее внятно созданных PostScript-файлов она ухитряется перевести в редактируемый векторный графический формат. Это упрощает правку файлов, которые не имеют исходных текстов.

Как сделать EPS из растра

Одним из важных вопросов является конвертация растровых форматов в EPS. Растр гораздо проще создавать, а кое-где, например, при снятии скриншотов, применим фактически только растр. Стандартные же средства преобразования, например, утилита convert из пакета ImageMagick, не всегда дают оптимальные результаты.

Возможным и вполне разумным решением является замена традиционной линейки: LaTeX dvips [ps2pdf] на pdfLaTeX, сразу «из коробки» поддерживающий растровые форматы PNG и JPEG, которые можно внедрять в формат PDFнапрямую. Массового перехода на данную технологию пока не наблюдается, но заметное движение в эту сторону есть. У неё есть неоспоримые достоинства, но она не лишена недостатков. Рассказ о pdfLaTeX выходит за рамки этой статьи.

Вопрос о конвертации из JPEG можно решить с помощью простой утилиты jpeg2ps, которую можно найти в любом CTAN-архиве (The Comprehensive TeX Archive Network. Центральный сайт: http://www.ctan.org.) в директории nonfree/support/jpeg2ps. Утилита не преобразовывает JPEG-файл, а просто добавляет правильный EPS-заголовок. Декомпрессия JPEG производится непосредственно интерпретатором PostScript (Это стало возможным, начиная с версии PostScript Level 2.). К недостаткам утилиты можно отнести то, что в силу своей лицензии она не может распространяться со свободными дистрибутивами, а к достоинствам – отсутствие зависимостей.

Более комплексными решениями являются утилиты sam2p из одноимённого пакета и bmeps. Их также можно найти на CTAN в директориях graphics/sam2p и support/bmeps, соответственно. sam2p является своеобразным комбайном, который поддерживает множество растровых графических форматов, в то время как bmeps фокусируется на PNG и JPEG. Обе эти программы позволяют получить вполне приличную EPS-картинку для печати или просмотра на экране. В обоих случаях будет необходимо разобраться в ключах и настройках. С моей точки зрения, bmeps является более удобным решением, производящим достаточно маленькие (Это важно, так как мало какой растровый редактор может оптимально сохранить EPS.) по размеру EPS-файлы, но и sam2p достаточно хорош.

Опять же на CTAN в директории graphics/a2ping можно взять довольно увесистый perl-скрипт a2ping.pl. Он является своеобразной надстройкой над sam2p и Ghostscript, что позволяет ему более-менее автоматически конвертировать из растра в PostScript и обратно.

Обзор внешних программ закончен. Внимание! Далее слово «пакет» будет относиться к пакетам LaTeX, а не пакетам дистрибутива GNU/Linux.

graphicx

Ответственным за создание «бокса» для размещения картинки является пакет graphicx (graphicx пришёл на смену пакету graphics — различия в последней букве. Команды из предыдущего пакет также можно использовать, но делать это настоятельно не рекомендуется.), а точнее, команда \includegraphics.

Пример использования \includegraphics.

В команде есть один обязательный параметр – вставляемая картинка. Необязательные параметры передаются с помощью пар «ключ=значение», разделяемых запятой. За подобный способ объявления параметров отвечает пакет keyval. Некоторые из поддерживаемых пакетом параметров перечислены ниже:

  • bb – позволяет исправить BoundingBox прямо в коде, не меняя EPS-файл. Значение представляет из себя четыре

числа, кодирующие положение левого нижнего и правого верхнего углов, например: [bb=127 464 430 667]. Вместо одного bb можно воспользоваться четвёркой ключей: [bbllx=127,bblly=464,bbrx=430,bbry=667], каждому из которых присваивается только одно значение.

Помимо перечисленных ключей, для модификации BoundingBox можно использовать viewport – четыре числа, описывающих границы BoundingBox, где в качестве центра координат выбирается левый нижний угол уже сущест вующего описания и trim – четыре числа, представляющих собой отступы от левой, нижней, правой и верхней границ.

  • clip – обрезает вставленную картинку по BoundingBox. Это необходимо делать в случае изменения границ для «выкусывания» части картинки, иначе она будет «вылезать» за пределы выделенного ей бокса. По умолчанию имеет значение false. Отсутствие значение у ключа clip при его упоминании эквивалентно значению true. Подобное поведение верно и для других логических переключателей.
  • angle – поворачивает картинку на заданный угол в градусах.
  • origin – определяет координаты центра, вокруг которого вращается рисунок. Кроме непосредственно координат, origin принимает и буквенные сокращения: l, b, r и t – соответствует центру вращения слева, снизу, справа и сверху. В каждом случае выбирается середина указанной стороны. Возможны комбинации, задающие углы картинки: lt, rt, rb и lb. c обозначает центр картинки.
  • width – ширина вставляемой картинки.
  • height – высота вставляемой картинки.
  • scale – масштабный коэффициент.
  • keepaspectratio – логический переключатель. Модифицирует параметры высоты и ширины картинки в сторону уменьшения с целью сохранения исходных пропорций изображения.

Ещё один пример использования \includegraphics

Аргументы \includegraphics интерпретируются слева направо. Для команд вращения и масштабирования порядок следования имеет значение.

По вашим правилам

Пакет graphicx предоставляет возможность вызвать внешнюю программу для обработки картинки перед её вставкой. Так, например, можно добавить возможность включения в документ PNG-файлов:

\DeclareGraphicsRule{.png}{eps}{.bb}{`bmeps -p3 -c #1`}

Первый параметр определяет расширение нового графического формата, для которого задаются правила. В представленном примере это .png. Второй параметр указывает тип графики. После преобразования это будет EPS – по умолчанию, dvips ничего другого и не знает. Третий параметр определяет расширение файла, из которого будут считаны параметры BoundingBox. Файл должен содержать одну строчку вида:

%%BoundingBox: 0 0 848 979

Такой файл необходимо предварительно создать для каждой PNG-картинки. Это можно сделать, например, так:

bmeps -b «картинка».png «картинка».bb

Последний параметр определяет команду, которую следует выполнить для преобразования картинки. Команда должна выдавать результат в стандартный поток вывода. #1 соответствует имени обрабатываемого файла. Непосредственное выполнение команды происходит при трансляции dvi-файла.

Выполнение внешней команды является потенциально опасной процедурой, поэтому защита по умолчанию этого не позволяет. Для просмотра dvi-файла через

Персональные инструменты
купить
подписаться
Яндекс.Метрика