PostScript-рисунки
Если вы используете программу dvips, появляется возможность соединять набранный в программе TeX текст с PostScript-рисунками. (Именно таким способом было подготовлено это приложение.) Вот как это делается.
Прежде всего, надо подключить стилевой пакет graphicx с опцией dvips. Последняя буква в названии пакета именно x; существует вариант этого пакета, называющийся graphics, но он немного отличается от описываемого нами. Для подключения пакета graphicx с опцией dvips следует написать в преамбуле
\usepackage[dvips]{graphicx}Затем надо подготовить собственно рисунок в виде PostScript-файла. Точнее говоря, требуется специальный тип PostScript-файлов, который называется Encapsulated PostScript (традиционное расширение: .eps). Такие файлы предназначены для включения в другие файлы, и потому подчиняются дополнительным ограничениям (например, там не должно быть нескольких страниц).
Как проще всего изготовить Encapsulated PostScript-файл, зависит от типа рисунка и ваших навыков. Например, автограф Колмогорова был просканирован (в системе Linux) с помощью программы xsane, затем полученный pgm-файл (полутоновая матрица) был почищен и обрезан по краям в программе gimp, затем преобразован в черно-белый (без полутонов) программой pgmtopbm, затем преобразован в PostScript программой pnmtops, и в результате получился файл exampl2.ps.2) В тексте мы написали
\begin{center} \includegraphics{exampl2.ps} \end{center}Здесь \includegraphics — команда (определенная в пакете graphicx), а ее аргумент — имя файла с рисунком. Команда \includegraphics имеет множество необязательных параметров. Например, картинку с текстом "Это строка (string)!" мы включили с увеличением в два раза, сказав
\begin{center} \includegraphics[scale=2]{exampl4.ps} \end{center}Можно также повернуть рисунок (скажем, на

С точки зрения TeX'а фрагмент \includegraphics[...]{...} ведет себя как блок. Его размеры берутся из самого включаемого файла (из строки BoundingBox, где единицей измерения является

В принципе можно вручную такую строку добавить (если почему-либо изготовленный вами PostScript-файл ее не содержит) или исправить (если указанные там числа вас не устраивают).
Но того же самого эффекта можно добиться и средствами \TeX'а, используя команды \vbox и \hbox. Вот, например, как была помещена рисованная буква "В" в начало одного из разделов:
\newsavebox{\bukva} \sbox{\bukva}{\includegraphics{litera.ps}} \begin{wrapfigure}{l}{\wd\bukva} \vbox to 13mm{\vss\usebox{\bukva}\vspace*{-7mm}} \end{wrapfigure} предыдущем разделе мы уже упоминали программу dvips... Горизонтальные размеры буквы мы не меняли, а вертикальный размер и положение регулировали (13mm и -7mm были подобраны; команда \vss означает бесконечно сжимаемый и растяжимый клей, используемый в вертикальном режиме). Сам файл был получен сканированием иллюстрации из книги А.Г.Шицгала "Русский типографский шрифт"; эта иллюстрация, в свою очередь, представляет собой воспроизведение фрагмента из " Остромирова Евангелия" (рукописной книги XI века). Подрисуночная подпись (которую можно было бы сделать обычным способом, с помощью \caption), естественно, в этом случае была бы неуместна.
Если у документа (или у пакета {graphicx}) указана опция draft (иными словами, слово draft присутствует среди необязательных аргументов), то вместо PostScript-рисунков, включенных с помощью\includegraphics, будет печататься прямоугольник того же размера с названием PostScript-файла. (Это может сэкономить время и краситель в принтере.)
Сказанного достаточно, чтобы включать рисунки в статьи и книги. Но все же полезно понимать более конкретно, что происходит в этом месте в dvi-файле. Он не включает в себя описание рисунка. Зато он включает специальное указание (конструкция special), которое программа dvips интерпретирует как необходимость включить в это место текста фрагмент из PostScript-файла, указанного рядом со special. Тем самым программа dvips нуждается не только в dvi-файле, но и в PostScript-файлах рисунков. (Кстати, они нужны и LaTeX'у, хотя из них он читает лишь строку BoundingBox, чтобы определить размер блока.) Зато готовый PostScript-файл (выдаваемый программой dvips) уже самодостаточен; все необходимые рисунки включены в него и больше никаких файлов не надо.
Подчеркнем еще раз обстоятельство, которое внимательный читатель уже понял: использование PostScript-рисунков выходит за рамки официального стандарта TeX'а, поэтому могут существовать (и существуют) dvi-драйверы, которые попросту игнорируют соответствующие конструкции special. При их использовании рисунков не будет видно. К счастью, программа dvips стала одним из самых популярных dvi-драйверов, и в расчете на нее можно смело использовать пакет graphicx.
В заключение вернемся к исходному вопросу: как же включить рисунок в текст? Мы знаем, как включить PostScript-файл, но как получить этот файл? Если рисунок сканируется, то такой файл можно получить с помощью программ обработки изображений. Мы уже кратко упомянули о них, говоря об автографе Колмогорова; все упомянутые программы есть в системах типа UNIX, но и в Microsoft Windows для этого есть средства, в частности, входящие в комплект MiKTeX свободно распространяемые программы, см. приложение Ж.
Важно иметь в виду, что рисунок в формате .eps имеет некоторый размер в абсолютных единицах длины (в его заголовке указаны координаты Bounding Box, при этом единица принята равной


Кроме того, если исходный рисунок был полутоновой (о цветных мы не говорим, там все еще сложнее), то в какой-то момент он должен быть тем или иным способом преобразован в черные и белые точки (большинство принтеров умеет печатать только их). Это может делаться и в принтере, и до него (в интерпретаторе Ghostscript); кроме того, можно не доверять этим механизмам и пытаться с самого начала преобразовать полутоновой рисунок в двуцветный, например, с помощью программы pgmtopbm.
Какой из этих многочисленных вариантов даст при печати лучшие результаты, зависит от конкретной ситуации. (Еще сложнее выбрать наилучший способ, если готовится оригинал-макет для типографии.)
Все сказанное относилось к сканированным оригиналам рисунков. Но при изготовлении чертежей и технических рисунков мы не советуем чертить их на бумаге и потом сканировать. Есть гораздо более удобные средства. Одно из них (кстати, входящее в большинство TeX-комплектов) — программа metapost (или mpost, иногда mp). Ее автор — John Hobby — переделал программу METAFONT так, чтобы вместо шрифтов она порождала PostScript-файлы с рисунками. Эта программа заслуживает отдельной небольшой книжки (которой на русском языке пока нет; есть авторское английское описание, которое обычно входит в комплект TeX'а в виде файла mpman.ps). Мы лишь приведем два примера ее использования.
Подготовим файл exampl5.mp такого содержания:
beginfig(1) path a,b,c; a = halfcircle rotated -90 scaled 4cm; b = fullcircle scaled 4cm shifted (2.6cm,0); c = buildcycle(a,b); fill c withcolor 0.9 white; draw a; draw b; picture l; l=thelabel (btex $a\cap b$ etex, (1.3cm,0)); unfill bbox l; draw l; endfig; bye | ![]() |
mpost exampl5.mp Получится файл exampl5.1. Его можно включить в текст с помощью команды \includegraphics как PostScript-файл (строго говоря, он не является полноценным PostScript-файлом, но dvips умеет его включать). Соответствующий рисунок изображен справа от исходного текста metapost-программы.
А вот еще один пример использования системы metapost (заимствован из авторского руководства по этой системе):
beginfig(1); 3.2scf = 2.4in; path fun; # = .1; % Keep the function single-valued fun = ((0,-1#)..(1,.5#){right}..(1.9,.2#){right}..{curl .1}(3.2,2#)) scaled scf yscaled(1/#); vardef vertline primary x = (x,-infinity)..(x,infinity) enddef; primarydef f atx x = (f intersectionpoint vertline x) enddef; primarydef f whenx x = xpart(f intersectiontimes vertline x) enddef; z1a = (2.5scf,0); z1 = fun atx x1a; y2a=0; z1-z2a=whatever*direction fun whenx x1 of fun; z2 = fun atx x2a; y3a=0; z2-z3a=whatever*direction fun whenx x2 of fun; draw fun withpen pencircle scaled 1pt; drawarrow (0,0)..(3.2scf,0); label.bot(btex $x_1$ etex, z1a); draw z1a..z1 dashed evenly; makelabel(nullpicture, z1); draw z1..z2a withpen pencircle scaled .3; label.bot(btex $x_2$ etex, z2a); draw z2a..z2 dashed evenly; makelabel(nullpicture, z2); draw z2..z3a withpen pencircle scaled .3; label.bot(btex $x_3$ etex, z3a); endfig; bye Этот рисунок иллюстрирует метод Ньютона поиска корня уравнения

