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