вторник, 11 октября 2011 г.

Рисунки в LaTeX документе

Поговорим о том как и в каком формате вставлять рисунке в LaTeX документы.

Форматы рисунков

Самым часто используемым в LaTeX документах графическим форматом является формат EPS (Encapsulated PostScript). Второй по популярности и распространённости — это формат PDF (Portable Document Format). Традиционно формат EPS используют вместе с движком latex, тогда как формат PDF используют с движком pdflatex.

О движках

Первым появился движок latex, потом — движок pdflatex. Стоит отличать формат LaTeX и движок latex. Первый — это формальное описание команд, окружений, коллекции стандартных классов и приёмов для набора документов. Второе — обычная программа, используемая для вёрстки документа, набранного в формате LaTeX, в файл DVI (DeVice Independent). Документ в формате DVI можно преобразовать далее в PS или PDF файл и просмотреть его на экране монитора или распечатать. Обычно цепочка действий такова:

  • latex → DVI файл,

  • dvips → PS файл,

    • ps2pdf → PDF файл из PS,

  • dvipdfm → PDF файл,

Позже появилась программа, которая создавала сразу же PDF файл из LaTeX документа — движок pdflatex.

Кроме формата LaTeX есть обычный формат TeX (plain tex) и движок для него — tex, а движок для вёрстки документа в PDF формат — pdftex.

Вот известные движки:

  • latex — традиционный движок, верстает документ в DVI формат;

  • pdflatex — этот движок, как следует из названия, верстает документ в формат PDF, в остальном — ничем не отличается от latex;

  • xelatex — один из новых движок, верстает документ в PDF формат, поддерживает напрямую кодировку юникод, шрифты в форматах TTF, OTF и многое другое;

  • lualatex — новый движок, также верстает документ в PDF формат, но имеет встроенный язык программирования Lua, поддерживает напрямую кодировку юникод, шрифты в формате OTF и TTF;

  • dvilualatex — вариант движка lualatex, но в результате вёрстки выдаёт документ в формате DVI.

Пара dvilualatex и lualatex похожа на пару latex и pdflatex в том, что первая программа в паре верстает документ в DVI, вторая — в PDF.

Формат ConTeXt

Кроме форматов LaTeX и (plain) TeX также распространён формат ConTeXt. Этот формат может работать с движками pdftex, xetex, так называемый формат MkII, и с движком luatex — формат MkIV. ConTeXt позволяет использовать рисунки в форматах PDF, EPS, MPS, SVG. Но об этом не в этой заметке.

Как вставлять рисунки в документ

В зависимости от используемого движка в документе можно использовать либо рисунки в формате EPS, либо в формате PDF. Именно, если движок верстает документ в DVI, тогда следует использовать только формат EPS (см. детали ниже), если движок верстает документ в PDF — следует использовать рисунки в формате PDF.

Стандартный способ вставки рисунков в документ предполагает использование пакета graphicx и команды \includegraphics. Пример ниже.

Пример №1. Самый простой пример вставки рисунка в LaTeX документ
\documentclass{article}     %%% <1>

\usepackage{graphicx}       %%% <2>

\begin{document}

\includegraphics{image1}    %%% <3>

\end{document}
  1. Можно использовать любой другой стандартный класс документа, см. документацию.

  2. Обязателен при вставки рисунков в документ.

  3. Эта команда вставит рисунок в данном месте документа. Здесь image1 — это первичное имя файла, например для рисунка в формате EPS полное имя файла — image1.eps, для рисунка в формате PDF — image1.pdf.

«Детские» вопросы

  1. «А как же движок узнает полное имя файла?»

    Ответ очень простой — никак, он не делает никаких предположений относительно полного имени файла, он просто пытается вставить файл с указанным названием. Всё дело в пакете graphicx, он достаточно «сообразительный», он «знает», что для движка latex нужен файл image1.eps, а для движка pdflateximage1.pdf. Если имеются два файла — image1.eps и image1.pdf, то движок latex будет использовать файла image1.eps, а движок pdflatex — файл image1.pdf!

  2. «Ну и в чём преимущество, выгода, использовать только первичное имя файла?»

    А в том, что можно сверстать один и тот же документ, ничего не изменив в нём как в DVI/PS, так и в PDF формат, воспользовавшись либо движком latex, либо движком pdflatex. НИЧЕГО НЕ ИЗМЕНИВ! Кстати, часто встречаются ситуации, когда на разных этапах или разным людям нужны документы в разных форматах. Это — решение для таких ситуаций.

Небольшое техническое отступление и исследование

«Всё течёт, всё изменяется» и в описанной схеме появляются интересные подробности. Первое о чём следует сказать, это что движок xelatex позволяет вставлять рисунки не только в формате PDF, но и EPS! Дело в том, что в действительности движок xelatex не верстает документ непосредственно в PDF формат, а создаёт промежуточный файл в формате XDV (eXtended DeVice independent), который сразу же преобразуется с помощью программы xdvipdfmx в PDF документ. На стадии работы программы xdvipdfmx рисунок EPS автоматически преобразуется в формат PDF. Но происходит это незаметно для пользователя.

Может быть к неудовольствию части пользователей LaTeX, такого преобразования над EPS файлами движки pdflatex и lualatex не делают, поэтому напрямую вставлять рисунки в формате EPS они не могут. Пользователю следует самостоятельно преобразовать EPS рисунки в PDF формат. Для этого есть небольшая программа epstopdf. Пример использования программы ниже.

