Hlavní navigace

Grafika v UNIXu - postscriptové omyly a problémy s písmy

Stanislav Brabec

Dnešní článek se zabývá hned dvěma tématy: začneme malým opravníkem obecně rozšířených omylů o PostScriptu a PDF, zbytek článku pak budeme věnovat problémům s postscriptovými písmy a jejich počešťováním.

Časté omyly o PostScriptu

PDF dává méně kvalitní výstup

Je a není to pravda. Pro většinu grafiky to pravda není a PDF dává stejně kvalitní výstup. Výjimkou je několik konstrukcí, které jsou možné v PostScriptu, ale nikoliv v PDF. Jsou to např.: jakékoliv postscriptové větvení v závislosti na vlastnostech zařízení (např. bitmapové písmo vložené ve více velikostech nebo obrázek vložený zároveň barevně i černobíle – PDF nemá programátorské konstrukce), speciální písma, konstrukce nad nimi a nad cestami (cesta kolem písma je v PostScriptu poměrně jednoduchá programátorská operace, ale v PDF dostaneme obrovský soubor).

Dalším problémem je ztrátová komprese u některých převodníků z PostScriptu do PDF. Při dekompresi a opětné kompresi může dojít ke ztrátě kvality. Kvalita JPEG komprese je ovšem ve většině převodníků nastavitelná.

Poznámka: Na podobné problémy narazíte i při převodu mezi SVG a PostScriptem. Některé konstrukce nejsou snadno převoditelné – například průhlednost v SVG, ale většina ano.

Znalost PostScriptu mi v dnešní době k ničemu nebude

Asi málokoho napadne připravovat knihu přímo v PostScriptu (i když i na to existují nástroje, jako např. Quikscript).

Ale pochopení PostScriptu nám umožní provádět triky, kdy „neřešitelný“ problém vyřeší jednořádkový postscriptový program. Několik takových triků si ukážeme v příštím pokračování.

PostScript je „ukecaný“ jazyk

Tuto pověst získal zčásti právem v době Level 1, kdy bitové mapy převedené do PostScriptu nabývaly obludných rozměrů. V Level 2 se však objevily filtry, které umožňují posílat data dokonce binárně, takže soubory pak narostou pouze o několik set bytů hlavičky. Přesto tato pověst o PostScriptu zůstala. Mohou za to komerční aplikace a jejich hlavičkové soubory. Kód pro nakreslení obrázku telefonního sluchátka z minulého dílu je dlouhý 475 bytů, nutné strukturované komentáře mají 190 bytů. Soubor byl ručně „vytažen“ ze 132 kB dlouhého EPS souboru, který výtvarník připravil v komerčním vektorovém editoru. 99,5 % informací tedy tvořil zbytečný balast.

Ghostscript a Stuffit jsou od stejné firmy

Tento omyl je široce rozšířený, nicméně na Ghostscriptu pracuje malá kalifornská firma Aladdin Enterprises, která nemá nic společného s firmou Aladdin Systems, tvořící software pro Macintosh (a dnes i Linux).


Závady písem a znakových sad

Protože starší verze PostScriptu byla vytvářena ještě v dobách „železné opony“, nebyla do ní zahrnuta podpora východní Evropy. Když se po jejím pádu firmy vrhly na lokalizaci západních písem, panoval v názvech chaos. Zatímco některé firmy se alespoň snažily znaky správně pojmenovat (což ovšem mělo tenkrát neblahé důsledky, neboť ve spoustě programů písma fungovala jen tehdy, tvářila-li se jako západoevropská), jiné se spokojily s tím, že na dané platformě bude mít znaková sada „správné“ kódování, a pranic je nezajímalo, že např. písmenu ř tak připadne „příhodný“ název oslash. Tato písma lze dnes, bez ohledu na jejich cenu a typografickou kvalitu, považovat za zmetky! Jsou v některých dobře lokalizovaných aplikacích nepoužitelná, v jiných pak jen po vynaložení značného úsilí.

Podrobíme-li písma na našem trhu ostré kontrole typografické i technické kvality, bohužel je nutné konstatovat, že zatím převládají zmetky!

Závadná diakritika

I „pouhé“ počeštění písma vyžaduje jistý grafický talent. Doplní-li výrobce malebné (nebo i ošklivé) písmo háčkem z písma Times, získal za málo práce nepoužitelný zmetek! Ještě častěji je postižen kroužek nad ů a měkčení u ďĽľť (zřejmě je pohodlné nahradit je znakem stupně a uvozovkou). Za otřesné pak lze považovat použití háčku nad ďť!

