Portál AbcLinuxu, 25. dubna 2024 04:17

TeX – 15 (mikrotypografie)

29. 4. 2014 | Petr Olšák
Články - TeX – 15 (mikrotypografie)  

Seriál o TeXu uzavřu povídáním o nepatrnostech. Typografie ctí několik zásad, mezi které patří především zásada nepřekážet mezi informací a čtenářem, tedy jinými slovy čtenáře nerušit. Součástí toho je také respektování starých tradic. Dá se říci, že typografie je na této úrovni dobře udělaná, pokud si jí čtenář nevšimne. Zmíním tedy především takové nepatrnosti, které nejlépe vypadají, když nejsou vidět.

Obsah

Typografické znaky

link

Existuje několik znaků, které se při sazbě běžně používají, ale nejsou běžně přístupné na klávesnici. Například to, co vidíme na klávesnici jako „vodorovná čárečka nad účařím“ většinou vytvoří spojovník (-). Ten se používá pro slovní spojení typu „slovník česko-anglický“ nebo pro dělení slov na koncích řádků. Kromě toho se v sazbě používá pomlčka na půlčtverčík (–). Ta se používá například ve významu od–do. Existuje také pomlčka na celý čtverčík (—) a konečně je někdy potřeba použít znak mínus (−), který v daném fontu nemusí mít nic společného s žádnými předchozími pomlčkami. Jeho zásada je taková, že musí vypadat zcela stejně jako znak plus jen s tím rozdílem, že mu chybí svislý tah.

Jak se k tomu problému staví lidé, kteří na klávesnici najdou jedinou „vodorovnou čárečku nad účařím“? Často ku škodě věci se na to vybodnou. Jak se k tomu postavil Knuth při tvorbě TeXu? Navrhnul k dosažení pomlček prosté zdvojování a ztrojování toho, co lze napsat z klávesnice a co je zaneseno do ASCII kódování. Tedy -- vytvoří pomlčku na půlčtverčík a --- pomlčku na čtverčík. Nikdo se nemůže vymlouvat na obtížnost psaní, toto se dá skutečně napsat snadno. I v ASCII textech je navíc takové vyjádření pomlčky dostatečně jasné a názorné a dá se používat například v emailech. Knuthova implementace tohoto jevu pomocí fontových ligatur už není zcela ideální, protože pokud natáhneme font, který tuto specialitu nectí, tak to prostě nefunguje. Je-li příslušný TeX vybaven encTeXem, je možné tuto vlastnost udělat na úrovni input procesoru takto:

\mubyte \endash --\endmubyte
\chardef\endash=123

V tomto příkladu se ovšem setkáváme s dalším problémem: pomlčka (–) je v různě kódovaných fontech umístěna různě. Původně (podle Knutha) na pozici 123, později v T1 kódování na pozici 21 a konečně v unikódových fontech na pozici 8211, tedy U+2013. Pokud TeX umí načíst unikódový font, tak zase neumí encTeX, takže by bylo potřeba přemluvit input procesor jiným způsobem (například na úrovni lua skriptu). Ve skutečnosti ale XeTeX i luaTeX nabízí možnost při natažení fontu přidat ke skutečným fontovým ligaturám též tzv. TeXové ligatury, tj. proměnu -- na pomlčku atd. Takže s pomlčkami ani tam není problém.

Ve starých antikvárních tiscích najdete pomlčku se šířkou někde mezi současnou pomlčkou na půlčtverčík a čtverčík. Má šířku zhruba tři čtvrtiny čtverčíku. To ve fontech nenajdeme, protože americká sazba to nezná a digitální typografie je k nám zpětně importována z Ameriky. Chcete-li ctít tyto tradice, je potřeba si tu pomlčku vytvořit. Následuje ukázka dvou možností, jak na to jít:

\mubyte \enndash --\endmubyte
\chardef\endash=123
\def\enndash{\endash\kern-.25em\endash}
nebo:
\mubyte \enndash --\endmubyte
\def\enndash{\vrule height .28em depth-.255em width.75em\relax}

Je taky možné vychytat nedbalost autorů při psaní pomlček tak, že vyhledáme encTeXem výskyty ASCII znaku - s mezerami po obou stranách a nahradíme pomlčkou. Podobně je možné zapracovat Knuthovu myšlenku snadného psaní pomlček a anglických uvozovek také pro české uvozovky. Budeme je psát pomocí dvou čárek (,,) a dvou obrácených apostrofů (‘‘).