Пример преобразования рисунка из EPS в PDF формат
$ epstopdf image1.eps

После чего появится файл image1.pdf.

Для того, чтобы упростить переход пользователей к движку pdflatex и сделать совместное использование движков latex и pdflatex более простым был разработан пакет epstopdf (не путать с программой epstopdf), который позволяет на лету преобразовать рисунок в EPS формате в PDF и вставить его в документ. Типичный пример документа и ситуации его использования описаны ниже.

Пример №2. Использование пакета epstopdf
\documentclass{article}

\usepackage{graphicx}
\usepackage{epstopdf}

\begin{document}

\includegraphics{image1}

\end{document}

Допустим, что мы работаем над документом в формате LaTeX, вставляем рисунки в формате EPS, так что у нас все рисунки в этом формате. Всё работает нормально, движок latex верстает документ в DVI, а программа dvips выдаёт из DVI файла — PS документ, который мы просматриваем на экране и выводим на печать. Если вдруг потребуется перевести документ в PDF формат, то преобразование PS в PDF выполнит программа ps2pdf. Но что делать, если потребуется сверстать документ с помощью pdflatex? Что делать с рисунками? О варианте с преобразованием EPS в PDF при помощи программы epstopdf говорилось выше, а если файлов много? Воспользуемся пакетом epstopdf как в примере. Что же произойдёт? При вёрстке движком pdflatex пакет на лету преобразует файлы EPS в PDF (с помощью той же программы epstopdf), после чего PDF рисунки будут вставлены в документ.

Ранее пакет при преобразовании из файла image1.eps создавал файл image1.pdf, независимо от того, был файл с таким именем или нет. Сейчас пакет для файла image1.eps создаёт image1-eps-converted-to.pdf.

Поддержка пакета epstopdf разными дистрибутивами

Чтобы определить степень поддержки разными дистрибутивами TeX пакета epstopdf было проведено тестирование на 4 документах. В тестировании участвовали:

  • MiKTeX 2.9 (обновлённый по состоянию на 06-10-2011), установленный в Windows;

  • TeX Live 2011 (обновлённый по состоянию на 06-10-2011), установленный в ОС Linux и в Windows;

  • TeX Live 2009, установленный из репозиториев в дистрибутиве Ubuntu; версия TL2009 появилась в Ubuntu начиная с Lucid (10.04) и доступна в текущей ветке Natty (11.04);

  • TeX Live 2007, установленный из репозиториев в дистрибутиве Fedora 15.

TeX Live 2011 проверялся тремя способами: непосредственно в Linux, непосредственно в Windows и подключением ресурса с Linux машины с доступными win32 программами (samba share и net use).

Table 1. Тестовые варианты

T1

T2

T3

T4

файл

ex1.ltx

ex2.ltx

ex3.ltx

ex4.ltx

описание

см. пример № 1

см. пример №2

см. пример №1

см. пример №2

формат рисунка

EPS

EPS

EPS, PDF

EPS, PDF

Результаты тестирования приведены ниже.

Table 2. Результаты тестирования

MiKTeX

TL2011/L

TL2011/W

TL2009

TL2007

T1

+ + - + -

+ + + + +

+ + + + +

+ + - + -

+ N/A - N/A N/A

T2

+ + + + -

+ + + + +

+ + + + +

+ + + + +

+ N/A + N/A N/A

T3

+ + + + +

+ + + + +

+ + + + +

+ + + + +

+ N/A + N/A N/A

T4

+ + + + +

+ + + + +

+ + + + +

+ + + + +

+ N/A + N/A N/A

  • «+» вёрстка документа прошла успешно,

  • «-» сверстать документ не удалось.

Порядок следования движков в таблице: latex, dvilualatex, pdflatex, xelatex, lualatex.

Note
Замечания
  • В TeX Live 2011 по умолчанию включено использование \write18 для ограниченного списка программ (в который входит epstopdf). Без этого, пакет epstopdf не сможет работать. Положительные результаты для движков pdflatex и lualatex в тесте № 1 — из-за более новых версий пакетов, в частности, теперь пакет graphicx без помощи пакета epstopdf может «узнать» о работе с PDF движками и на лету перегнать EPS в PDF.

  • При наличии обоих файлов — EPS и PDF — движок xelatex будет использовать PDF файл.

  • Начиная с TeX Live 2009 (?) при конвертации EPS в PDF на лету создаётся файл image1-eps-converted-to.pdf, до этого создавался файл image1.pdf.

  • В Ubuntu и Fedora 15 (TL2009 и TL2007 соответственно) по умолчанию выключено использование \write18, представленные результаты для них — при включенном параметре shell_escape, который позволяет использовать механизм \write18. Это касается движков pdflatex и lualatex в тесте № 2. Если используется значение по умолчанию для параметра shell_escape, тогда результаты движков pdflatex и lualatex для теста №2 в таблице для TL2007 и TL2009 — «-».

Выводы

Если вы планируете использовать оба движка — latex и pdflatex — и вставлять рисунки в документ, то убедитесь, что

  1. документ использует пакет graphicx;

  2. рисунки вставляются командой \includegraphics, без указания расширения файла-рисунка, т.е. просто указано первичное имя файла;

  3. каждый рисунок представлен в двух форматах — двух файлах — EPS и PDF.

Тогда вёрстка документа движками latex и pdflatex не будет ничем отличаться друг от друга, за единственным исключением, что вы получите документ в PS или PDF формате.

Комментариев нет:

Отправить комментарий