Archive for Srpen, 2010

TeX: Pevný řádkový rejstřík 2

Chceme-li připravit sazbu pro oboustranný tisk, musíme přizpůsobit sazební obrazec tak, aby se na obou stranách listu kryl (aby na sebe prosvítal) – tomu se říká pevný stránkový rejstřík. Pevný stránkový rejstřík najdeme v knihách a kvalitnějších tiskovinách (velice vzácně v diplomových pracích studentů FELu).

Nejpreciznější sazba vyžaduje i pevný řádkový rejstřík, což je věc, kterou dnes nalezneme už jen u vybrané beletrie. Pevný řádkový rejstřík znamená, že na sebe prosívatají všechna účaří jednotlivých řádek textu (laicky řečeno se všechny řádky stoprocentně a bezchybně překrývají). Ve Wordu to nelze a ani v TeXu to není zcela triviální záležitost. V prvé řadě si musíte vzít kalkulačku a spočítat rozměry sazebního obrazce, resp. jeho výšku. Ta totiž musí být celočíselným násobkem vzáleností účaří (\baselineskip).

TeX je velice chytrý program, ale někdy je až moc chytrý. Snaží se narvat pružné mezery (glue) všude, kam to jde, a když se mu něco nezdá dostatečně esteticky správně, mezery natahuje a smršťuje. Co se týče horizontálních pružných mezer, bez těch bychom nebyli schopni správně vysázet jediný odstavec, ale ty vertikální? V našem případě bychom je raději neměli, protože s nimi nikdy nedokážeme pevného řádkového rejstříku docílit. Proč?

Pokud TeX vyhodnotí, že na sobě dvě řádky sedí až moc těsně (zasaují do sebe o \lineskiplimit), vloží mezi ně pružnou mezeru velikosti \lineskip. To se stane například, když máte relativně malý \baselineskip a do některého řádku vložíte vzorec obsahující odmocinu nebo itegrál (nebo obecně jakýkoliv znak, který je vyšší než vzdálenost účaří). To nechceme. Nastavíme tedy \lineskip=0dd.

Dále nám dělají problémy pružné mezery mezi odstavci (a tedy i mezi odstavci a nadpisy či jinými boxy). Zbavíme se jich podobným způsobem. Nastavíme \parskip=0dd.

Na začátku stránky, těsně za \voffset (Eplain: \topmargin) a těsně před začátkem prvního odstavce existuje další pružná mezera, která se používá k doladění. My ale máme všechno přesně vypočtené, takže žadné doladění nepotřeujeme, nastavíme tedy tuto mezeru na násobek \baselineskip, třeba \topskip=\baselineskip.

No a na konec TeXu řekneme příkazem \raggedbottom, aby všechny stránky vysázel v přesně takové velikosti, jaká je výška veškerého texu na stránce a nevkládal na konec stránky žádný dodatečný prostor.

Když jsou všechni tito „pomocníci“ vypnuti, musíte si již sami ohlídat, aby výška veškerého materiálu na stránce jiného než základního textu, byla násobkem \baselineskip. Například pokud je \baselineskip=12dd, potom správná cesta jak vysázet nadpis velikosti 22dd (nebo podobné) je takováto:

\vskip24dd\noindent{\twentytwo Nadpis\vskip12dd}\par

Jinak… jinak se stane něco strašného.

Locksley 3