\mubyte\enndashspaces\space\space-\space\endmubyte
\def\enndash{\vrule height .28em depth-.255em width.75em\relax}
\def\enndashspaces{\ifmmode-\else~\enndash\space\fi}
\mubyte\clqq,,\endmubyte

\mubyte\crqq‘‘\endmubyte

Tady je ,,zkouška‘‘ textu - uvidíte, co to udělá.

V kódu makra jste si mohli všimnout, že pokud najdeme znak - v matematickém módu, necháme ho na pokoji a TeX vysází mínus. Jinak vysázíme pomlčku.

O tom, kdy se píše která pomlčka a na které další znaky dát při sazbě pozor, pojednává velice pěkně webová stránka typografa Martina Peciny. Dozvíte se tam i základní typografické pojmy, jako například co je čtverčík (v sekci písmo/stupeň písma). Dříve se takovými věcmi zabývali jen sazeči, kteří na to měli normy a ovládali řemeslo. Dnes to patří k základnímu vzdělání podobně, jako schopnost napsat správně tvrdé nebo měkké i/y. Dnes totiž na počítači vytváří sazbu téměř kdokoli.

Mezery

link

Mezera mezi slovy je určena třemi nezávislými parametry:

Základní šířku běžné mezislovní mezery a její ochotu roztažitelnosti a stlačitelnosti stanoví výtvarník fontu. Základní šířka bývá kolem třetiny čtverčíku. Kromě běžných mezer se na některých místech doporučuje dávat různě zúžené mezery (například ve zkratce s. r. o. nebo mezi jednotkou a číslem 100 km). Další příklady uvádí Martin Pecina v souvislosti s trojtečkou.

V TeXu jsou parametry mezislovní mezery (základní šířka, ochota roztažitelnosti a stlačitelnosti) uloženy v metrice fontu. Ochota mezery se zlomit je „normální“, v TeXu je to označeno penaltou 0. Kromě toho lze před každou mezeru předřadit hodnotu penalty v rozsahu od -10000 (zlom se provede za každých okolností) po 10000 (úplný zákaz zlomu). Ochotu roztažitelnosti a stlačitelnosti lze nastavit příkazem \hskip pomocí parametrů plusminus. Zcela určená mezera v TeXu tedy vypadá takto:

\penalty <penalta> \hskip <základní velikost> plus <roztažení> minus <stlačení>
například:
\penalty 5000 \hskip 2em plus 1em minus1.5em

Příklad ukazuje mezeru velikosti dvou čtverčíků s vysokou neochotou se zlomit (penalta 5000) a s možností se roztáhnout na (zhruba) tři čtverčíky a stlačit na půl čtverčíku.

Pro různé případy si můžete napsat makra mezer různých vlastností jen za použití příkazů \penalty\hskip. Klasická nezlomitelná mezera má v TeXu přidělen znak vlnka a je definována takto:

\catcode‘\~=13 \def~{\penalty 10000 \space}

Přitom \space díky \def\space{ } vyprodukuje běžnou mezislovní mezeru s roztažitelností a stlačitelností tak, jak to určil výtvarník fontu.

Mám pocit, že TeX byl první software, jehož autor si uvědomil nezávislost všech parametrů mezery a správně ji implementoval. S nesprávným spojováním více vlastností mezer do jedné se bohužel potýkáme dodnes. Například momentálně připomínkuji v rámci připomínkového řízení návrh revize normy ČSN 6910 „Úprava dokumentů zpracovaných textovými procesory“. Mají tam uveden pojem „pevná mezera“ jako mezera konstantní šířky a navíc nezlomitelná. Přitom tento pojem mají v příloze propojen s kódem mezery U+00A0, o které se v Unicode tabulce ovšem můžeme dočíst jen to, že je to „nobreaking space“, tedy žádná mezera konstantní šířky! Podrobně jsem jim to vysvětlil a připomínkoval. Odpověď: připomínka se zamítá. Jsou natvrdlí. Jak k tomu přijdou tvůrci softwaru, kteří správně implementují mezeru U+00A0 jako nezlomitelnou pružnou? Dnes se takový software už konečně dá nalézt. Mám na mysli nepříklad ne-microsoftí webové prohlížeče. Konečně tedy vidíme při formátování do bloku za neslabičnými předložkami správně stejně roztažené/stlačené mezery jako ostatní mezery mezi slovy. Ovšem mnoho lidí tam bohužel bude pořád cpát mezery konstantní šířky a tím rušit čtenáře. Takže nerespektují základní zásadu typografie.