zmetkovník 1
Několik zmetků v diakritice: Zcela nevhodná diakritika, znak stupně místo kroužku, uvozovka místo měkčení, háček nad „d“.

Špatné podřezávání (kerning)

Špatné podřezávání je slabým místem mnoha původních znakových sad. Je ovšem třeba dodat – pokud nějaké vůbec mají. Co teprve po lokalizaci! Někteří výrobci při tvorbě podřezávacích párů zcela vynechali akcentovaná písmena, jiní jen mechanicky zkopírovali páry z neakcentovaných. Typicky jsou problémy dvojic viditelné u , , ale i u mnoha dalších.

zmetkovník 2
Několik zmetků v podřezávání: Chybějící pár pro „VÁ“ je zcela nepřijatelný, mechanicky zkopírované (navíc ještě příliš těsné) podříznutí dvojice „Tě“ je též nevhodné. Také dvojice „ďa“ by měla být podříznutá. Detailisté budou navíc chtít, aby hodnota podříznutí pro dvojici „ďá“ byla mírně vyšší než pro „ďa“.

Chybějící znaky

Budeme postupovat podle chybějící množiny znaků. Obecně platí – nejpohodlnější metodou je změna názvů v kódovém vektoru, jedinou čistou verzí je pak přejmenování písmen v dekryptovaném písmu, ještě než si písmo nainstalujeme.

Chybí svaznice fi, fl, ffiffl

Při lokalizaci písem tyto znaky některým tvůrcům zřejmě překážely. Jak jinak lze vysvětlit, že v západní verzi písma tyto svaznice jsou, ale ve východní chybí. Zřejmě tvůrci nic nevědí o tom, že písmo může obsahovat i více než 256 znaků.

Řešení: Máme-li k dispozici původní písmo, můžeme vytvořit vitruální písmo (pokud to program dovoluje – např. moderní TEXové distribuce). Jinak nám nezbyde, než v dekryptované verzi písma tato písmena nakopírovat (to nemusí být tak triviální operace, vzhledem k možné kolizi podprogramů u operátoru callsubr).

Chybí ^ť

V době tvorby starších písem nebylo jasné, jak budou tato písmena pojmenována. Někteří zvolili xquoteright, neboť znak měkčení se nejvíce podobá pravé jednoduché anglické uvozovce, jiní xcaron, neboť měkčení má význam háčku. Adobe v roce 1997 ve verzi LL3 určila za správný název xcaron. Nové aplikace tedy tyto znaky nezobrazí.

Řešení: Je možné upravit jména v definici kódování a kódovém vektoru pro taková písma. Mnohé programy to však neumožňují.

V tomto případě je program pro čisté řešení – dekryptování, opravu a opětovné zakryptování natolik jednoduchý, že jej zde vypíšu na ukázku celý.

Upozorňuji, že dekryptováním a opravováním znakových sad, byť legálně koupených, se můžete dostat do rozporu s jejich licenčními ujednáními! Chystáte-li se navštívit USA, doporučuji projednat s právníkem, zda vám nehrozí 25 let vězení.

#! /bin/sh
# opravíme písma
for i in *.pfb ; do
  t1disasm $i | \
    sed 's/\([dtlL]\)quoteright/\1caron/g' | \
    t1asm >$i~
  mv $i~ $i
done
# opravíme metriky
for i in *.afm ; do
  sed <$i 's/\([dtlL]\)quoteright/\1caron/g' >$i~
  mv $i~ $i
done

Chybí ŽŠŤžšť

Klasika. Písmo je v kódování CP1250, počítač v ISO-8859–2 a písmo nikdo nepřekódoval.

Řešení: Písmo lze celkem jednoduše překódovat.

Např. v TEXu (ve formátu cstex) stačí do souboru psfonts.map napsat: název_pro_TeX jméno_písma „XL2encoding ReEncodeFont“ <xl2.enc> písmo.pfb. V jiných programech lze překódovat pomocí vložené hlavičky (inspirovat se lze v hlavičkách TEXu).

Pracujeme-li v TEXu, nesmíme zapomenout na překódování metriky příkazem afm2tfm nebo LaTEXovou cestou přes fontinst.

Chybí Ůů a všechna písmena s háčky, příp. jsou znaky náhodně umístěné

Pokud se jedná o písmo pro východní Evropu, znaky možná obsahuje, ale pod úplně jinými jmény. O tomto případu jsme se již zmínili výše.

