Ogonki a PostScript

Jeżeli interesuje Cię tylko drukowanie z Netscape, zobacz tutaj.

O czcionkach PostScriptowych

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).

Czcionki z polskimi znakami

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'.

Dodawanie ogonków do dowolnej czcionki

Napisałem program do dodawania ogonków do dowolnej czcionki. Narazie dodaje ogonki do rodziny Times, ale jest dodanie danych do dowolnej czcionki nie jest trudne. Dodatkowe informacje możesz znaleźć tutaj.

Programy, które prawidłowo przekodowują czcionki

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).

Poprawne kodowanie czcionek

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