Работа в системе LaTeX



         

PostScript-рисунки - часть 4


Какой из этих многочисленных вариантов даст при печати лучшие результаты, зависит от конкретной ситуации. (Еще сложнее выбрать наилучший способ, если готовится оригинал-макет для типографии.)

Все сказанное относилось к сканированным оригиналам рисунков. Но при изготовлении чертежей и технических рисунков мы не советуем чертить их на бумаге и потом сканировать. Есть гораздо более удобные средства. Одно из них (кстати, входящее в большинство 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

Этот рисунок иллюстрирует метод Ньютона поиска корня уравнения

f(x)=0
; заметим, что направления касательных и точки пересечения вычисляются автоматически.





Содержание  Назад  Вперед