next up previous
Next: Некоторые способы вставки PS-рисунков LATEX-документы Up: О некоторых способах подготовки LATEX. Previous: Элементы языка PostScript

  
Об одном способе подготовки PS-файлов с описанием рисунков

Предлагаемый способ может оказаться удобен в том случае, если пользователь сам пишет программу для численного моделирования на каком-либо языке высокого уровня (C, PASCAL или FORTRAN) и с ее помощью формирует изображение на экране с использованием операторов типа "moveto", "lineto", рисования дуг и др. и при этом желает получить описание этого же изображения в виде PS-файла. В этом случае достаточно незначительно переделать текст исходной программы, дополнив его операторами записи в файл команд языка PostScript . Грубо говоря, после каждого оператора работы с графикой в исходной программе, надо вставить формирование аналогичного оператора на языке PostScript .

Поясним сказанное на простом примере. Пусть исходная программа, написанная на языке C, формирует на экране с разрешением 640x350 схематичное изображение оси времени, а именно, рисует отрезок прямой линии, исходящей из позиции с координатами (x1,y1), и заканчивающейся в точке (x2,y2), а также подписывает ось буквой "t" в позиции (x3,y3). Значения координат x1, y1, x2, y2, x3, y3 вычисляются в исходной программе (мы предполагаем, что они оказались равными x1=100, x2=500, x3=520, y1=y2=y3=199).


  
Рис.3: Изображение на экране: (ось x направлена вправо, ось y - вниз; начало системы координат - в левом верхнем углу экрана).
\begin{figure}\unitlength=1mm
\begin{picture}
(70,50)
\thicklines
\put(10,25...
...,10){(x3,y3)}}
\put(50,25){\makebox(5,3){\rm t}}
\end{picture}
\end{figure}


  
Рис.4: Изображение на странице: (ось x направлена вправо, ось y - вверх; начало системы координат - в левом нижнем углу страницы).
\begin{figure}
\unitlength=1mm
\begin{picture}
(70,50)
\thicklines
\put(10,...
...0){(520,150)}}
\put(50,25){\makebox(5,3){\rm t}}
\end{picture}
\end{figure}

На рис. 2 приведены фрагменты текста исходной программы, причем выделены операторы, которые нужно вставить в программу для формирования PS-файла. Справа приведен текст формируемого исходной программой PS-файла, т.е. описания рисунка на языке PostScript .


 
Таб.: Формирование PS-файла.
Фрагмент текста программы на языке С   Получающийся файл ex.ps
     
/* Инициализация Turbo C-графики: */    
$ \vdots$    
int maxx,maxy,x1,y1,x2,y2,x3,y3;    
maxx=639; maxy=349;    
FILE *f;
f=fopen("ex.ps","wt");
   
fprintf(f,"%%!\n");
fprintf(f,"%%%% BoundingBox:");
fprintf(f," 0 0 %d %d\n",
maxx,maxy);
fprintf(f,"/WL %3.1f def\n",1.1);
$ \vdots$
 
%!
%%BoundingBox: 0 0 639 349
 
/WL 1.1 def
/SF 30 def
/Times-Roman findfont
SF scalefont setfont
fprintf(f,"newpath\n");
 
newpath
/* Вычисление x1, y1: */    
x1=...; y1=...;    
moveto(x1,y1);    
fprintf(f,"%d %d moveto\n",
x1,maxy-y1);
 
100 150 moveto
x2=...; y2=...;    
lineto(x2,y2);    
fprintf(f,"%d %d lineto\n",
x2,maxy-y2);
 
500 150 lineto
$ \vdots$
 
WL setlinewidth
stroke
x3=...; y3=...;    
outtext(x3,y3,"t");    
$ \vdots$
 
520 150 moveto
(t) show
closegraph();    
fprintf(f,"showpage\n");
 
showpage
fclose(f);
   
 

Ниже еще раз приведен текст программы на языке PostScript с соответствующими комментариями. Комментарии в программе на языке PostScript начинаются со знака %. (Все, что следует за знаком % в строке PostScript -программы, интерпретатором игнорируется).


  %!
  % Специальная строка,  
  % с которой начинается программа. 
%%BoundingBox: 0 0 639 349 % Специальный заголовочный комментарий, % задающий координаты левого нижнего и % правого верхнего угла % в системе координат пользователя. % Необходим для импорта PS-файла в LaTeX-документ.
/WL 1.1 def % Присвоение значения переменной WL, % определяющей толщину линии.
/SF 30 def % Присвоение значения переменной SF, % определяющей размер шрифта.
/Times-Roman findfont % Установка отмасштабированного шрифта SF scalefont setfont % в качестве текущего шрифта, которым % будет печататься текст.
/M {moveto} def % Замена "длинного" оператора moveto % буквой M для сокращения длины получаемого % PS-файла (полезно, если этот файл % будет содержать много операторов moveto).
newpath % Объявление, что начато рисование новой % траектории.
100 150 moveto % Перенесение воображаемого пера % в заданную точку.
500 150 lineto % Добавление сегмента к текущей траектории.
WL setlinewidth % Установка ширины линии.
stroke % Рисование сконструированной траектории % на текущей странице и очистка текущей траектории.
520 150 M % Перемещение воображаемого пера % в заданную точку.
(t) show % Печать на текущей странице строки из стека.
showpage % Вывод текущей страницы.

Подчеркнем, что при формировании описания страницы мы пользовались значениями координат точек, вычисляемыми в исходной программе для рисования на экране, т.е. дополнительной работы на это не требуется. Заметим только, что по умолчанию начало системы координат в PostScript считается расположенным в левом нижнем углу страницы (а в языке С при выводе на экран - в левом верхнем углу). Поэтому проводился элементарный пересчет координат для оси y.

Масштабирование рисунка при использовании PS-файла в LATEX-документе можно проводить командами LATEXa.

Если в ПП производится многократный вызов функций работы с графикой, то модификация текста исходной программы сводится, в основном, к написанию после каждого обращения к такой функции соответствующего оператора fprintf, который формирует аналогичный оператор в программе на PostScript . Для уменьшения громоздкости записи можно в исходной программе ввести несколько вспомогательных функций так, чтобы, к примеру, действие оператора
fprintf(f,"%d %d moveto\n",x1,maxy-y1)
можно было заменить обращением к функции
mypsmoveto(f,x1,y1).

Полезно также иметь ввиду, что полученный PS-файл можно вручную редактировать в любом текстовом редакторе с целью изменения толщины линий, цветов, размера и вида шрифта. Например, если требуется изменить толщину "оси времени" в нашем примере, то достаточно в операторе /WL 1.1 def заменить 1.1 на другое значение. Такое редактирование может быть проведено в редакции журнала без участия автора статьи. При использовании PCX- или BMP-файлов подобное редактирование невозможно.

Ниже приведен пример иллюстрации, полученной описанным здесь способом. Исходный текст в формате PS.

  
Рис.5: Пример PS-рисунка, созданного по технологии IV.
\includegraphics[width=5in]{l1.ps}


next up previous
Next: Некоторые способы вставки PS-рисунков LATEX-документы Up: О некоторых способах подготовки LATEX. Previous: Элементы языка PostScript