29
Лекция 10 Текст и шрифты

Лекция 10

  • Upload
    knoton

  • View
    68

  • Download
    2

Embed Size (px)

DESCRIPTION

Лекция 10. Текст и шрифты. Текст и шрифт. - PowerPoint PPT Presentation

Citation preview

Page 1: Лекция  10

Лекция 10

Текст и шрифты

Page 2: Лекция  10

Текст и шрифт• Печать текстов – это главная задача любой печатающей системы.

Прежде чем печатать текст в ПостСкрипте мы должны установить шрифт. Для этого нужно выполнить несколько действий. Начнем с этих действий, еще не объяснив даже, что такое шрифт (а по-английски font)

• Во-первых, нужно найти шрифт по его имени или имени файла, в котором он содержится

• /Times-Roman findfont• (times.pfb) findfont• Первый вариант использования – основной, он относится к

шрифтам, которые известны мащине.• Второй работает не всегда, но в GS работает.

Page 3: Лекция  10

Шкалирование и установка шрифта

• Найденный шрифт можно запомнить для будущего использования. • /TR /Times-Roman findfont def• Но это только для того, чтобы больше шрифт не искать. Для

использования с ним нужно выполнить еще две операции.• Шкалирование снимает со стека шрифт и размер и определяет

новый шрифт нужного размера. Например,• /TR 12 scalefont• /Helvetica findfont 10 scalefont• Исходный шрифт имеет размер 1000.• Найденный или шкалированный шрифт можно установить командой

setfont• /TR 12 scalefont setfont

Page 4: Лекция  10

Использование установленного шрифта

• Основная «печатающая» команда называется show. Она требует, чтобы был установлен шрифт, чтобы была определена текущая точка и чтобы в стеке лежала печатаемая строка.

• Печатаемый текст пишется в круглых скобках. Например,• (Мы хотим сказать) show• (иногда текст (его часть) содержит скобки) show• (если скобки парные \(сбалансированные) show• (вхождения\), то это не страшно) show • Специальные знаки в строках• \ddd – символ, задаваемый восьмеричным номером• \\ - backslash• После выполнения команды show текущая точка определена и

находится за напечатанным текстом.

Page 5: Лекция  10

Ширина строки и ее использование

• При выравнивании текста нужно использовать ширину печатаемой строки (которая, конечно, зависит от параметров шрифта). Команда stringwidth снимает со стека строку и кладет в стек координаты x и y ширины (обычно y=0). Вот примеры использования ширины

• \rshow{dup stringwidth pop neg hrm show}def• \censhow{dup stringwidth pop –0.5 mul hrm show}

def• Первая из этих процедур печатает текст справа от текущей точки,

а вторая центрует его по текущей точке.

Page 6: Лекция  10

Варианты команды show

• Команда show имеет несколько вариантов, которые разрешают в промежутках между рисованием отдельных символов строки выполнять те или иные действия.

Page 7: Лекция  10

Пример

• Как, например, сделать надпись в форме спирали

Page 8: Лекция  10

Решение

• %!• /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

Page 9: Лекция  10

Объяснение команды kshow

• Аргументами этой команды являются блок действий и печатаемая строка. При печати строки (как в show) между каждыми двумя печатями символов выполняется блок действий

• {-10 rotate 3 0 rmoveto • 0.99 0.99 scale} % Это блок действий• text % это строка• kshow• Другие команды• ashow, cshow, xshow, yshow, xyshow, widthshow,

awidthshow

Page 10: Лекция  10

Контур печатаемой строки

• Для некоторых целей может захотеться получить контур печатаемой строки. Например, для того, чтобы залить буквы одним цветом или закрасить другим, или для того, чтобы использовать контур для вырезания части рисунка.

• Такие возможности предоставляет команды charpath. Она использует кроме строки еще логический параметр, определяющий дальнейшее использование пути.

• string bool charpath –• Если логическое значение – истина, то путь годится для заливки

или вырезания, а если ложь, то только для обвода.

Page 11: Лекция  10