Řešení: Je nutné dát písmu správné kódování. Buď v externím kódovém vektoru, nebo v dekryptovaném písmu. V prvním případě vytvoříme kódový vektor, který bude obsahovat názvy „zprzněné“ stejně jako naše písmo, v druhém případě naopak „zprzněné“ názvy opravíme. Před několika lety jsem napsal jednoduchý skript (používající kódové vektory z cstocs), který tuto nepříjemnou práci poněkud usnadní, známe-li kódování, v jakém písmo je, i kódování, za něž se vydává.

Chybí Ůů a všechna písmena s háčky kromě ŽŠžš

PostScript Level 1 a Level 2 tato písma nedefinoval. Je tedy pravděpodobné, že písmo východní znaky neobsahuje.

Řešení: Zapracovat na písmu a diakritiku doplnit. Ve většině písem bývají háček, čárka i kroužek k dispozici, měkčení se vyrobí nejsnadněji zmenšením či úpravou znaku quoteright, maďarská dvojčárka zdvojením čárky, polský ogonek se dokreslí…

Vše je možné provést na úrovni postscriptového písma (např. programem t1accent od Petra Olšáka), v popisu složených znaků v souboru AFM (např. programem t1csfonts též od Petra Olšáka) nebo na úrovni virtuálního písma (např. v TEXu). Existuje ještě pro typografii nevhodná možnost počeštění až na úrovni postscriptového souboru, o které jsme se zmínili v druhém dílu našeho seriálu, nebo naopak na úrovni programu (například v TEXu použití primitivu \accent). Zajímavý článek na toto téma od Petra Macháčka vyšel v čísle 3–4/98 zpravodaje sdružení CSTUG.

I když mechanickou práci za nás mohou odvést programy, k dokončení úprav je třeba estetické cítění.

Našli jste v článku chybu?

28. 7. 2007 17:19

Teo (neregistrovaný)
Mám problém s funkcí setoverprint v gs (8.15.2). Po nastavení setoverprint na true se nezobrazí nic:
true setoverprint
/Courier findfont 144 scalefont setfont
1 0 0 0 setcmykcolor 50 200 moveto (Q) show
0 1 0 0 setcmykcolor 50 200 moveto (E) show
0 0 1 0 setcmykcolor 50 200 moveto (U) show
0 0 0 1 setcmykcolor 50 200 moveto (.) show
showpage
Když to ale převedu do PDF (ps2pdf), tak se to zobrazí. Co s tím? Díky za rady.

7. 12. 2006 23:42

makadam (neregistrovaný)
No pravda nejsem z oboru, a svaznice je asi pro nekoho
desivy vyraz, ale vezte ze v lese je to dost bezny oznaceni pro cestu, ktera se svazuje do udoli ci lepe po ktere se svazi drivi po svahu dolu, cca 2% naroda tj. lidi co meli profesne codi cineni s lesem o tomto maji poneti, ale fakt je to z jinyho sveta, mejte se.
Vitalia.cz: Vychytané vály a válečky na vánoční cukroví

Vychytané vály a válečky na vánoční cukroví

Měšec.cz: Komu musí od ledna zvýšit mzdu?

Komu musí od ledna zvýšit mzdu?

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

DigiZone.cz: ČRo rozšiřuje DAB do Berouna

ČRo rozšiřuje DAB do Berouna

Vitalia.cz: Pamlsková vyhláška bude platit jen na základkách

Pamlsková vyhláška bude platit jen na základkách

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Vitalia.cz: Potvrzeno: Pobyt v lese je skvělý na imunitu

Potvrzeno: Pobyt v lese je skvělý na imunitu

Podnikatel.cz: Snížení DPH na 15 % se netýká všech

Snížení DPH na 15 % se netýká všech

Vitalia.cz: Jmenuje se Janina a žije bez cukru

Jmenuje se Janina a žije bez cukru

Vitalia.cz: Když přijdete o oko, přijdete na rok o řidičák

Když přijdete o oko, přijdete na rok o řidičák

Měšec.cz: Jak vymáhat výživné zadarmo?

Jak vymáhat výživné zadarmo?

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Vitalia.cz: Mondelez stahuje rizikovou čokoládu Milka

Mondelez stahuje rizikovou čokoládu Milka

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Root.cz: Certifikáty zadarmo jsou horší než za peníze?

Certifikáty zadarmo jsou horší než za peníze?

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

120na80.cz: Horní cesty dýchací. Zkuste fytofarmaka

Horní cesty dýchací. Zkuste fytofarmaka

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?