V americké sazbě je ještě jedna zvláštnost daná tamější tradicí. Mezery mezi větami mají být větší. Na psacím stroji kdysi bouchli Američané po každé tečce za větou dvakrát do mezerníku. Knuth proto zajistil mezerám za větou ochotnější roztažitelnost než ostatním mezerám. Přidělil kvůli tomu jednotlivým znakům tzv. \sfcode. Podrobněji viz TeXbook naruby, stranu 104. V Evropě naopak měli typografové tendenci mezeru za tečkou zmenšovat, protože pak vizuálně vypadá stejně velká, jako mezera mezislovní. Nakonec se z toho zrodil kompromis, mezeru za tečkou aspoň nezvětšovat. K tomu je třeba nastavit znakům poněkud jiné \sfcode, než implicitní Knuthovo nastavení. To zařídí makro \frenchspacing. Toto makro se spustí v csplainu při přepnutí na české nebo slovenské dělení slov příkazem \chyph nebo \shyph.

Formátování odstavce do bloku

link

Při formátování odstavce do bloku mají pružit mezislovní mezery. V žádném případě není možné měnit rozestup mezi jednotlivými písmeny uvnitř slova. Třebaže některý software na to má prostředky, jednoznačně to čtenáře ruší a je to tedy z typografického hlediska nepřípustné. Rozestupy mezi písmeny uvnitř slov se řídí pravidly metriky, tj. šířkami jednotlivých znaků a tabulkou výjimek s ligaturami a kerningovými páry.

Někdy se při formátování odstavce může stát, že jsou mezery nakupeny pod sebou a vytvářejí tzv. řeky. Ruční sazeči měli za úkol toto hlídat a v případě, kdy k tomu dojde, vyřešit odstavec jinak. TeX tuto situaci nehlídá a neřeší, ovšem za celou dobu mé sazečské praxe jsem nenarazil na případ, kdy by toto měl být problém. Mezery totiž mají v TeXu tendenci se nejen roztahovat, ale i stlačovat, což fenomén řek v podstatě eliminuje.

Někdy se mi stává, že dva řádky pod sebou začínají nebo končí zcela stejným slovem. To taky ruší a není automaticky ošetřeno. Když na to narazím, musím případ vyřešit individuálně.

V pdfTeXu je zanesena možnost snížit velikost roztažení nebo stlačení mezislovních mezer mírnou deformací písma v horizontálním směru jednotlivě na každém řádku. Tato deformace v každém případě musí být čtenářem neviditelná, jinak by to bylo hrubým porušením typografických pravidel. Přitom, když se povede vhodnou deformaci písma najít, zmenší se roztažení mezer a výsledek je daleko lepší. Můžete se podívat na ukázku.

Další vychytávkou je vystrkávání interpunkce na okrajích řádků mimo obdélník, ve kterém je blok odstavce. Obdélník odstavce pak překvapivě působí vizuálně vyrovnaněji. Problém je možné řešit v klasickém TeXu způsobem popsaným v TeXbooku naruby na straně 213. V pdfTeXu jsou na to připraveny také přímo primitivní příkazy \rpcode\lpcode, viz sekci 11.10 v TeXu pro pragmatiky.

Závěr

link

Tímto dílem seriálu bych se chtěl se čtenáři abclinuxu.cz rozloučit. Děkuji všem za přízeň a za pozitivní a vesměs fundované reakce v diskusích pod články. Myslím si, že vzájemné obohacení bylo oboustranné.

Věřím, že se mi aspoň částečně podařilo ukázat, že se TeXem dají dělat překvapivá kouzla. Neznám jiný software, kterým by se dal takto efektivně programovat proces přípravy sazby. Abyste mohli sazbu programovat a mít ji do posledního nanometru pod kontrolou, stačí jediné: umět TeX. Snad ze seriálu vyplynulo, že stojí za to tuto jedinou překážku nějak překonat a začít se TeXem pořádněji zabývat. Budete pak umět třeba takové věci, jaké jsou uvedeny v této ukázce.

Seriál TeX (dílů: 15)

První díl: TeX – 1 (seznamujeme se), poslední díl: TeX – 15 (mikrotypografie).
Předchozí díl: TeX – 14 (spolupracující software)

Další články z této rubriky

Týden na ITBiz: Fotonické čipy ze stolní tiskárny
Týden na ScienceMag.cz: Model Lambda CDM celkem sedí, ale kosmologická konstanta se může měnit
Týden na ITBiz: Vysokoteplotní supravodivá dioda
Týden na ScienceMag.cz: V kvantovém materiálu objevili částici podobnou gravitonu
Týden na ITBiz: Efektivní podnikání se bez edge computingu neobejde

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.