Пример (из поздравления проф. В.Н.Малоземову)

Page 12: Лекция  10

Как программировалась буквица• /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

Page 13: Лекция  10

Шрифты

• Шрифты бывают фирменные (в файлах) и самодельные. Фирменные шрифты имеют расширения

• pfb Postscript Font Binary• pfa Postscript Font Alphabetic. • Самодельный шрифт описывается прямо в программе. На

самодельных шрифтах хорошо показывать, как шрифт устроен. • Я увидел как-то шрифт, изготовленный для штрихового кода «3

из 9» и по аналогии с ним сделал шрифт Брайля, который используют слепые. Посмотрим, как он устроен.

Page 14: Лекция  10

Шрифт Брайля (что это такое)

• Шрифт Брайля предназначен для слепых. Каждый знак кодируется, говоря по-нашему, шестеркой битов, которые занумерованы от 1 до 6 вот так:

• 1 4• 2 5• 3 6• Слепые кодируют единицы выпуклыми точками и различают их

наощупь. На следующем слайде показан полностью латинский алфавит.

• Шрифт, которым набран этот алфавит, мы и хотим показать.

Page 15: Лекция  10

Шрифт Брайля (алфавит)

Page 16: Лекция  10

Шрифт Брайля (общая структура описания)• Описание состоит из задания для создаваемого шрифта

специального информационного объекта — словаря и его заполнения. Словарь вводится так 

• /braille 10 dict def•  Слово dict создает словарь, а 10 — это его первоначальная

емкость. В каких единицах? В «элементах словаря», а как они определяются, будет видно при заполнении. Заполнение происходит внутри «операторных скобок»

• braille begin• . . . . .• end• В основном заполнение состоит из обычных описаний

обязательных параметров шрифта.

Page 17: Лекция  10

Шрифт Брайля (обязательные параметры)• /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• Процедура, исполняемая при печати каждого символа данного

шрифта.

Page 18: Лекция  10

Шрифт Брайля (заполнение массива)

• Массив заполняется в два приема. Сначала во все его клеточки пишется невозможный символ .notdef (это делается обычным циклом),

• 0 1 255 {Encoding exch /.notdef put} for• а затем каждый нужный символ заполняется отдельно, например,• Encoding 98 /b put• Encoding 44 /comma put• (так в элемент 98, а это код ASCII буквы b, помещается ключ /b,

а в элемент 44 помещается ключ /comma, чтобы рисовать запятую).

 

Page 19: Лекция  10

Шрифт Брайля (заполнение словаря)

• Словарь /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. 

Page 20: Лекция  10

Шрифт Брайля (вспомогательная процедура 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 — троекратное повторение действия, которое

само состоит из трех шагов: рисование кружка, в зависимости от числа в стеке закраска его или обводка, сдвиг вверх.

Page 21: Лекция  10

Шрифт Брайля (процедура рисования символа)

• /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

Page 22: Лекция  10

Шрифт Брайля (использование)

• /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

Page 23: Лекция  10

Включение шрифтов в систему

• В системе 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) ;

Page 24: Лекция  10

Образцы использования шрифтов (1)

• Вот примеры упомянутых выше шрифтов• /TimesET

• /Symbol

• /ZapfDingbats

Page 25: Лекция  10

Образцы использования шрифтов (2)

• Вот примеры приведенных нами шрифтов• /American-Uncial

• /Cloister_Black-Light

• /Izhitsa

Page 26: Лекция  10

Образцы использования шрифтов (3)

• Вот примеры приведенных нами шрифтов• /Cyrillic-Narrow

• /Kimberly

• /Osiris

Page 27: Лекция  10

Программа FontLab

Page 28: Лекция  10

Программа FontLab (контроль)

Page 29: Лекция  10

Хорошая книга о шрифтах

• Книга издана в СПб в 1994 г. Ее автор — один из основных (может быть, самый основной) разработчиков программы FontLab.

• Уж он-то знает про шрифты.• ISBN 5-85237-015-0• УДК 681.3.06