Když uvidíte jablko, jak si v poklidu visí na větvi, co vás napadne? Já jsem týdny čekal, až bude tak velké, abych ho mohl využít ke svému ohavnému plánu. Tohle jablko se nikdy nestane ovocem do Jogobelly :(.

Moje milá se věru trochu bála o svůj život, když nebohé ovoce natáčela, ale naštěstí jsem se, navzdory mé špatné kondici, celkem trefoval, takže se vše obešlo bez krve.

Se šípy, které na videu můžete vidět, nestřílím obvykle. Tohle jsou dva odlehčené karbonové šípy s malým průměrem dříku a těžkým hrotem, které jsem si objednal na zkoušku. Jak vidíte, jeden z nich byl první, který penetroval dvojitou matraci, která mi zatím úspěšně slouží jako terčovnice.

XeTeX, Stormtype – krok zpět a kupředu zároveň 7

Motivační prolog. Ve formátech TeXu nalézám tak trochu analogii s životem. Kdo by se dnes zajímal o to, jak se dělá například chleba, a pokusil se na základě toho vytvořit takový recept, jehož výsledkem by byl chleba, který by nejlépe vyhovoval jeho osobním potřebám jak chuťově, tak rozměrově? Moc lidí ne. Ve dnešní době zabírá snaha o precisnost zkrátka příliš mnoho času na to, aby se vyplatila, a tak lidé raději vytočí číslo a nechají si dovézt normalizovaný nakrájený chleba v igelitovém obalu. Takový chleba je ale mnohdy zatuchlý, je na něm moc kmínu a chutná jako mazlavý válečný komisárek.

Stejně je to s Plainem a LaTeXem. Proč by se lidé složitě a dlouho učili, jak docílit takové a takové sazby za pomoci Plainu a primitivů TeXu, když mohou jednoduše použít jakési záhadné LaTeXové makro \magic{make stuff work}, aby docílili přibližně toho, co chtěli? Pro běžného uživatele, který nemá čas, náladu ani předpoklady stát se nadšeným sazečem, TeXovým wizardem, skutečně nemá smysl používat Plain. Takových uživatelů je většina – bez LaTeXu by v současné době o TeXu nebylo pomalu ani vidu ani slechu.

JENŽE. Začnete-li s plainem, budete-li se s ním den co den prát, naučíte se kromě výroby prvotřídího pečiva i obsluhovat pec, sklízet a mlátit pšenici… naučíte se pracovat s těmi nejzákladnějšími nástroji sazby v TeXu, proniknete do zákulisí formátů fontů, komunikace jednotlivých součástí celého procesu sazby. Pokud si zkušenostmi osvojíte tyto základy, budete potom schopni vytvořit si svůj vlastní formát, který bude sedět na míru přesně vašim potřebám… a třeba se jednou stane tak slavným jako je LaTeX.

A nyní k věci.

Je tomu teprve krátký čas, co jsem objevil Střešovickou písmolijnu (Storm type foundry). Něco tak přelomového jsem objevil naposledy v době, kdy jsem do vyhledávače poprvé zadal „TeX“. Stormtype produkuje neuvěřitelně kvalitní a neobyčejně nádherné znakové sady obsahující správné české akcenty, a to není jediná věc, která mě na Stormtype tak zaujala. Zaujal mě především vztah majitele písmolijny k historii a elegantní způsob, jakým se z ní přesunuje do současnosti a zase zpět. Prolíná moderní technologii s velmi starými aspekty písma a tím je oživuje… přivádí zpět k existenci. Za to mu patří veškerý můj obdiv. Pro příklad uvedu odkaz na vzorník písma Baskerville 10 Pro. Toto písmo obsahuje rozšířenou kolekci ligatur. Obsahuje nejen dnes (nelze říct běžně) používané ligatury jako fi, fl a ffl, ale také „discretionary ligatures“ sp, st, ct, Th a Ti, a další již zcela vzácné ligatury.

Což je výborné! Přivádět téměř zapomenuté a hodnotné části historie zpět do současnosti, kterou zpevní svojí kvalitou. S tím ale TeX nepočítal. Ani csTeX, ani LaTeX. Všechny varianty totiž využívají původní Knuthův osmibitový formát písma – TeX font metrics ve spojení s formátem Adobe Type1. Tento formát sice dokáže za jistých okolností pojmout „nadupanou“ znakovou sadu (jako třeba onen Baskerville 10), jak ukázal RNDr. Petr Olšák, ale již nedokáže efektivně využít všechny její možnosti (například plynulé přepínání alternativních znaků a znakových sad, vypínání a zapínání historických a vzácných ligatur).

Na efektivní využití profesionálních znakových sad je doslova dělaný formát Microsoft (Adobe) OpenType. Je samozřejmě plně unicodový, a navíc obsahuje „OpenType Features“, což jsou právě ony „přepínače“, o kterých jsem se zmiňoval v minulém odstavci.

K čemu to ale je, když TeX pracuje s TFM a T1, a implementovat podporu pro Opentype Features by znamenalo úpravu zdrojových kódů? Podobnou otázku si před lety položil [jméno:)] a vytvořil k ní svoji vlastní odpověď – XeTeX [zýtech]. TeX s předefinovaným primitivem \font (a množstvím dalších věcí), který umí pracovat s formátem (původně) AAT (Apple Advanced Typography) a OpenType. Pro mě je důležité, že umí pracovat s OpenType features, a že celý formát Plain je v něm beze ztráty zachován.

Přechod na znakové sady ze Střešovic tedy bude nádherně plynulý.