Upload
knoton
View
68
Download
2
Embed Size (px)
DESCRIPTION
Лекция 10. Текст и шрифты. Текст и шрифт. - PowerPoint PPT Presentation
Citation preview
Лекция 10
Текст и шрифты
Текст и шрифт• Печать текстов – это главная задача любой печатающей системы.
Прежде чем печатать текст в ПостСкрипте мы должны установить шрифт. Для этого нужно выполнить несколько действий. Начнем с этих действий, еще не объяснив даже, что такое шрифт (а по-английски font)
• Во-первых, нужно найти шрифт по его имени или имени файла, в котором он содержится
• /Times-Roman findfont• (times.pfb) findfont• Первый вариант использования – основной, он относится к
шрифтам, которые известны мащине.• Второй работает не всегда, но в GS работает.
Шкалирование и установка шрифта
• Найденный шрифт можно запомнить для будущего использования. • /TR /Times-Roman findfont def• Но это только для того, чтобы больше шрифт не искать. Для
использования с ним нужно выполнить еще две операции.• Шкалирование снимает со стека шрифт и размер и определяет
новый шрифт нужного размера. Например,• /TR 12 scalefont• /Helvetica findfont 10 scalefont• Исходный шрифт имеет размер 1000.• Найденный или шкалированный шрифт можно установить командой
setfont• /TR 12 scalefont setfont
Использование установленного шрифта
• Основная «печатающая» команда называется show. Она требует, чтобы был установлен шрифт, чтобы была определена текущая точка и чтобы в стеке лежала печатаемая строка.
• Печатаемый текст пишется в круглых скобках. Например,• (Мы хотим сказать) show• (иногда текст (его часть) содержит скобки) show• (если скобки парные \(сбалансированные) show• (вхождения\), то это не страшно) show • Специальные знаки в строках• \ddd – символ, задаваемый восьмеричным номером• \\ - backslash• После выполнения команды show текущая точка определена и
находится за напечатанным текстом.
Ширина строки и ее использование
• При выравнивании текста нужно использовать ширину печатаемой строки (которая, конечно, зависит от параметров шрифта). Команда stringwidth снимает со стека строку и кладет в стек координаты x и y ширины (обычно y=0). Вот примеры использования ширины
• \rshow{dup stringwidth pop neg hrm show}def• \censhow{dup stringwidth pop –0.5 mul hrm show}
def• Первая из этих процедур печатает текст справа от текущей точки,
а вторая центрует его по текущей точке.
Варианты команды show
• Команда show имеет несколько вариантов, которые разрешают в промежутках между рисованием отдельных символов строки выполнять те или иные действия.
Пример
• Как, например, сделать надпись в форме спирали
Решение
• %!• /Times-ET findfont 20 scalefont setfont• 350 450 translate 3 3 scale• /text (The name of Kees van der Laan gi\• ves us a much longer example) def• -100 0 moveto 50 rotate• {-10 rotate 3 0 rmoveto 0.99 0.99 scale} • text kshow• showpage• quit
Объяснение команды kshow
• Аргументами этой команды являются блок действий и печатаемая строка. При печати строки (как в show) между каждыми двумя печатями символов выполняется блок действий
• {-10 rotate 3 0 rmoveto • 0.99 0.99 scale} % Это блок действий• text % это строка• kshow• Другие команды• ashow, cshow, xshow, yshow, xyshow, widthshow,
awidthshow
Контур печатаемой строки
• Для некоторых целей может захотеться получить контур печатаемой строки. Например, для того, чтобы залить буквы одним цветом или закрасить другим, или для того, чтобы использовать контур для вырезания части рисунка.
• Такие возможности предоставляет команды charpath. Она использует кроме строки еще логический параметр, определяющий дальнейшее использование пути.
• string bool charpath –• Если логическое значение – истина, то путь годится для заливки
или вырезания, а если ложь, то только для обвода.
Пример (из поздравления проф. В.Н.Малоземову)
Как программировалась буквица• /letbox{/Izhitsa findfont 84 scalefont setfont• lmarg vpos m -27 mm -20 mm rm• GS bs hrl bs vrl bs neg hrl CL % letter box ready• GS RED 0 LW clip• lmarg vpos m -27 mm -20 mm rm • OX OY rm /a -1 def• 40 {GS bs 2 mul bs a mul /a a .1 add def rl S GR}• repeat GR % rays inside box• S GR}def• /oshow{false charpath S}def % only to strike!• /letend{dup GS 1 setgray show GR 0 LW oshow}def• /letM{/OX -60 def /OY 30 def • GS (М) letbox -2 6 rm 0.83 1 scale letend GR• }def
Шрифты
• Шрифты бывают фирменные (в файлах) и самодельные. Фирменные шрифты имеют расширения
• pfb Postscript Font Binary• pfa Postscript Font Alphabetic. • Самодельный шрифт описывается прямо в программе. На
самодельных шрифтах хорошо показывать, как шрифт устроен. • Я увидел как-то шрифт, изготовленный для штрихового кода «3
из 9» и по аналогии с ним сделал шрифт Брайля, который используют слепые. Посмотрим, как он устроен.
Шрифт Брайля (что это такое)
• Шрифт Брайля предназначен для слепых. Каждый знак кодируется, говоря по-нашему, шестеркой битов, которые занумерованы от 1 до 6 вот так:
• 1 4• 2 5• 3 6• Слепые кодируют единицы выпуклыми точками и различают их
наощупь. На следующем слайде показан полностью латинский алфавит.
• Шрифт, которым набран этот алфавит, мы и хотим показать.
Шрифт Брайля (алфавит)
Шрифт Брайля (общая структура описания)• Описание состоит из задания для создаваемого шрифта
специального информационного объекта — словаря и его заполнения. Словарь вводится так
• /braille 10 dict def• Слово dict создает словарь, а 10 — это его первоначальная
емкость. В каких единицах? В «элементах словаря», а как они определяются, будет видно при заполнении. Заполнение происходит внутри «операторных скобок»
• braille begin• . . . . .• end• В основном заполнение состоит из обычных описаний
обязательных параметров шрифта.
Шрифт Брайля (обязательные параметры)• /FontType 3 def %тип шрифта (3 для пользовательских)• /FontMatrix [.01 0 0 .01 0 0] def• Таблица пересчета изображаемого знака в шрифт размера 1000
пунктов. При выполнении scalefont эта матрица просто заменяется другой, соответствующей требуемому размеру.
• /FontBBox [0 0 60 100] def• Задание прямоугольника, объемлющего все символы данного
шрифта.• /Encoding 256 array def • Массив для связи кодов символов с ключами слов, изображающих
эти символы. Слова находятся в словаре• /CharProcs 3 dict def• /BuildChar• Процедура, исполняемая при печати каждого символа данного
шрифта.
Шрифт Брайля (заполнение массива)
• Массив заполняется в два приема. Сначала во все его клеточки пишется невозможный символ .notdef (это делается обычным циклом),
• 0 1 255 {Encoding exch /.notdef put} for• а затем каждый нужный символ заполняется отдельно, например,• Encoding 98 /b put• Encoding 44 /comma put• (так в элемент 98, а это код ASCII буквы b, помещается ключ /b,
а в элемент 44 помещается ключ /comma, чтобы рисовать запятую).
Шрифт Брайля (заполнение словаря)
• Словарь /CharProcs заполняется внутри операторных скобок. Мы уже знаем про эти скобки и можем кое-что записать внутрь.
• CharProcs begin• /b {1 1 0 0 0 0 bc } def• /comma {0 1 0 0 0 0 bc } def• /space {0 0 0 0 0 0 bc } def• /.notdef {} def• end • Для примера взято четыре символа. Они будут печататься так: в
стек помещается шесть символов, единиц для черных точек и нулей для белых, и вызывается рисующая процедура bc (она еще появится). Убедитесь в правильном задании буквы. Важно, что пробел задается как буква — набором из шести белых точек. В описание входит и определение пустого символа .notdef.
Шрифт Брайля (вспомогательная процедура bc)
• /bc { 6 3 roll /w 30 def /wr 12 def• 0 0 m GS col w 0 rm col GR} def
Рисуется сначала левый столбец, а затем правый. Поэтому начи-наем с перестановки данных о столбцах. Вводим шаг между «точками» и размер точки. Встаем в начало координат (оно перенесено в опорную точку символа), рисуем левый столбец, сдвигаемся вправо и рисуем правый столбец. Рационально рисование столбца сделать специальной процедурой.
• /col {GS 0 LW• 3 {GS CP T wr 0 rm wr wr wr -90 270 arc• 1 eq {fill} {stroke} ifelse• GR 0 w rm} repeat GR} def • Основная часть col — троекратное повторение действия, которое
само состоит из трех шагов: рисование кружка, в зависимости от числа в стеке закраска его или обводка, сдвиг вверх.
Шрифт Брайля (процедура рисования символа)
• /BuildChar {% stack has font char • /col {. . .} def • /bc { . . .} def • 80 0 % width• 0 0 60 100 % bounding box• setcachedevice• exch begin % font begin• Encoding exch get % index by char in Encoding• CharProcs exch get % lookup name in CharProcs• end• exec % execute char procdure• } def
Шрифт Брайля (использование)
• /Braille braille definefont pop % подключ.шрифта • 100 100 T % использ. шрифта• /Braille findfont 36 scalefont setfont• 0 162 m (abcdefghij) show • 0 102 m (klmnopqrst) show • 0 42 m (uvxyz w) show • /Courier findfont 14 scalefont setfont• 5 150 m (abcdefghij) • [ 30 30 28 30 30 26 30 30 26 ] xshow• 5 90 m (klmnopqrst) • [ 32 26 30 28 29 30 30 28 30 ] xshow• 5 30 m (uvxyzw) [ 30 29 30 28 86 ] xshow• showpage
Включение шрифтов в систему
• В системе GhostScript имеется файл Fontmap, который связывает имена шрифтов с файлами. Если вам нужно добавить шрифты в свою систему, просто добавьте строки.
• Вот так:• /American-Uncial (america_.pfb) ;• /Cloister_Black-Light (cloister.pfb) ;• /Cyrillic-Narrow (cyrnarrw.pfb) ;• /Izhitsa (izhitsa.pfb) ;• /Kimberly (kimberly.pfb) ;• /Osiris (osiris.pfb) ;• /TimesET (tet.pfb) ;• /Symbol (sy.pfb) ;• /ZapfDingbats (zd______.pfb) ;
Образцы использования шрифтов (1)
• Вот примеры упомянутых выше шрифтов• /TimesET
• /Symbol
• /ZapfDingbats
Образцы использования шрифтов (2)
• Вот примеры приведенных нами шрифтов• /American-Uncial
• /Cloister_Black-Light
• /Izhitsa
Образцы использования шрифтов (3)
• Вот примеры приведенных нами шрифтов• /Cyrillic-Narrow
• /Kimberly
• /Osiris
Программа FontLab
Программа FontLab (контроль)
Хорошая книга о шрифтах
• Книга издана в СПб в 1994 г. Ее автор — один из основных (может быть, самый основной) разработчиков программы FontLab.
• Уж он-то знает про шрифты.• ISBN 5-85237-015-0• УДК 681.3.06