Czcionka PostScriptowa (zarówno Type1/ATM jak i Type3) jest
skomplikowaną strukturą danych która zawiera (między innymi) dwie
ważne tablice. Po pierwsze, tablicę znaków (glyph table),
indeksowaną nazwami znaków (takimi jak A
lub
space
), i zawierającą informacje potrzebną do rysowania
pojedyńczych znaków. Po drugie, wektor kodujący (encoding
vector), indeksowany małymi (ośmiobitowymi) liczbami całkowitymi,
i zawierający nazwy znaków.
W uproszczeniu, gdy system ma wydrukować znak o kodzie n.p. 65,
najpierw wyszukuje odpowiedniej pozycji w wektorze kodującym, gdzie
znajduje nazwę odpowiedniego znaku (w tym przypadku, prawdopodobnie
A
); uzbrojony tą informacją, wyszukuje odpowiedniej
informacji w tablicy znaków, za pomocą której rysuje znak na
papierze.
Tablica znaków często zawiera więcej znaków niż wektor kodujący. Te dodatkowe znaki nie są dostępne bez przekodowania czcionki, czyli zmiany wektora kodującego. (Nie jest to czysta prawda, ale na razie wystarczy).
Czcionka z polskimi znakami, to po prostu czcionka której tabela znaków (ale nie koniecznie wektor kodujący) zawiera, poza znakami ASCII, następujące znaki:
Czcionki z polskimi znakami najczęściej zawierają wszystkie znaki z ISO-8859-2 (ISO Latin-2, Eastern Europe).
O ile wiem, istnieje tylko jedna darmowa czcionka dobrej jakości z
ogonkami; jest to
IBM
Courier,
którą IBM zaofiarował (zaofiarowała? zaofiarowało?) X consortium.
Jest ona zawarta w każdej dystrybucji X11R6, w plikach
X11R6/fonts/Type1/cour*.pfa
, oraz w dystrybucji czcionek
dla GhostScripta w plikach ncr*.pfa
Inną, niestety komercyjną (czytaj: drogą), czcionką z polskimi znakami jest Bigelow & Holmes Lucida Casual, dostępna jako część `Lucida Bright Expert Set'.
Times
, ale jest dodanie danych
do dowolnej czcionki nie jest trudne. Dodatkowe informacje możesz
znaleźć tutaj.
Większość programów umie drukować tylko w
AdobeStandardEncoding
lub
ISOLatin1Encoding
. Interesującymi wyjątkami są TeX
(który nawet stworzy znaki których nie ma w tablicy znaków czcionki)
i GNU Genscript.
(Dodatki do listy programów prawidłowo przekodowujących czcionki bardzo mile widziane).
Przekodowanie czcionki nie jest trudne. Trzeba najpierw zdefiniować poprawny wektor kodujący:
/MyEncoding
[
/.notdef /.notdef ...
...
/space /exclam ...
...
] def
Potem trzeba zdefiniować kopię naszej czcionki z nowym zakodowaniem:
/Courier findfont
dup length dict begin
{1 index /FID ne {def} {pop pop} ifelse} forall
/Encoding ISOLatin2Encoding def currentdict end
/Courier-L2 exch definefont pop
Nowa czcionka jest gotowa do użytku:
/Courier-L2 findfont 12 scalefont setfont
72 72 moveto
(Czy pami\352tasz jak ze mn\261 ta\361czy\263a\266 walca) show
showpage.
Oto cały przykład. Powinien działać na każdej drukarce, o ile czcionki Courier i Courier-Italic mają polskie znaki. W odwrotnym przypadku, wystarczy dodać czcionki IBM Courier i Courier-Italic do pliku źródłowego tam, gdzie jest to zaznaczone.
Juliusz Chroboczek