Prvnı´ setka´nı´ s TEXem Petr Olsˇa´k
Autor programu TEX je profesor Donald Knuth. TEX je ochranna´ zna´mka American Mathematical Society. Ostatnı´ v manua´lu pouzˇite´ na´zvy programovy´ch produktu˚, firem apod. mohou by´t ochranny´mi zna´mkami nebo registrovany´mi ochranny´mi zna´mkami prˇ´ıslusˇny´ch vlastnı´ku˚.
c RNDr. Petr Olsˇa´k, 1999 Copyright Tento text si mu˚zˇete vytisknout pro vlastnı´ potrˇeby. Je k dispozici spolecˇneˇ s balı´kem CSTEX na ftp://math.feld.cvut.cz/pub/cstex/doc ve zdrojove´m textu (prvni.tex), PostScriptu (prvni.ps) a ve forma´tu PDF (prvni.pdf). Mu˚zˇete jej take´ distribuovat, ale pouze v nezmeˇneˇne´ elektronicke´ podobeˇ.
´ vod U Tento manua´l je koncipova´n jako „prvnı´ sezna´menı´ s programem TEX1 na jeden vecˇer“. Meˇl by umozˇnit zacˇa´tecˇnı´kovi porozumeˇt za´kladnı´m principu˚m TEXu. Manua´l obsahuje uka´zku jednoduche´ho dokumentu, ktery´ by si meˇl cˇtena´rˇ sa´m prˇepsat do sve´ho pocˇ´ıtacˇe a na neˇm TEX vyzkousˇet. Je to dobry´ prvnı´ krok do pestre´ho sveˇta tohoto programu plne´ho zajı´mavy´ch mozˇnostı´. Uka´zka by meˇla te´zˇ naznacˇit uzˇitecˇnost dobre´ho na´vrhu znacˇkova´nı´ vstupnı´ho textu tak, aby byl oddeˇlen obsah dokumentu od jeho formy. Prˇedvedena´ uka´zka take´ ilustruje za´kladnı´ principy rozsˇ´ırˇenı´ TEXu (plain nebo LATEX). Tı´m mu˚zˇe uzˇivatel hned na prvnı´m dokumentu rozhodnout, ktere´ TEXove´ rozsˇ´ırˇenı´ je blizˇsˇ´ı jeho srdci a podle toho vybrat dalsˇ´ı literaturu pro doplnˇujı´cı´ studium. Prˇedpokla´da´me, zˇe cˇtena´rˇ ma´ urcˇite´ du˚vody procˇ pouzˇ´ıt TEX, takzˇe se zde nebudeme zdrzˇovat vy´cˇtem jeho vy´hod, rozepisovat obsˇ´ırneˇ jeho historii a nebudeme polemizovat o uzˇitecˇnosti cˇi neuzˇitecˇnosti da´vkove´ho cˇi interaktivnı´ho syste´mu na prˇ´ıpravu sazby.
TEX a jeho okolı´ TEX je forma´tor. Je to program, ktere´mu prˇedlozˇ´ıme vstupnı´ text dokumentu v „hole´“ textove´ podobeˇ doplneˇny´ textovy´mi znacˇkami, ktere´ vymezujı´ strukturu dokumentu nebo da´vajı´ TEXu pokyny o zpu˚sobu forma´tova´nı´ dokumentu. By´va´ obvykle´ (ale nenı´ to nutne´) pojmenovat tento soubor s pouzˇitı´m prˇ´ıpony .tex, naprˇ´ıklad dokument.tex. Na vy´stupu pak po zpracova´nı´ TEXem dostaneme tzv. dvi soubor2 , ktery´ obsahuje definitivnı´ informace o pouzˇity´ch fontech a o umı´steˇnı´ jednotlivy´ch znaku˚ na stra´nce. Tento soubor ma´ na´zev odvozeny´ od na´zvu vstupnı´ho souboru, ale ma´ prˇ´ıponu .dvi. Lze jej prostrˇednictvı´m vhodne´ho programu prohle´dnout na obrazovce (vidı´me, jak bude dokument skutecˇneˇ vypadat), nebo jej vytisknout na tiska´rneˇ. TEX tedy cˇte na sve´m vstupu soubor s dobrˇe definovanou syntaxı´ jazyka znacˇek a na vy´stupu je rovneˇzˇ soubor s u´plny´m popisem sazby. TEX jako takovy´ je neza´visly´ na operacˇnı´m syste´mu. Vy´voj samotne´ho TEXu je zastaven, takzˇe pro uzˇivatele nehrozı´ nebezpecˇ´ı vzniku dalsˇ´ıch nekompatibilnı´ch verzı´. Dalsˇ´ı programy „okolo TEXu“ tvorˇ´ı dohromady tzv. implementaci TEXu a umozˇnı´ s TEXem rozumny´m zpu˚sobem pracovat. Zacˇ´ınajı´cı´ uzˇivatel se samozrˇejmeˇ hlavneˇ pta´ po zpu˚sobu, jak mu˚zˇe v konkre´tnı´m operacˇnı´m syste´mu s konkre´tnı´ TEXovou implementacı´ s tı´mto programem pracovat, jak jej spustit, jaky´mi tlacˇ´ıtky se ovla´da´ textovy´ editor, jake´ nabı´dky jsou k dispozici, co nad ktery´m obra´zkem udeˇla´ mysˇ. Pta´ se tedy po uzˇivatelske´m rozhranı´. Jednotlive´ manua´ly o TEXu tradicˇneˇ odkazujı´ na tzv. „mı´stnı´ prˇ´ırucˇku“ (Local Guide), ktera´ by meˇla toto rozhranı´ popisovat. Tato prˇ´ırucˇka je za´visla´ na pouzˇite´m operacˇnı´m syste´mu, na pouzˇite´ implementaci TEXu, na vybrane´m textove´m editoru a neˇkdy te´zˇ na administra´torovi syste´mu, ktery´ konfiguruje neˇktere´ veˇci specificky pro veˇtsˇ´ı pohodlı´ uzˇivatelu˚. Ani v tomto manua´lu nejsou uvedeny podrobnosti o uzˇivatelske´m rozhranı´. V graficky orientovany´ch operacˇnı´ch syste´mech je veˇtsˇinou mozˇne´ otevrˇ´ıt soucˇasneˇ v jednom oke´nku textovy´ editor, ve ktere´m uzˇivatel pı´sˇe nebo modifikuje vstupnı´ text a ve vedlejsˇ´ım oke´nku prohlı´zˇecˇ vy´stupnı´ho dvi souboru. Po modifikaci vstupnı´ho 1 2
Na´zev TEX se cˇte „tech“, nikoli „teks“. odvozeno z anglicke´ho „device independent“ – na zarˇ´ızenı´ neza´visly´
1
textu a spusˇteˇnı´ TEXu (nejle´pe kla´vesovou zkratkou prˇ´ımo z editoru) se beˇhem pa´r sekund projevı´ zmeˇna v prohlı´zˇecˇi vy´sledne´ho dokumentu. Textovy´ editor, ve ktere´m prˇipravujeme nebo modifikujeme vstupnı´ texty dokumentu˚, nesmı´ ukla´dat na disk zˇa´dne´ skryte´ forma´tovacı´ informace implementovane´ jen pro tento editor (jako naprˇ´ıklad zmeˇna fontu, meˇkke´ konce rˇa´dku apod.). To deˇlajı´ tzv. textove´ procesory, ktere´ v prˇ´ıpadeˇ pra´ce s TEXem veˇtsˇinou nepouzˇ´ıva´me. Zvyklosti ve znacˇkova´nı´ dokumentu jsou vesmeˇs za´visle´ na pouzˇite´m forma´tu TEXu, ˇ ´ıka´me, zˇe je dokument napsa´n ve forma´tu LATEX, pokud ktery´ modifikuje jeho chova´nı´. R je neˇkde na zacˇa´tku vstupnı´ho textu dokumentu uvedena znacˇka \documentclass nebo \documentstyle. Pokud tam tuto znacˇku nenajdeme, mu˚zˇeme prˇedpokla´dat, zˇe je dokument napsa´n ve forma´tu plain, v prˇ´ıpadeˇ cˇesky psane´ho dokumentu pak ve forma´tu csplain. Tento manua´l je naprˇ´ıklad napsa´n ve forma´tu csplain a je ulozˇen v souboru prvni.tex. Mu˚zˇe se sta´t, zˇe neˇjaky´ dokument je napsa´n ve forma´tu AMSTEX nebo v jine´m me´neˇ pouzˇ´ıvane´m forma´tu. Tı´m se ale zde nebudeme zaby´vat. Rozdı´l mezi plainem a LATEXem a smysl pouzˇitı´ forma´tu˚ vyplyne azˇ z dalsˇ´ıho textu. Na´sledujı´cı´ tabulka ukazuje zpu˚soby spusˇteˇnı´ TEXu. Prˇedpokla´da´me, zˇe je k dispozici operacˇnı´ syste´m, ktery´ umozˇnˇuje uzˇivateli zada´vat pokyny z prˇ´ıkazove´ho rˇa´dku. Tı´m nevylucˇujeme, zˇe nelze neˇktere´ popisovane´ cˇinnosti implementovat do neˇjake´ uzˇivatelske´ nabı´dky konkre´tnı´ho uzˇivatelske´ho rozhranı´. Uvazˇujme, zˇe je vstupnı´ text dokumentu prˇipraven v souboru dokument.tex. prˇ´ıkazovy´ rˇa´dek
komenta´rˇ
tex dokument csplain dokument latex dokument cslatex dokument
anglicky´ dokument, forma´t plain cˇesky´ nebo slovensky´ dokument, forma´t csplain forma´t LATEX, jazyk je deklarova´n v dokumentu modifikovany´ LATEX pro cˇesˇtinu a slovensˇtinu
Vsˇimneme si, zˇe v prˇ´ıkazove´m rˇa´dku pı´sˇeme za jme´no forma´tu na´zev vstupnı´ho souboru a zˇe prˇ´ıponu .tex nemusı´me psa´t. Dobrˇe instalovana´ implementace TEXu by meˇla podle jme´na forma´tu spustit TEX modifikovany´ pra´veˇ tı´mto forma´tem. Pokud nema´me ve sve´ implementaci TEXu forma´t csplain, je to sˇpatne´ znamenı´. Nebudeme totizˇ schopni zpracovat ani tento manua´l ani uka´zku, ktera´ je v neˇm obsazˇena. V takove´m prˇ´ıpadeˇ lze doporucˇit poohle´dnout se po CSTEXu, ktery´ najdeme naprˇ´ıklad na http://math.feld.cvut.cz/olsak/cstex. K prohle´dnutı´ dokumentu se pouzˇ´ıvajı´ ru˚zne´ programy (tzv. dvi prohlı´zˇecˇe). Volba prohlı´zˇecˇe za´visı´ na pouzˇite´m operacˇnı´m syste´mu a na implementaci TEXu. V UNIXu je nejcˇasteˇjsˇ´ı program xdvi (stacˇ´ı napsat xdvi dokument). V MS Windows se pouzˇ´ıva´ windvi, dviwin nebo yapp. V DOSu se setka´me nejcˇasteˇji s programem dviscr z implementace emTEX. Pro OS/2 ma´ emTEX „okennı´“ variantu prohlı´zˇecˇe dvipm. Na PostScriptovou tiska´rnu vytiskneme dokument programem dvips, prˇ´ıkazovy´ rˇa´dek: dvips -Ptiskarna dokument. Nema´me-li PostScriptovou tiska´rnu, veˇtsˇinou prˇed nı´ prˇedrˇadı´me Ghostscript, cozˇ je volneˇ dostupny´ konvertor z PostScriptu. Neˇkdy lze te´zˇ najı´t ovladacˇ pro tiska´rnu prˇ´ımo v prˇ´ıslusˇne´ TEXove´ implementaci.
Jdeme na to Nejprve zkusı´me v neˇjake´m textove´m editoru vytvorˇit soubor pokus.tex, ktery´ obsahuje zkusˇebnı´ veˇtu: 2
Ahoj světe! \bye
Pokud zpracujeme tento soubor TEXem s forma´tem csplain (prˇipomı´na´me, zˇe je mozˇne´ pouzˇ´ıt povel csplain pokus), dostaneme vy´stupnı´ soubor pokus.dvi. Navı´c TEX ulozˇ´ı informaci o zpracova´nı´ do souboru pokus.log. Vy´sledny´ dvi soubor si mu˚zˇeme prohle´dnout prohlı´zˇecˇem. Dostaneme ocˇeka´vany´ vy´sledek: Ahoj světe! Prˇitom dole na stra´nce je jesˇteˇ vytisˇteˇno cˇ´ıslo strany: 1. Pokud zkusı´me tenty´zˇ soubor zpracovat TEXem s forma´tem plain (prˇ´ıkazovy´ rˇa´dek tex pokus), vy´stup bude zmrsˇeny´: „Ahoj svte!“. Vidı´me, zˇe textovy´ soubor s akcenty nelze jednodusˇe vnutit origina´lnı´mu americke´mu TEXu, ale mı´sto forma´tu plain je potrˇeba pouzˇ´ıt modifikovany´ csplain. Kdybychom chteˇli tenty´zˇ soubor zpracovat TEXem s forma´tem LATEX (kra´tce rˇ´ıka´me, zˇe soubor zpracova´va´me LATEXem), obdrzˇ´ıme chybove´ hla´sˇenı´: ! LaTeX Error: Missing \begin{document}. See the LaTeX manual or LaTeX Companion for explanation. Type H
for immediate help. ... l.1 A hoj světe! ?
Vidı´me tedy, zˇe soubor nenı´ vhodneˇ prˇipraven ke zpracova´nı´ LATEXem. Chybı´ mu \begin{document}. Pozdeˇji uka´zˇeme, zˇe mu chybı´ vı´ce veˇcı´, ale v tuto chvı´li radeˇji zu˚staneme u csplainu. Komunikaci s TEXem prˇi chybove´m hla´sˇenı´ ukoncˇ´ıme odesla´nı´m znaku x. Chceme-li, aby TEX chybu ignoroval a pokracˇoval ve zpracova´nı´ dokumentu, stacˇ´ı na otaznı´k odpoveˇdeˇt „Enter“ (v tomto prˇ´ıkladeˇ, kdy dokument vhodny´ pro csplain chceme zpracovat LATEXem, se pouze docˇka´me dalsˇ´ı zavlecˇene´ chyby). Zkusı´me si nynı´ prˇepsat do pocˇ´ıtacˇe na´sledujı´cı´ poneˇkud rozsa´hlejsˇ´ı dokument. Soubor nazveme trˇeba mujprvni.tex a vytvorˇ´ıme jej libovolny´m textovy´m editorem. Pokud je cˇtena´rˇ od prˇ´ırody „lenivy´“, mu˚zˇe se mı´sto zdlouhave´ho prˇepisova´nı´ pokusit najı´t text uka´zky ve vstupnı´m souboru prvni.tex tohoto manua´lu a prˇene´st jej do sve´ho souboru mujprvni.tex jako blok v textove´m editoru. Mozˇna´ na´m mu˚zˇe prˇipadat cˇa´st oznacˇena´ jako „oblast definic“ hodneˇ nepochopitelna´, skoro jako porucha na lince. Prˇesto se zatı´m pokusı´me prˇekonat odpor k te´to porusˇe a du˚sledneˇ vsˇechny znaky prˇepı´sˇeme. TEX se na´m za to odvdeˇcˇ´ı silny´mi mozˇnostmi, ktere´ budeme postupneˇ odhalovat. Nemusı´me se obteˇzˇovat prˇepisova´nı´m textu˚, schovany´ch za znakem %, protozˇe tı´mto znakem je zaha´jen komenta´rˇ, ktery´ koncˇ´ı koncem rˇa´dku a ktery´ je prˇi zpracova´nı´ TEXem ignorova´n. V kazˇde´m prˇ´ıpadeˇ ale nevynecha´vejme pra´zdne´ rˇa´dky v uka´zce a veˇnujme pozornost obsahu cˇa´sti oznacˇene´ jako „vlastnı´ text“, kde jsou vyjmenova´ny za´kladnı´ jevy, se ktery´mi se prˇi porˇizova´nı´ textu˚ pro TEX budeme neusta´le setka´vat.
3
%%%%%%%% Zde začíná "oblast definic" pro tento dokument %%%%%%%%%%% \chyph % inicializace českého dělení slov v csplainu \font\titulfont=\fontname\tenbf\space scaled \magstep2 % větší font \def\bod{\item{$\bullet$}} % definice zkratky \bod pro výčet \def\nadpis#1\par{ % definice nadpisu: \removelastskip\bigskip % odmaže poslední vert. mezeru a přidá vlastní \indent{\titulfont #1} % odsazený text nadpisu větším fontem \par\nobreak\medskip} % konec řádku, zakázaný zlom, menší mezera \let\itemskip=\medskip % kolem výčtu prvků bude menší mezera \medskip %%%%%%%% Zde začíná "vlastní text" dokumentu %%%%%%%%%%%%%%%%%%%%%%%% \nadpis Můj první dokument Zkouším napsat první text v~\TeX u. Tento odstavec musí být tak dlouhý, aby bylo vidět, že se rozlomil aspoň na dva řádky. Jednotlivé odstavce oddělujeme od sebe prázdným řádkem. Prázdnými řádky vůbec nešetříme, protože zvyšují přehlednost zdrojového textu. Vyzkoušíme si nyní několik věcí. \itemskip \bod Budeme používat české \uv{uvozovky}, které se liší od ‘‘anglických’’. Uvědomíme si, že použití "těchto znaků" je úplně špatně! \bod Rozlišujme mezi spojovníkem (je-li), pomlčkou ve větě~-a dlouhou pomlčkou---ta se používá v~anglických dokumentech. \bod Předpokládáme, že každý dokáže rozeznat 1 (jedničku) od l (písmene el) a 0 (nulu) od O~(písmene~O). \bod Zkusíme přepnout do {\bf polotučného písma}, nebo do {\it kurzívy}. Také vyzkoušíme {\tt strojopis}. \bod Všimneme si, že ve slovech grafika, firma, apod. se písmena f a i automaticky proměnila v~jediný znak fi (srovnáme to s~nesprávným f\/i). \bod Mezery mezi písmeny jsou automaticky vyrovnávány podle tvaru písmen. Ve slově \uv{Tento} je například písmeno~e těsněji přisazeno k~písmenu~T, aby se mezery mezi písmeny opticky jevily stejnoměrné. \bod Vypravíme se na malou exkurzi do matematiky: $a^2 + b^2 = c^2$. Zjistíme, že číslo -1 je zde napsáno špatně (prokletý spojovník), zatímco správně má být $-1$. \bod Protože \% uvozuje komentář a \$ přepíná do matematické sazby, musíme před ně napsat zpětné lomítko, chceme-li je dostat do dokumentu. \itemskip \nadpis Závěr To by pro začátek stačilo. Příkazem {\tt\char‘\\bye} ukončíme své pokusy. \bye
Po zpracova´nı´ tohoto dokumentu forma´tem csplain si mu˚zˇeme prohle´dnout prohlı´zˇecˇem dvi souboru na´sledujı´cı´ vy´sledek:
4
Můj první dokument Zkouším napsat první text v TEXu. Tento odstavec musí být tak dlouhý, aby bylo vidět, že se rozlomil aspoň na dva řádky. Jednotlivé odstavce oddělujeme od sebe prázdným řádkem. Prázdnými řádky vůbec nešetříme, protože zvyšují přehlednost zdrojového textu. Vyzkoušíme si nyní několik věcí. • Budeme používat české „uvozovkyÿ, které se liší od “anglických”. Uvědomíme si, že použití ”těchto znaků” je úplně špatně! • Rozlišujme mezi spojovníkem (je-li), pomlčkou ve větě – a dlouhou pomlčkou—ta se používá v anglických dokumentech. • Předpokládáme, že každý dokáže rozeznat 1 (jedničku) od l (písmene el) a 0 (nulu) od O (písmene O). • Zkusíme přepnout do polotučného písma, nebo do kurzívy. Také vyzkoušíme strojopis. • Všimneme si, že ve slovech grafika, firma, apod. se písmena f a i automaticky proměnila v jediný znak fi (srovnáme to s nesprávným fi). • Mezery mezi písmeny jsou automaticky vyrovnávány podle tvaru písmen. Ve slově „Tentoÿ je například písmeno e těsněji přisazeno k písmenu T, aby se mezery mezi písmeny opticky jevily stejnoměrné. • Vypravíme se na malou exkurzi do matematiky: a2 + b2 = c2 . Zjistíme, že číslo -1 je zde napsáno špatně (prokletý spojovník), zatímco správně má být −1. • Protože % uvozuje komentář a $ přepíná do matematické sazby, musíme před ně napsat zpětné lomítko, chceme-li je dostat do dokumentu.
Závěr To by pro začátek stačilo. Příkazem \bye ukončíme své pokusy.
Vsˇimneˇme si, zˇe v prˇ´ıkladu je du˚sledneˇ oddeˇlena forma od obsahu dokumentu. V cˇa´sti oznacˇene´ „vlastnı´ text“ jsou pouzˇity znacˇky \nadpis, \bod a \itemskip, ktere´ ohranicˇujı´ logicke´ cˇa´sti dokumentu (vymezenı´ nadpisu, uvedenı´ dalsˇ´ı polozˇky ve vy´cˇtu prvku˚, obklopenı´ skupiny vy´cˇtu prvku˚) a nepopisujı´ zˇa´dne´ konkre´tnı´ forma´tovacı´ informace (volba fontu, velikost fontu, velikost mezer nad a pod nadpisem, tvar puntı´ku ve vy´cˇtu prvku˚ apod.). Znacˇky vymezujı´cı´ strukturu dokumentu jsou definova´ny v cˇa´sti „oblast definic“. Zde je rˇecˇeno, jaky´ bude mı´t nadpis font, jak bude v textu umı´steˇn a jak bude vypadat forma´tova´nı´ vy´cˇtu prvku˚. Podrobneˇjsˇ´ı rozbor teˇchto definic uvedeme za chvı´li. Toto oddeˇlenı´ formy od obsahu se v mnoha prˇ´ıpadech zacˇa´tecˇnı´ku˚m nedarˇ´ı. Prˇ´ımo v textu jejich dokumentu˚ se vyskytujı´ znacˇky jako \vskip12mm (vertika´lnı´ mezera 12 mm), \vfill\break (vynucene´ ukoncˇenı´ strany) a mnoho dalsˇ´ıch nesˇvaru˚. My se pokusı´me hned z pocˇa´tku se takovy´m veˇcem pokud mozˇno vyhnout. V sekci „zmeˇna vzhledu dokumentu“ uvidı´me, zˇe se na´m to bohateˇ vyplatı´.
Vysveˇtlenı´ pouzˇity´ch znacˇek v prˇı´kladu Jednotlive´ znacˇky, ktere´ rˇ´ıdı´ forma´tova´nı´ a vymezujı´ strukturu dokumentu jsou vesmeˇs ve tvaru \slovo. Tyto znacˇky se nazy´vajı´ rˇ´ıdicı´ sekvence a neˇkdy te´zˇ budeme hovorˇit o prˇ´ıkazech, protozˇe jimi prˇikazujeme, aby TEX neˇco vykonal. ˇ ´ıdicı´ sekvence v prˇ´ıkladu rozdeˇlı´me na dveˇ skupiny. 1. ty, co jsou definova´ny R v samotne´m TEXu nebo v pouzˇite´m forma´tu (v nasˇem prˇ´ıpadeˇ ve forma´tu csplain). 2. rˇ´ıdicı´ sekvence, ktere´ jsme definovali sami. Zacˇneme rozborem druhe´ skupiny rˇ´ıdicı´ch sekvencı´: . \nadpis je sekvence, ktera´ za sebou ocˇeka´va´ text nadpisu a pak pra´zdny´ rˇa´dek. 5
. \titulfont je prˇepı´nacˇ pro veˇtsˇ´ı velikost fontu pro nadpis. Je definova´n na rˇa´dku zacˇ´ınajı´cı´m prˇ´ıkazem \font a pouzˇit v definici rˇ´ıdicı´ sekvence \nadpis. . \bod je sekvence, ktera´ uvozuje polozˇku ve vy´cˇtu prvku˚. Promeˇnı´ se v neˇjakou grafickou realizaci zara´zˇky (zde puntı´k) a zpu˚sobı´ odsazenı´ textu polozˇky. . \itemskip vytvorˇ´ı vertika´lnı´ mezeru, ktera´ oddeˇlı´ vy´cˇet prvku˚ od ostatnı´ho textu. Pouzˇije se na zacˇa´tku i na konci vy´cˇtu. Ostatnı´ rˇ´ıdicı´ sekvence jsou definova´ny v pouzˇite´m forma´tu nebo prˇ´ımo zabudova´ny v TEXu. Uzˇivatel se s nimi bude postupneˇ seznamovat studiem vhodne´ literatury. Zde uvedeme velmi strucˇneˇ jen ty nejdu˚lezˇiteˇjsˇ´ı rˇ´ıdicı´ sekvence, abychom usnadnili pochopenı´ prˇ´ıkladu. . \chyph. Tato rˇ´ıdicı´ sekvence inicializuje cˇeske´ vzory deˇlenı´ slov a je definova´na pouze ve forma´tu csplain. V prˇ´ıpadeˇ cˇesky´ch textu˚ bychom ji nikdy nemeˇli vynechat! Analogicky \shyph inicializuje slovenske´ vzory deˇlenı´ slov. Bez teˇchto prˇ´ıkazu˚ TEX pracuje implicitneˇ s anglicky´mi vzory deˇlenı´. . \font zavede z instalace TEXu do dokumentu dalsˇ´ı font. Struktura parametru˚ prˇ´ıkazu bude vysveˇtlena v sekci o fontech. . \def definuje novou rˇ´ıdicı´ sekvenci (zde \bod a \nadpis). Za rˇ´ıdicı´ sekvencı´ mu˚zˇe na´sledovat forma´lnı´ popis parametru˚ nove´ sekvence a pak na´sleduje ve slozˇeny´ch za´vorka´ch teˇlo definice. V nı´ je popsa´no, co se prˇi pouzˇitı´ nove´ rˇ´ıdicı´ sekvence ma´ vykonat. . \item zaha´jı´ vy´cˇtovou polozˇku (odsazenı´m textu) a prˇevezme za sebou ve slozˇeny´ch za´vorka´ch parametr, ktery´ popisuje vzhled puntı´ku. . \bullet vytvorˇ´ı v matematicke´m mo´du cˇerny´ puntı´k: •. . \bigskip vytvorˇ´ı vertika´lnı´ mezeru velikosti jednoho rˇa´dku a \medskip velikosti poloviny rˇa´dku. \indent odsadı´ dalsˇ´ı text o velikost odstavcove´ zara´zˇky. ˇ ´ıdicı´ sekvence \par je explicitnı´ ukoncˇenı´ odstavce. TEX ji interneˇ vytva´rˇ´ı v mı´steˇ . R kazˇde´ho pra´zdne´ho rˇa´dku. Ve forma´lnı´m popisu parametru za \def\nadpis ma´ ale \par pouze vymezovacı´ u´cˇinek. Forma´lnı´ popis parametru v nasˇem prˇ´ıkladeˇ cˇteme takto: noveˇ definovana´ rˇ´ıdicı´ sekvence \nadpis prˇevezme za sebou text azˇ po prvnı´ vy´skyt \par (tedy azˇ po prvnı´ vy´skyt pra´zdne´ho rˇa´dku) a ulozˇ´ı jej do „promeˇnne´“ s oznacˇenı´m #1. . \let cˇteme cˇesky necht’. Tento prˇ´ıkaz ztotozˇnı´ vy´znam nove´ rˇ´ıdicı´ sekvence (v nasˇem prˇ´ıkladeˇ \itemskip) s prˇedlohou (v tomto prˇ´ıkladeˇ \medskip). V nasˇ´ı uka´zce jsme pouzˇili te´zˇ neˇktere´ specia´lnı´ TEXovske´ znaky. Vysveˇtlı´me si nynı´ strucˇneˇ jejich vy´znam. . Znak ~ znamena´ nedeˇlitelnou mezeru. Je zde pouzˇita za neslabicˇny´mi prˇedlozˇkami a prˇed jednopı´smenny´mi uka´zkami, aby se v teˇchto mı´stech nerozdeˇlil rˇa´dek. Prˇi porˇizova´nı´ textu nemusı´me psa´t za neslabicˇny´mi prˇedlozˇkami vlnku „rucˇneˇ“. Vlnky tam lze doplnit pozdeˇji jednoduchy´mi programy, ktere´ by´vajı´ soucˇa´stı´ TEXovsky´ch instalacı´. . Znaky { } majı´ v TEXu trˇi mı´rneˇ odlisˇne´ vy´znamy. 1. Obklopujı´ teˇla definic za prˇ´ıkazem \def, jak jizˇ bylo rˇecˇeno. 2. Obklopujı´ parametry neˇktery´ch rˇ´ıdicı´ch sekvencı´ (viz naprˇ´ıklad text uvozovky, ktery´ je parametrem rˇ´ıdicı´ sekvence \uv, nebo text $\bullet$, ktery´ je parametrem rˇ´ıdicı´ sekvence \item.
6
3. Samotne´ znaky { } vymezujı´ jiste´ skupiny, ve ktery´ch je vesˇkere´ prˇirˇazenı´ a nastavenı´ loka´lnı´. Skupiny se cˇasto pouzˇ´ıvajı´ pro vymezenı´ platnosti prˇepı´nacˇu˚ pı´sma (viz \bf, \it, \tt a \titulfont). Za´vorky { } musı´ vza´jemneˇ pa´rovat, cozˇ je du˚lezˇite´ zejme´na ve vymezovacı´ch vy´znamech (ad 1 a 2). Proto trˇeba teˇlo definice \bod obsahuje text \item{$\bullet$} a je ukoncˇeno azˇ druhou za´vorkou }. . Znak % uvozuje komenta´rˇ azˇ do konce rˇa´dku. . Znak $ prˇepı´na´ do matematicke´ho mo´du a zpeˇt. V matematicke´m mo´du TEX sestavuje sazbu poneˇkud odlisˇny´m zpu˚sobem (vsˇimneme si, zˇe naprˇ´ıklad promeˇnne´ a, b jsou v matematicke´m mo´du automaticky sa´zeny kurzı´vou). . Znak ^ v matematicke´m mo´du uvozuje hornı´ index (exponent).
Zmeˇna vzhledu dokumentu Prˇedvedeme, v cˇem spocˇ´ıva´ vy´hoda oddeˇlenı´ obsahu dokumentu od formy. Prˇedpokla´dejme, zˇe na´m neˇjaky´ zkusˇeneˇjsˇ´ı kolega pomu˚zˇe s prˇ´ıpravou definic pro na´sˇ dokument. Prˇedpokla´dejme da´le, zˇe onen kolega ma´ na veˇc poneˇkud jiny´ typograficky´ na´zor a zacˇne veˇci prˇedeˇla´vat. V editoru modifikuje definice a ve vedlejsˇ´ım oke´nku v prohlı´zˇecˇi se pru˚beˇzˇneˇ meˇnı´ na´sˇ prvnı´ dokument skoro k nepozna´nı´. Prˇitom kolega vu˚bec nemusı´ zasa´hnout do vlastnı´ho textu dokumentu. Prˇedevsˇ´ım se mu nelı´bı´ rodina fontu˚ Computer Modern, ktera´ je v TEXu implicitneˇ nastavena. Mnoho instalacı´ TEXu obsahuje na´stroje pro pra´ci s dalsˇ´ımi, zejme´na PostScriptovy´mi, fonty. Ma´me-li takovou instalaci, mu˚zˇeme napsat na zacˇa´tek dokumentu trˇeba \input cbookman a ma´me cely´ dokument v rodineˇ Bookman. Prˇ´ıkaz \input zava´dı´ do dokumentu externı´ soubor definic, zde soubor s na´zvem cbookman.tex. Tento soubor obsahuje prˇ´ıkazy \font na zavedenı´ skupiny fontu˚ Bookman a nastavı´ je jako implicitnı´. Kolega se da´le rozhodl vkla´dat mezi kazˇdy´ odstavec drobnou vertika´lnı´ mezeru a mı´sto puntı´ku˚ pro vy´cˇty chce pouzˇ´ıt cˇtverecˇky, ktere´ ve veˇtsˇ´ı velikosti zarˇadı´ i do nadpisu˚. Konecˇneˇ velikost fontu pro nadpis se mu zda´ prˇ´ılisˇ velka´ (mı´sto \magstep2 v rˇa´dku \font pouzˇije „mensˇ´ı“ \magstep1). Vy´sledek jeho snazˇenı´ v „oblasti definic“ dopadne trˇeba takto: \chyph % inicializace českého dělení slov v csplainu \magnification\magstep1 % celý dokument bude 1,2 krát větší \input cbookman \setsimplemath % použité písmo: Bookman i v matematice \font\titulfont=\fontname\tenbf\space scaled \magstep1 % větší font \newdimen\indskip \indskip=15pt % výčty budou odsazeny 15pt \def\ctverecek#1{\noindent % čtvereček proměnné velikosti v místě \indskip \hbox to\indskip{\vrule height#1pt depth0pt width#1pt\hss}} \def\bod{\par\hangindent=\indskip \ctverecek{4}} % definice zkratky \bod \def\nadpis#1\par{ % definice nadpisu: \removelastskip\bigskip % odmaže poslední vert.mezeru a přidá vlastní \ctverecek{7}{\titulfont #1} % nadpis odsazený čtverečkem \par\nobreak} % konec řádku, zakázaný zlom, žádná mezera \parskip=\medskipamount % mezi odstavci bude mezera jako \medskip \parindent=0pt % odstavce nebudou odsazeny zarážkou \let\itemskip=\relax % žádné další mezery mezi výčty
Na´sˇ dokument vypada´ pak na´sledovneˇ: 7
Mu ˚ j prvnı´ dokument Zkousˇ´ım napsat prvnı´ text v TEXu. Tento odstavec musı´ by´t tak dlouhy´, aby bylo videˇt, zˇe se rozlomil aspon ˇ na dva rˇa´dky. Jednotlive´ odstavce oddeˇlujeme od sebe pra´zdny´m rˇa´dkem. Pra´zdny´mi rˇa´dky vu ˚ bec nesˇetrˇ´ıme, protozˇe zvysˇujı´ prˇehlednost zdrojove´ho textu. Vyzkousˇ´ıme si nynı´ neˇkolik veˇcı´. Budeme pouzˇ´ıvat cˇeske´ „uvozovky“, ktere´ se lisˇ´ı od “anglicky´ch”. Uveˇdomı´me si, zˇe pouzˇitı´ ”teˇchto znaku ˚ ” je u ´ plneˇ sˇpatneˇ! Rozlisˇujme mezi spojovnı´kem (je-li), pomlcˇkou ve veˇteˇ – a dlouhou pomlcˇkou—ta se pouzˇ´ıva´ v anglicky´ch dokumentech. Prˇedpokla´da´me, zˇe kazˇdy´ doka´zˇe rozeznat 1 (jednicˇku) od l (pı´smene el) a 0 (nulu) od O (pı´smene O). Zkusı´me prˇepnout do polotuc ˇne´ho pı´sma, nebo do kurzı´vy. Take´ vyzkousˇ´ıme strojopis. Vsˇimneme si, zˇe ve slovech grafika, firma, apod. se pı´smena f a i automaticky promeˇnila v jediny´ znak fi (srovna´me to s nespra´vny´m fi). Mezery mezi pı´smeny jsou automaticky vyrovna´va´ny podle tvaru pı´smen. Ve sloveˇ „Tento“ je naprˇ´ıklad pı´smeno e teˇsneˇji prˇisazeno k pı´smenu T, aby se mezery mezi pı´smeny opticky jevily stejnomeˇrne´. Vypravı´me se na malou exkurzi do matematiky: a 2 + b2 = c 2 . Zjistı´me, zˇe cˇ´ıslo -1 je zde napsa´no sˇpatneˇ (proklety´ spojovnı´k), zatı´mco spra´vneˇ ma´ by´t −1. Protozˇe % uvozuje komenta´rˇ a $ prˇepı´na´ do matematicke´ sazby, musı´me prˇed neˇ napsat zpeˇtne´ lomı´tko, chceme-li je dostat do dokumentu.
Za´ve ˇr To by pro zacˇa´tek stacˇilo. Prˇ´ıkazem \bye ukoncˇ´ıme sve´ pokusy. Kdyby na´sˇ kolega chteˇl, implementoval by trˇeba automaticke´ cˇ´ıslova´nı´ polozˇek, automaticke´ cˇ´ıslova´nı´ nadpisu˚, generova´nı´ obsahu a dalsˇ´ı veˇci. Vysveˇtlenı´ novy´ch rˇ´ıdicı´ch sekvencı´, ktere´ kolega pouzˇil, bohuzˇel prˇekracˇuje ra´mec tohoto u´vodnı´ho dokumentu. Definice lze umı´stit do jine´ho souboru nezˇ vlastnı´ text dokumentu. Na zacˇa´tku dokumentu pak soubor definic nacˇteme prˇ´ıkazem \input. Nebo naopak, hlavnı´ bude soubor definic, ze ktere´ho se prˇ´ıkazem \input postupneˇ nacˇ´ıtajı´ jednotlive´ kapitoly rozsa´hlejsˇ´ıho dı´la.
8
Stojı´me na krˇizˇovatce V prˇedchozı´m prˇ´ıkladeˇ jsme ilustrovali du˚lezˇitou vlastnost TEXu – schopnost meˇnit vzhled dokumentu jen vy´meˇnou neˇktery´ch definic. Kromeˇ toho ale tyto definice take´ musejı´ navazovat na u´mluvu, jaky´mi znacˇkami bude autor vymezovat strukturu sve´ho dokumentu. Kdyby autor pouzˇil mı´sto znacˇky \nadpis znacˇku \section, TEX by na´m prˇi zpracova´nı´ dokumentu vynadal: ! Undefined control sequence. l.14 \section Můj první dokument ?
tedy: nedefinovana´ rˇ´ıdicı´ sekvence. Odpovı´me-li na otaznı´k pouhy´m stiskem kla´vesy Enter, TEX tuto sekvenci zcela ignoruje a pracuje da´l. Zˇa´dne´ho zvy´razneˇnı´ nadpisu bychom se nedocˇkali. Je tedy videˇt, zˇe je hodneˇ du˚lezˇite´ ujasnit si, jake´ znacˇkova´nı´ struktury dokumentu pouzˇijeme. V te´to souvislosti si musı´me odpoveˇdeˇt jednu du˚lezˇitou ota´zku. Chceme se naucˇit jazyk definic TEXu na takove´ u´rovni, jako na´sˇ imagina´rnı´ kolega z prˇedchozı´ho prˇ´ıkladu? Budeme radeˇji sami kontrolovat kazˇdy´ detail vzhledu dokumentu prostrˇednictvı´m vlastnı´ch definic, nezˇ abychom prˇebı´rali hotova´ rˇesˇenı´ odjinud? Pokud na tyto ota´zky odpovı´me „ano“, pak je pro na´s vy´hodne´ pouzˇ´ıt forma´t plain (pro cˇeske´ a slovenske´ dokumenty jen mı´rneˇ modifikovany´ forma´t csplain), ktery´ definuje jen minimum za´kladnı´ch rˇ´ıdicı´ch sekvencı´. O dalsˇ´ı rˇ´ıdicı´ sekvence stejneˇ jako o modifikaci vzhledu dokumentu podle nasˇich prˇedstav se musı´me postarat sami. V takove´m prˇ´ıpadeˇ si mu˚zˇeme sami rozhodnout, jake´ znacˇky pro vymezenı´ struktury dokumentu pouzˇijeme, protozˇe si pro neˇ nakonec udeˇla´me vlastnı´ definice. Na druhe´ straneˇ, pokud ra´di prˇebı´ra´me hotova´ rˇesˇenı´, pokud nechceme zbytecˇneˇ pronikat do problematiky jazyka definic TEXu, pokud se spokojı´me s uzˇ prˇipraveny´mi sˇablonami vzhledu dokumentu (tzv. styly), pokud jsme ochotni se mı´sto trˇ´ı set za´kladnı´ch prˇ´ıkazu˚ TEXu ucˇit zhruba tisı´c uzˇivatelsky´ch znacˇek pro LATEX, bude pro na´s vy´hodne´ pouzˇ´ıt radeˇji forma´t LATEX. LATEX doporucˇuje urcˇite´ znacˇkova´nı´ struktury dokumentu. Naprˇ´ıklad se prˇedpokla´da´ cˇleneˇnı´ na kapitoly (znacˇka \chapter) a na sekce (znacˇka \section). Kazˇdy´ dokument by meˇl zacˇ´ıt za´hlavı´m uvozeny´m sekvencı´ \documentclass (u stare´ verze LATEXu se mu˚zˇeme setkat jesˇteˇ se sekvencı´ \documentstyle). Parametrem te´to sekvence by meˇl by´t na´zev za´kladnı´ho stylove´ho souboru (souboru definic upravujı´cı´ch vzhled dokumentu). Nejcˇasteˇji by´va´ tı´mto parametrem book (forma´t knihy) nebo article (forma´t cˇla´nku). Doplnˇkove´ stylove´ soubory se nacˇ´ıtajı´ pomocı´ sekvence \usepackage. Vlastnı´ text dokumentu musı´ by´t uzavrˇen mezi znacˇkami \begin{document} a \end{document}. Cˇasto se vyskytujı´ dalsˇ´ı znacˇky \begin a \end vymezujı´cı´ v LATEXu jista´ prostrˇedı´ (naprˇ´ıklad prostrˇedı´ pro vy´cˇtove´ polozˇky). Vrat’me se k nasˇemu prˇ´ıkladu a prˇepisˇme jej do znacˇkova´nı´ podle LATEXu.
9
\documentclass{article} \usepackage{czech} \begin{document}
% základní styl bude "odborný článek" % doplňkový soubor definic pro český jazyk % povinné
\section{Můj první dokument} Zkouším napsat první text v~\TeX u. Tento odstavec musí být tak dlouhý, aby bylo vidět, že se rozlomil aspoň na dva řádky. Jednotlivé odstavce oddělujeme od sebe prázdným řádkem. Prázdnými řádky vůbec nešetříme, protože zvyšují přehlednost zdrojového textu. Vyzkoušíme si nyní několik věcí. \begin{itemize} \item Budeme používat české \uv{uvozovky}, které se liší od ‘‘anglických’’. Uvědomíme si, že použití "těchto znaků" je úplně špatně! \item Rozlišujme mezi spojovníkem (je-li), pomlčkou ve větě~-a dlouhou pomlčkou---ta se používá v~anglických dokumentech. \item Předpokládáme, že každý dokáže rozeznat 1 (jedničku) od l (písmene el) a 0 (nulu) od O~(písmene~O). \item Zkusíme přepnout do {\bf polotučného písma}, nebo do {\it kurzívy}. Také vyzkoušíme {\tt strojopis}. \item Všimneme si, že ve slovech grafika, firma, apod. se písmena f a i automaticky proměnila v~jediný znak fi (srovnáme to s~nesprávným f\/i). \item Mezery mezi písmeny jsou automaticky vyrovnávány podle tvaru písmen. Ve slově \uv{Tento} je například písmeno~e těsněji přisazeno k~písmenu~T, aby se mezery mezi písmeny opticky jevily stejnoměrné. \item Vypravíme se na malou exkurzi do matematiky: $a^2 + b^2 = c^2$. Zjistíme, že číslo -1 je zde napsáno špatně (prokletý spojovník), zatímco správně má být $-1$. \item Protože \% uvozuje komentář a \$ přepíná do matematické sazby, musíme před ně napsat zpětné lomítko, chceme-li je dostat do dokumentu. \end{itemize} \section{Závěr} To by pro začátek stačilo. Příkazem \verb|\bye| ukončíme své pokusy. \end{document}
Poznamenejme, zˇe zavedenı´ doplnˇkove´ho stylu czech zpu˚sobı´ aktivaci cˇesky´ch vzoru˚ deˇlenı´ slov a pı´sma s cˇesky´mi znaky. Bez pouzˇitı´ tohoto stylu pracuje LATEX implicitneˇ s anglicky´mi vzory deˇlenı´ slov a s pı´smy, ktera´ neobsahujı´ ha´cˇkovana´ a cˇa´rkovana´ pı´smena. Upozornˇujeme, zˇe v soucˇasne´ dobeˇ je LATEXu˚ neˇkolik druhu˚. Uzˇ zmı´neˇny´ „stary´ LATEX“ (tzv. verze 2.09), ve ktere´m se struktura za´hlavı´ dokumentu mı´rneˇ lisˇila. Da´le je pro potrˇeby cˇesky´ch dokumentu˚ nutne´ rozlisˇovat mezi tzv. „babelizovany´m LATEXem“ a CSLATEXem. Babelizovany´ LATEX implementuje cˇesky´ a slovensky´ jazyk pomocı´ balı´ku maker „Babel“, ktery´ k na´m byl importova´n ze zahranicˇ´ı. Babelizovany´ LATEX implicitneˇ neobsahuje cˇeske´ ani slovenske´ vzory deˇlenı´ slov a prˇi instalaci je potrˇeba tyto vzory deˇlenı´ do neˇj zave´st. Na druhe´ straneˇ CSLATEX je modifikace LATEXu pro potrˇeby cˇesky´ch a slovensky´ch dokumentu˚ a vzory deˇlenı´ cˇesˇtiny i slovensˇtiny jsou v neˇm 10
implicitneˇ obsazˇeny. Vy´sˇe uvedena´ uka´zka je pouzˇitelna´ pro CSLATEX. V prˇ´ıpadeˇ dobrˇe instalovane´ho babelizovane´ho LATEXu by za´hlavı´ dokumentu mohlo vypadat asi takto: \documentclass{article} \usepackage[cp1250]{inputenc} \usepackage[T1]{fontenc} \usepackage[czech]{babel} \begin{document}
% % % %
základní styl bude "odborný článek" je nutno specifikovat kódování dokumentu požadujeme LaTeXovské fonty s akcenty voláme styl czech z Babelu
Vy´sledek po zpracova´nı´ nasˇeho dokumentu LATEXem v tomto manua´lu pro strucˇnost neuva´dı´me. Kdo chce, mu˚zˇe si sa´m LATEX vyzkousˇet. Nelı´bı´ se na´m, zˇe za cˇ´ısly v nadpisech nejsou tecˇky? Zavedeme do dokumentu prostrˇednictvı´m \usepackage dalsˇ´ı doplnˇkovy´ styl, ktery´ toto vy´chozı´ chova´nı´ za´kladnı´ho stylu article upravı´. Nelı´bı´ se na´m, zˇe jsou mezi jednotlivy´mi polozˇkami ve vy´cˇtu velke´ mezery a polozˇky jsou azˇ prˇ´ılisˇ odsazeny? Pouzˇijeme v dokumentu dalsˇ´ı doplnˇkovy´ styl. Nelı´bı´ se na´m, zˇe je pouzˇito pı´smo Computer Modern? Napisˇme trˇeba \usepackage{times}. Ota´zka ale je, kdo pro na´s tyto doplnˇkove´ styly (neboli doplnˇujı´cı´ sady definic pro TEX) bude prˇipravovat. Velke´ mnozˇstvı´ stylu˚ na vsˇechno mozˇne´ lze nale´zt ve verˇejny´ch archivech TEXovske´ho softwaru. LATEX na´m tedy prˇi jednoduchy´ch sˇablonovity´ch pozˇadavcı´ch na vzhled dokumentu umozˇnˇuje zu˚stat v roli autora, ktery´ porˇizuje text. Nemusı´me umeˇt pomeˇrneˇ slozˇity´ jazyk definic TEXu. Pokud na´m zˇa´dna´ z mozˇnostı´ nabı´zeny´ch stylu˚ nevyhovuje, musı´me se pokusit tyto styly modifikovat podle sve´ potrˇeby. To ale mu˚zˇe by´t uzˇ hodneˇ komplikovane´. Za´lezˇ´ı znovu na na´s, zda ra´di modifikujeme zdrojove´ ko´dy cizı´ch programu˚ nebo si radeˇji napı´sˇeme programy vlastnı´. Pokud pı´sˇeme radeˇji programy vlastnı´, asi na´m bude spı´sˇe vyhovovat jednodusˇsˇ´ı vy´chozı´ forma´t plain (csplain). Jestlizˇe jsme se rozhodli pracovat radeˇji v plainu, pak lze k dalsˇ´ımu studiu doporucˇit na´sledujı´cı´ literaturu: [1]
[2]
Michael Doob. Jemny´ u´vod do TEXu. Trˇetı´ vyda´nı´ cˇeske´ho prˇekladu, CSTUG 1993. Knı´zˇka je rovneˇzˇ volneˇ k dispozici ve zdrojovy´ch textech jako jemny.tex v archivu ftp://math.feld.cvut.cz/pub/cstex/doc/jemny.tar.gz. Anglicky´ origina´l je volneˇ sˇ´ırˇen jako gentle.tex. Petr Olsˇa´k. TEXbook naruby. Konvoj 1997. Cely´ text knihy je volneˇ k dispozici ve forma´tu pdf na http://math.feld.cvut.cz/olsak/tbn.html. Vyhovuje-li na´m vı´ce LATEX, pak je mozˇne´ sa´hnout po teˇchto manua´lech:
[3] [4]
[5] [6] [7]
Jirˇ´ı Rybicˇka. LATEX pro zacˇa´tecˇnı´ky. Druhe´, upravene´ vyda´nı´, Konvoj 1999. Tobias Oetiker. Ne prˇ´ılisˇ strucˇny´ u´vod do syste´mu LATEX 2ε . Text je sˇ´ırˇen volneˇ vcˇetneˇ zdrojovy´ch textu˚ a je prˇelozˇen do mnoha jazyku˚. Do cˇesˇtiny prˇelozˇil Michal Kocˇer. ftp://math.feld.cvut.cz/pub/cstex/doc/lshort2e.tar.gz Leslie Lamport. LATEX—A Document Preparation System—User’s Guide and Reference Manual. Addison-Wesley, Reading, MA, USA, 2nd ed. 1994. Michel Goossens, Frank Mittelbach, Alexander Samarin. The LATEX Companion. Druhe´ vyda´nı´, Addisson Wesley 1994. Michel Goossens, Sebastian Rahtz, Frank Mittelbach. The LATEX Graphics Companion: Illustrating Documents with TEX and PostScript. Addisson Wesley 1997.
11
Pokud budeme pouzˇ´ıvat LATEX a budeme chtı´t rozumeˇt pouzˇity´m stylovy´m souboru˚m, mu˚zˇeme pouzˇ´ıt knihu [2]. Popisuje totizˇ vnitrˇnı´ algoritmy TEXu, cozˇ jsou informace, ktere´ vyuzˇijeme jak v plainu tak v LATEXu. Pro u´plnost jesˇteˇ citujme dva tituly. Prvnı´ z nich je za´kladnı´ biblı´ k TEXu od samotne´ho autora TEXu (cˇeska´ alternativa [2] ji pomeˇrneˇ dobrˇe nahrazuje) a druhy´ titul obsahuje informace o TEXovy´ch souvislostech, tj. popis spolupracujı´cı´ch programu˚ v beˇzˇny´ch distribucı´ch, implementace fontu˚, vkla´da´nı´ obra´zku˚ apod. [8] [9]
Donald E. Knuth. The TEXbook. Mnohona´sobne´ vyda´nı´. Addison Wesley, 1986–*. Dı´l A z peˇtidı´lne´ monografie k TEXu a METAFONTu „Computers & Typesetting“. Petr Olsˇa´k. Typograficky´ syste´m TEX. CSTUG 1995.
Dalsˇ´ı text v tomto manua´lu se veˇnuje za´kladu˚m TEXu, ktere´ by´vajı´ shodne´ prˇi pouzˇitı´ veˇtsˇiny forma´tu˚. Uka´zky budeme pro jednoduchost nada´le zkousˇet ve forma´tu csplain, protozˇe jinak bychom museli kolem vlastnı´ho textu uka´zky prˇidat zmı´neˇne´ „obkladove´ rˇa´dky“ za´visle´ na pouzˇite´m „druhu“ LATEXu.
Technicke´ pozadı´ forma´tu˚ V prˇedchozı´m textu jsme na mnoha mı´stech hovorˇili o forma´tech TEXu (plain, LATEX, csplain), ale zatı´m jsme porˇa´dneˇ nerˇekli, co to je. Forma´t je bina´rnı´ soubor (v TEXove´ implementaci ma´ prˇ´ıponu .fmt), ktery´ zahrnuje: . vy´chozı´ sadu definic, ktera´ rozsˇirˇuje vestaveˇne´ rˇ´ıdicı´ sekvence o dalsˇ´ı, pro uzˇivatele veˇtsˇinou snadneˇji pouzˇitelne´, . vy´chozı´ nastavenı´ vnitrˇnı´ch parametru˚ TEXu (naprˇ´ıklad sˇ´ırˇka odstavce nebo velikost odstavcove´ zara´zˇky), . vy´chozı´ fonty, ktere´ budou v dokumentu pouzˇity, pokud uzˇivatel nespecifikuje jine´, . vzory deˇlenı´ vybrany´ch jazyku˚, podle ktery´ch TEX deˇlı´ slova prˇi zalamova´nı´ odstavce. Azˇ na vzory deˇlenı´ lze vsˇe ostatnı´ ve vlastnı´m dokumentu pomocı´ TEXovy´ch definic dodatecˇneˇ meˇnit. Pro nacˇtenı´ vzoru˚ deˇlenı´ jednotlivy´ch jazyku˚ ma´ TEX specia´lnı´ rˇ´ıdicı´ sekvenci \patterns, ktera´ funguje jen prˇi vytva´rˇenı´ forma´tu. Existuje jesˇteˇ jedna rˇ´ıdicı´ sekvence, ktera´ ma´ smysl pouze prˇi generova´nı´ forma´tu: \dump. Tento prˇ´ıkaz zpu˚sobı´ ulozˇenı´ „nabyty´ch veˇdomostı´“ TEXu z jeho vnitrˇnı´ pameˇti do bina´rnı´ho forma´tove´ho souboru *.fmt a ukoncˇ´ı cˇinnost TEXu. Tento soubor se mu˚zˇe pozdeˇji prˇi startu TEXu nacˇ´ıst, a TEX tı´m zacˇ´ına´ se svy´mi znalostmi z mı´sta, kde naposledy nacˇ´ıta´nı´ definic skoncˇil v dobeˇ prˇ´ıkazu \dump. Prˇ´ıkazy \patterns a \dump umı´ specia´lnı´ varianta TEXu zvana´ iniTEX. V novy´ch implementacı´ch TEXu nenı´ tato varianta reprezentova´na samostatny´m programem, ale vyvola´ se prostrˇednictvı´m prˇepı´nacˇe -i nebo -ini. Naprˇ´ıklad k vygenerova´nı´ forma´tu plain lze postupovat takto: > tex -ini plain * \dump
TEX zde ve varianteˇ iniTEX nacˇetl soubor definic plain.tex a ulozˇil nabyte´ veˇdomosti do souboru plain.fmt. Nynı´ lze forma´tovy´ soubor pouzˇ´ıt: > tex &plain document
12
V beˇzˇny´ch TEXovy´ch distribucı´ch je implementova´na neˇjaky´m zpu˚sobem zkratka, ktera´ uzˇivateli umozˇnı´ mı´sto tex &plain psa´t pouze tex a trˇeba mı´sto tex &latex psa´t pouze latex.
Rozmeˇrove´ jednotky pouzˇı´vane´ v TEXu a typografii Z historicky´ch du˚vodu˚ v typografii sta´le prˇezˇ´ıvajı´ meˇrne´ jednoty rozdı´lne´ od soustavy SI. Za´kladnı´ meˇrnou jednotkou, ktera´ se pouzˇ´ıva´ v anglosasky´ch zemı´ch, je jednotka point (pt), ktera´ ma´ rozmeˇr asi trˇetinu milimetru. Dvana´ctina´sobek je pica (cˇteme pajka, pc). Jednotkou, ktera´ se pouzˇ´ıvala v Evropeˇ, je „Didotu˚v bod“ (dd), ktery´ je veˇtsˇ´ı nezˇ point, ale zhruba taky meˇrˇ´ı trˇetinu milimetru. Dvana´ctina´sobek tohoto bodu je cicero (cc). V pocˇ´ıtacˇovy´ch programech pro sazbu se pouzˇ´ıva´ pocˇ´ıtacˇovy´ bod (bp), ktery´ je jen velmi nepatrneˇ veˇtsˇ´ı. 72 pocˇ´ıtacˇovy´ch bodu˚ se prˇesneˇ vejde do jednoho palce (in, inch pouzˇ´ıvany´ prˇedevsˇ´ım v Americe). Vsˇechny tyto jednotky je mozˇne´ pouzˇ´ıt v TEXu jako dvoupı´smenove´ zkratky, jak ukazuje na´sledujı´cı´ tabulka. Navı´c lze pouzˇ´ıt jednotky odvozene´ z metru. pt pc bp dd cc in cm mm sp em ex
monotypovy´ bod pica pocˇ´ıtacˇovy´ bod Didotu˚v bod cicero palec (inch, coul) centimetr milimetr jednotka TEXu velikost pı´sma vy´sˇka male´ho x
. 1 pt = 1/72,27 in = 0,35146 mm 1 pc = 12 pt 1 bp = 1/72 in 1 dd = 1238/1157 pt 1 cc = 12 dd 1 in = 25,4 mm 1 cm = 10 mm . 1 mm = 2,84528 pt 1 sp = 1/65536 pt za´visle´ na aktua´lnı´m pı´smu za´visle´ na aktua´lnı´m pı´smu
Velikost pı´sma se meˇrˇ´ı zhruba jako celkova´ vy´sˇka rˇa´dku, ktery´ obsahuje vsˇechny znaky pı´sma (mimo akcentovane´ verza´lky, tj. neuvazˇujeme v takove´m rˇa´dku ha´cˇky a cˇa´rky nad velky´mi pı´smeny). Zhruba to take´ odpovı´da´ sˇ´ırˇce velke´ho pı´smene M (odtud jednotka em). Bohuzˇel, na jednotlivy´ch pı´smech nenı´ nic spolecˇne´ho, co by se dalo vzˇdy jednodusˇe zmeˇrˇit a prˇesneˇ rˇ´ıci, zˇe pra´veˇ to je ona velikost pı´sma.
Pra´ce s fonty Implicitnı´ fonty, ktere´ jsou v kazˇde´ implementaci TEXu k dispozici a ktere´ jsou neza´visle´ na pouzˇite´m operacˇnı´m syste´mu, jsou fonty rodiny Computer Modern. Beˇzˇna´ antikva v te´to rodineˇ ma´ na´zev cmr10. To je zkratka pro „Computer Modern Roman ve velikosti 10pt“. Fonty Computer Modern by´vajı´ uzˇ nacˇteny ve forma´tu a pro jednotlive´ varianty (antikva, kurzı´va, polotucˇne´, strojopis) by´vajı´ prˇipraveny prˇepı´nacˇe \rm, \it, \bf, \tt. Fonty Computer Modern neobsahujı´ akcentovana´ pı´smena (s ha´cˇky a cˇa´rkami). Proto jsou ve forma´tu csplain mı´sto nich implicitneˇ nacˇteny tak zvane´ CSfonty, ktere´ rozsˇirˇujı´ Computer Modern fonty o pı´smena s akcenty z cˇeske´ a slovenske´ abecedy. Beˇzˇna´ antikva v te´to rodineˇ ma´ na´zev csr10. LATEX take´ implicitneˇ pracuje s rodinou Computer Modern a CSLATEX navı´c po zavedenı´ stylu czech.sty (prˇ´ıkazem \usepackage{czech}) prˇepı´na´ na implicitnı´ pouzˇitı´ CSfontu˚. Pak je tedy mozˇne´ psa´t cˇesky´ text. 13
Kromeˇ toho LATEX mu˚zˇe pracovat s jiny´m rozsˇ´ırˇenı´m Computer Modern fontu˚, s tzv. DC nebo EC fonty. Tyto fonty majı´ specificke´ ko´dova´nı´ (v LATEXu oznacˇovane´ jako T1) a obsahujı´ vsˇechny znaky abeced latinkou pı´sˇ´ıcı´ch evropsky´ch zemı´. Ve vsˇech forma´tech ale mu˚zˇete zave´st novy´ prˇepı´nacˇ pro nove´ pı´smo pomocı´ prˇ´ıkazu \font. Ten ma´ na´sledujı´cı´ syntaxi: \font\přepínač=název-fontu nepovinné parametry zvětšení
Naprˇ´ıklad \font\titulfont=csr10 scaled \magstep2
zavede do TEXu font csr10 (tedy beˇzˇnou pocˇesˇteˇnou antikvu odvozenou z Computer Modern) ve zveˇtsˇenı´ 1,44 kra´t norma´lnı´ velikost, ktera´ je 10 bodu˚. Tento font se pak v textu aktivuje prˇepı´nacˇem \titulfont. Procˇ zrovna koeficient 1,44? To je koeficient, pro ktery´ byla v TEXu vytvorˇena zkratka \magstep2. Na´sledujı´cı´ tabulka shrnuje vsˇechny zkratky typu \magstep, ktere´ jsou definova´ny ve vsˇech beˇzˇneˇ pouzˇ´ıvany´ch forma´tech. sekvence
koeficient
implementova´no jako
\magstep0 \magstep1 \magstep2 \magstep3 \magstep4 \magstep5 \magstephalf
1:1 (zˇa´dne´ zveˇtsˇenı´) 1,2 1,22 = 1,44 1,23 = 1,728 1,24 = 2,0736 5 1,2 √ =. 2,48832 1,2 = 1,095445
1000 1200 1440 1728 2074 2488 1095
Odstupnˇova´nı´ jednotlivy´ch velikostı´ pı´sma pomocı´ mocnin cˇ´ısla 1,2 by´va´ v typografii dobry´m zvykem. Ve sloupci „implementova´no jako“ vidı´me, zˇe koeficient se za slovem magstep (stejneˇ jako na mnoha dalsˇ´ıch mı´stech v TEXu) zada´va´ jako cele´ cˇ´ıslo odpovı´dajı´cı´ tisı´cina´sobku uvazˇovane´ hodnoty. Chceme-li tedy pouzˇ´ıt font dvojna´sobneˇ velky´, pouzˇijeme scaled 2000 a prˇi pozˇadavku na polovicˇnı´ velikost pı´sˇeme scaled 500. Kromeˇ koeficientu zveˇtsˇenı´ (slovo scaled) mu˚zˇeme chtı´t zveˇtsˇit font bez ohledu na jeho pu˚vodnı´ velikost do na´mi pozˇadovane´ velikosti. K tomu se pouzˇ´ıva´ slovo at, naprˇ´ıklad: \font\prvni=csr10 at 20pt \font\druhy=csr10 scaled 2000
Oba rˇa´dky te´to uka´zky zava´deˇjı´ stejny´ font ve stejne´m zveˇtsˇenı´. Rodina pı´sma Computer Modern (a jeho odvozeniny, naprˇ´ıklad CSfonty) obsahuje ru˚zne´ velikosti stejne´ varianty pı´sma, prˇitom tyto alternativy nejsou jen stejnomeˇrny´m na´sobenı´m vsˇech rozmeˇru˚. Doporucˇuje se, zvla´sˇteˇ v mensˇ´ıch velikostech pı´sma, pouzˇ´ıvat implicitnı´ velikost pı´sma a da´le ji nezmensˇovat ani nezveˇtsˇovat. Implicitnı´ velikost pı´sma je oznacˇena cˇ´ıslem v na´zvu fontu, tj. naprˇ´ıklad csr10 ma´ implicitnı´ velikost 10 pt a csr5 ma´ velikost 5 pt. Srovna´me vy´sledek tohoto prˇ´ıkladu: 14
\font\zvetseny=csr5 at10pt \font\normalni=csr10 \normalni Tady je přirozená velikost písma 10 bodů \zvetseny a tady je písmo navržené pro pět bodů zvětšeno na 10 bodů.
Na vy´stupu dostaneme: Tady je přirozená velikost 10 bodů a tady je písmo navržené pro pět bodů zvětšeno na 10 bodů.
Prˇepnout pı´smo dokumentu do jine´ rodiny fontu˚ znamena´ postarat se o zmeˇnu vy´znamu vsˇech prˇepı´nacˇu˚ jednotlivy´ch variant pı´sma (\rm, \bf, \it a \tt) a nezapomenout na vhodnou zmeˇnu fontu te´zˇ v nadpisech a v dalsˇ´ıch velikostech pı´sma, ktere´ jsou v dokumentu pouzˇity. Jednoduche´ definice alternativnı´ch prˇepı´nacˇu˚ najdeme pro csplain v na´sledujı´cı´ch souborech: soubor
Rodina fontu˚
cavantga.tex cbookman.tex chelvet.tex cncent.tex cpalatin.tex ctimes.tex
Avantgarde Book Bookman Helvetica New Century Palatino Times Roman
Tyto rodiny fontu˚ jsou instalova´ny v kazˇde´m vy´stupnı´m PostScriptove´m zarˇ´ızenı´, takzˇe s teˇmito fonty mu˚zˇeme v TEXu pracovat, anizˇ bychom je museli mı´t zakoupene´. TEX samotny´ totizˇ pracuje pouze s metricky´mi informacemi k fontu˚m a do vy´stupu vkla´da´ pouze odkazy na fonty. Metricke´ informace jsou obvykle k dispozici zdarma. Pokud budeme tisknout na PostScriptove´m zarˇ´ızenı´, pak jsme s cenou PostScriptove´ho modulu tyto fonty vlastneˇ koupili a mu˚zˇeme v nich tisknout TEXove´ dokumenty. Pokud budeme tisknout na zarˇ´ızenı´ bez PostScriptu, pak je vhodne´ PostScriptovy´ ko´d zpracovat volneˇ dostupny´m programem Ghostscript, ktery´ ma´ v sobeˇ zahrnuty volneˇ dostupne´ alternativy k uvedeny´m za´kladnı´m fontu˚m. Rozdı´l mezi alternativou a draze koupeny´m fontem prˇitom ani moc nepozna´me. Chceme-li naprˇ´ıklad prˇepnout do pı´sma Bookman, stacˇ´ı napsat do dokumentu \input bookman. Takovou veˇc jsme uzˇ ilustrovali na nasˇem prˇ´ıkladeˇ v prˇedchozı´m textu. Podı´va´me-li se do souboru˚ cbookman.tex a dalsˇ´ıch, ktere´ najdeme v instalaci TEXu neˇkde v adresa´rˇi csplain, zjistı´me, zˇe zde nejsou prˇedefinova´ny prˇ´ımo prˇepı´nacˇe \rm, \bf, \it a \tt, ale zˇe se zde mı´sto nich pracuje s prˇepı´nacˇi \tenrm, \tenbf, \tenit a \tentt. To jsou totizˇ v plainu (i csplainu) skutecˇne´ prˇepı´nacˇe „nejnizˇsˇ´ı u´rovneˇ“. Pro uzˇivatele se pak definujı´ znacˇky \rm, \bf, \it a \tt s dalsˇ´ım prˇihle´dnutı´m na chova´nı´ teˇchto znacˇek v matematicke´m mo´du. Naprˇ´ıklad \bf je definova´no takto: \def\bf{\tenbf \fam\bffam}
15
Je-li tedy prˇedefinova´n prˇepı´nacˇ \tenbf, bude se od te´to chvı´le chovat jinak i znacˇka \bf. Ko´d \fam\bffam zde nebudeme rozebı´rat, protozˇe prˇekracˇuje ra´mec tohoto u´vodnı´ho textu. Spokojı´me se s tı´m, zˇe v textove´m mo´du nema´ tento ko´d zˇa´dny´ vliv a v matematicke´m mo´du cosi udeˇla´. Prˇ´ıkaz \fontname\přepínač\space se promeˇnı´ zpeˇt v pu˚vodnı´ na´zev fontu ukoncˇeny´ mezerou. Tato vlastnost byla pouzˇita v nasˇem prˇ´ıkladu, kde jsme zava´deˇli veˇtsˇ´ı font pomocı´ te´to konstrukce: \font\titulfont=\fontname\tenbf\space scaled \magstep2
% větší font
Vy´hodou tohoto za´pisu je fakt, zˇe nemusı´me zna´t na´zev fontu, stacˇ´ı si zapamatovat za´kladnı´ prˇepı´nacˇe \tenrm, \tenbf, \tenit a \tentt. Na´zvy fontu˚ se nejenom teˇzˇko pamatujı´, ale take´ se mohou zmeˇnit, pokud prˇed takovou konstrukcı´ pouzˇijeme \input cbookman nebo neˇco podobne´ho. V LATEXu asi takove´ obraty nebudeme potrˇebovat, protozˇe o zavedenı´ potrˇebny´ch fontu˚ pro ru˚zne´ velikosti se LATEX stara´ sa´m. Pro prˇepı´na´nı´ mezi rodinami fontu˚ pouzˇ´ıva´me v LATEXu prˇ´ıkaz \usepackage a na´sleduje ve slozˇeny´ch za´vorka´ch jedno ze slov avantgar, bookman, helvet, newcent, palatino, times. Pı´smeno c na zacˇa´tku na´zvu rodiny fontu˚ (na rozdı´l od csplainu) nepı´sˇeme. Mozˇna´ na´s zacˇne zajı´mat, jake´ fonty ma´me v TEXove´ instalaci prˇipraveny k pouzˇitı´. Stacˇ´ı udeˇlat mensˇ´ı pru˚zkum v adresa´rˇi tfm (odvozeno od zkratky TEX font metrics) a podı´vat se do jednotlivy´ch podadresa´rˇu˚ na na´zvy prˇ´ıtomny´ch souboru˚. To jsou soucˇasneˇ na´zvy fontu˚, ktere´ jsou pouzˇitelne´ v prˇ´ıkaze \font. Chceme rychle veˇdeˇt, jak ktery´ font vypada´? Napisˇme na prˇ´ıkazovy´ rˇa´dek tex testfont
TEX se na´s vypta´ na na´zev fontu, ktery´ zada´me bez prˇ´ıpony .tfm. Pak na´s pozˇa´da´ o instrukci, co s nacˇteny´m fontem ma´ deˇlat. Nejle´pe je odpoveˇdeˇt \table\end a podı´vat se na tabulku znaku˚ testovane´ho fontu trˇeba pomocı´ xdvi testfont.
Specia´lnı´ znaky V te´to sekci popı´sˇeme chova´nı´ specia´lnı´ch vstupnı´ch znaku˚, ktere´ nejsou TEXem veˇtsˇinou slepeˇ prˇepisova´ny do vy´stupu, ale TEX na neˇ urcˇity´m zpu˚sobem zareaguje. Jednı´m takovy´m specia´lnı´m znakem je \ (zpeˇtne´ lomı´tko). Pokud za nı´m na´sleduje pı´smeno, TEX prˇecˇte rˇ´ıdicı´ sekvenci typu \slovo ukoncˇenou prvnı´m znakem, ktery´ nenı´ pı´smeno (separa´torem). Je-li tı´mto separa´torem mezera, pak se na vy´stupu neobjevı´. Ostatnı´ separa´tory nejsou na rozdı´l od mezery ignorova´ny. Vyzkousˇejte si: Zkouším \TeX. % Tečka je separátor sekvence \TeX, který se vytiskne Píšu v \TeX u % Separátorem je mezera před u, která se netiskne \TeX je formátor.
Z poslednı´ho rˇa´dku uka´zky dosta´va´me nespra´vny´ vy´sledek: TEXje forma´tor. Projevila se totizˇ dalsˇ´ı vlastnost TEXu: jednu mezeru i vı´ce mezer za sebou povazˇuje za mezeru jedinou a ta v nasˇem prˇ´ıkladeˇ funguje jako separa´tor, ktery´ mizı´. Proto se cˇasto pouzˇ´ıvajı´ „zbytecˇne´ skupiny“, jejichzˇ za´vorky majı´ funkci separa´toru rˇ´ıdicı´ sekvence:
16
Píšu v \TeX{}u. \TeX{} je formátor. Nebo raději píšu v {\TeX}u a používám {\TeX} jako formátor.
Pokud za zpeˇtny´m lomı´tkem na´sleduje neˇco jine´ho, nezˇ pı´smeno (naprˇ´ıklad \$), je rˇ´ıdicı´ sekvence tvorˇena jen tı´mto znakem. Mezery za takovy´mi jednoznakovy´mi sekvencemi zu˚sta´vajı´ zachova´ny: Pracuji se 100\% nasazením.
Vidı´me, zˇe dalsˇ´ım specia´lnı´m znakem v TEXu je mezera. Jak jsme prˇed chvı´lı´ uvedli, vı´ce mezer za sebou se chova´ jako mezera jedina´. Vsˇechny mezery na zacˇa´tku rˇa´dku jsou ignorova´ny azˇ po prvnı´ znak, ktery´ nenı´ mezera. Toho mu˚zˇeme vyuzˇ´ıt pro zlepsˇenı´ prˇehlednosti nasˇich vstupnı´ch textu˚ (viz nasˇe uka´zka s vy´cˇtem prvku˚). Konec rˇa´dku je v TEXu interpretova´n jako mezera, ktera´ se vytiskne, pokud nenı´ separa´torem rˇ´ıdicı´ sekvence. Pokud si mezeru z konce rˇa´dku neprˇejeme, mu˚zˇeme ji „zamaskovat“ komenta´rˇovy´m znakem: Toto
je zvrácený
pří% klad v~\TeX u.
Pra´zdny´ rˇa´dek vytvorˇ´ı internı´ prˇ´ıkaz \par, ktery´ ukoncˇuje odstavec. Nenı´-li co ukoncˇovat, \par nedeˇla´ nic. Proto vı´ce pra´zdny´ch rˇa´dku˚ pod sebou se chovajı´ stejneˇ jako jeden pra´zdny´ rˇa´dek. I toho lze vyuzˇ´ıt pro zvy´sˇenı´ prˇehlednosti zdrojovy´ch textu˚. V na´sledujı´cı´ tabulce je prˇehled vsˇech znaku˚, ktere´ by´vajı´ nastaveny jako specia´lnı´: \ mezera konec rˇa´dku { } $ & # ^ _ ~ %
uvozuje rˇ´ıdicı´ sekvenci specia´lnı´ vlastnosti popsa´ny vy´sˇe specia´lnı´ vlastnosti popsa´ny vy´sˇe zaha´jenı´ skupiny, parametru nebo definice konec skupiny, parametru nebo definice prˇepı´nacˇ matematicke´ho mo´du separa´tor pouzˇ´ıvany´ v tabulka´ch oznacˇenı´ parametru v definicı´ch konstruktor mocniny v matematicke´m mo´du konstruktor indexu v matematicke´m mo´du nedeˇlitelna´ mezera zahajuje na rˇa´dku komenta´rˇ
Specia´lnı´ vy´znam kazˇde´ho znaku lze v TEXu nastavit pomocı´ urcˇity´ch definic. Vy´sˇe uvedena´ tabulka tedy nenı´ v nicˇem definitivnı´. Uvedeny´ seznam specia´lnı´ch znaku˚ by´va´ takto nastaven ve forma´tech plain, csplain i LATEX. Pokud chceme vytisknout souvislejsˇ´ı cˇa´st textu bez specia´lnı´ interpretace, musı´me teˇmto znaku˚m jejich specia´lnı´ funkce odebrat. V LATEXu se pro tyto u´cˇely pouzˇ´ıva´ LATEXove´ prostrˇedı´ vymezene´ prˇ´ıkazy \begin{verbatim} a \end{verbatim}. Vsˇe mezi
17
teˇmito prˇ´ıkazy3 se vytiskne tak, jak je napsa´no ve vstupnı´m textu. Uvedene´ prostrˇedı´ vzˇdy ukoncˇ´ı odstavec a zaha´jı´ tisk textu bez specia´lnı´ interpretace. Pokud chceme mı´t bez specia´lnı´ interpretace jen cˇa´st textu uvnitrˇ odstavce, pouzˇijeme v LATEXu prˇ´ıkaz \verb|text bez svislé čáry| nebo trˇeba \verb+text bez znaku plus+. V plainu ani v csplainu hotove´ rˇesˇenı´ na vypnutı´ specia´lnı´ interpretace znaku˚ nenajdeme. Mu˚zˇeme se inspirovat dvojicı´ \begtt a \endtt ve zdrojove´m textu tohoto manua´lu. Pokud chceme vytisknout jen jednotlive´ specia´lnı´ znaky, meˇli bychom veˇdeˇt, jakou sekvencı´ to zarˇ´ıdit. Pro znaky pouzˇ´ıvane´ v beˇzˇne´m textu ($, &, # a _) jsou ve vsˇech forma´tech prˇipraveny rˇ´ıdicı´ sekvence \$, \&, \# a \_. Tı´m pozˇadovany´ znak vytiskneme v libovolne´m fontu. Vy´jimkou je znak $, ktery´ se v kurzı´veˇ Computer Modern fontu meˇnı´ v libru: $. Je to takova´ mala´ kuriozita TEXu. S ostatnı´mi specia´lnı´mi znaky to tak jednoduche´ nenı´. V implicitneˇ nastavene´m fontu Computer Modern totizˇ tyto znaky vesmeˇs nemajı´ ve fontu svu˚j odpovı´dajı´cı´ obraz. Naprˇ´ıklad na pozici 92 bychom meˇli najı´t podle normy ASCII znak \ (zpeˇtne´ lomı´tko), ale mı´sto neˇj tam najdeme znak “ (obra´cene´ uvozovky). Nemile na´s prˇekvapı´ i jinak obycˇejny´ znak < (symbol pro relaci je mensˇ´ı), ktery´ nema´ ve fontu svu˚j obraz a mı´sto neˇho dostaneme do vy´stupu ¡ (obra´ceny´ vykrˇicˇnı´k). Pokud chceme, aby se do vy´stupu veˇrneˇ dostal znak, ktery´ zna´me z tabulky ASCII, musı´me pouzˇ´ıt variantu fontu \tt (strojopis), nebo jinou rodinu fontu, ktera´ ma´ fonty v ko´dova´nı´ prˇesneˇ podle ASCII. Na´sledujı´cı´ tabulka ukazuje vsˇechny beˇzˇne´ ASCII znaky, ktere´ majı´ v Computer Modern jiny´ obraz: ko´d znaku
\tt (strojopis)
Computer Modern
60 62 92 123 124 125
< > \ { | }
¡ ¿ “ – — ˝
Znak z dane´ pozice ve fontu vytiskneme pomocı´ prˇ´ıkazu \char kód. Naprˇ´ıklad \char92 na´m vytiskne ve strojopisu \ a v antikveˇ Computer Modern “. Pokud si nepamatujeme cˇ´ıselnou hodnotu ASCII ko´du neˇjake´ho znaku, mu˚zˇeme mı´sto nı´ pouzˇ´ıt konstrukci ‘\znak, takzˇe naprˇ´ıklad ‘\\ vra´tı´ cˇ´ıslo 92. Proto prˇi tisku zpeˇtne´ho lomı´tka pı´sˇeme {\tt\char‘\\}. Budeme-li chtı´t vytisknout neˇktery´ ze znaku˚ < > \ { | }, musı´me si uveˇdomit, jaky´ vy´znam dany´ znak reprezentuje. Veˇtsˇinou se jedna´ o matematicke´ symboly, takzˇe pro neˇ pouzˇijeme odpovı´dajı´cı´ rˇ´ıdicı´ sekvence v matematicke´m mo´du (mezi dveˇma dolary). Relace „je mensˇ´ı“, „je veˇtsˇ´ı“ a symbol pro absolutnı´ hodnotu lze dokonce v matematicke´m mo´du napsat prˇ´ımo, zatı´mco v textove´m mo´du mimo strojopis se promeˇnı´ ve sˇpaneˇlskou interpunkci nebo pomlcˇku. Na´sledujı´cı´ tabulka uda´va´ doporucˇeny´ zpu˚sob za´pisu prˇ´ıslusˇny´ch znaku˚ podle jejich vy´znamu: 3
s vy´jimkou sekvence cˇtrna´cti znaku˚ „\end{verbatim}“
18
vy´znam znaku
jak jej zapsat
jak se vytiskne
relace „je mensˇ´ı“ relace „je veˇtsˇ´ı“ uzavrˇeny´ interval ASCII znaky < > rozdı´l mnozˇin ASCII znak \ Mnozˇinove´ za´vorky ASCII znaky { } absolutnı´ hodnota ASCII znak | vlnka jako akcent samostatny´ akcent ASCII znak ~ strˇ´ısˇka jako akcent ASCII znak ^
$a < b$ $a > b$ $\langle a,b\rangle$ {\tt < >} $A\setminus B$ {\tt\char‘\\} $M = \{a,b,c\}$ {\tt\char‘\{ \char‘\}} $|x|$ {\tt |} \~a \~{} {\tt\char‘\~} \^a {\tt\char‘\^}
ab ha, bi < > A\B \ M = {a, b, c} { } |x| | a˜ ˜ ~ aˆ ^
V LATEXu lze mı´sto konstrukcı´ {\tt\char‘\znak} pouzˇ´ıt jednodusˇsˇ´ıho \verb|znak|. Ovsˇem prˇ´ıkaz \verb, ktery´ odebı´ra´ znaku jeho specia´lnı´ funkci a zapı´na´ tisk ve strojopisu, nemusı´ fungovat vsˇude. Naprˇ´ıklad jej nelze pouzˇ´ıt jako argument jine´ho prˇ´ıkazu (\section, \uv, apod.).
Umı´steˇnı´ sazby na papı´rˇe Prˇi pozna´va´nı´ TEXu si jisteˇ velmi brzo polozˇ´ıme ota´zku, jak je mozˇne´ zmeˇnit velikost okraju˚, neboli jak umı´stit sazbu na papı´rˇe. V plainu jsou implicitneˇ nastaveny velikosti okraju˚ jeden palec z kazˇde´ strany papı´ru americke´ho forma´tu Letter. Takove´ forma´ty papı´ru u na´s veˇtsˇinou nerostou, takzˇe plain na´m na papı´ru A4 udeˇla´ jen levy´ a hornı´ okraj velikosti jeden palec a pravy´ okraj bude mensˇ´ı a spodnı´ veˇtsˇ´ı. V csplainu jsou implicitneˇ nastaveny velikosti okraju˚ jeden palec z kazˇde´ strany pro forma´t A4. Sazba je tedy v csplainu mı´rneˇ uzˇsˇ´ı a vysˇsˇ´ı, nezˇ v plainu. Sazbu prˇitom meˇrˇ´ıme bez prˇ´ıpadne´ho za´hlavı´ a bez stra´nkovy´ch cˇ´ıslic. Umı´steˇnı´ sazby meˇrˇ´ıme vzhledem k pocˇa´tku, ktery´ se nale´za´ na papı´rˇe 1 palec od leve´ho okraje a 1 palec od hornı´ho okraje. Levy´ hornı´ roh sazby se kryje s tı´mto pocˇa´tkem, pokud jsou nastaveny registry \hoffset=0pt a \voffset=0pt. Levy´ hornı´ roh sazby se posune doprava o hodnotu \hoffset a dolu˚ o hodnotu \voffset. Prˇi za´porny´ch hodnota´ch teˇchto registru˚ se sazba posunuje samozrˇejmeˇ doleva respektive nahoru. Sˇ´ırˇka sazby (prˇesneˇji sˇ´ırˇka zpracova´vane´ho odstavce) se nastavı´ pomocı´ registru \hsize. Vy´sˇka sazby na stra´nce se nastavı´ pomocı´ \vsize. V na´sledujı´cı´ uka´zce jsou uvedeny hodnoty, ktere´ nastavuje plain. \voffset=0in \hoffset=0in \hsize=6.5in \vsize=8.9in
% % % %
velikost horního okraje = \voffset + 1 palec velikost levého okraje = \hoffset + 1 palec šířka řádku, 165.1mm výška sazby, 266mm
19
Forma´t csplain ma´ registry \hoffset a \voffset take´ nulove´, ale sˇ´ırˇku a vy´sˇku sazby nastavuje odlisˇneˇ: \hsize= 159.2 mm \vsize= 239.2 mm
% šířka řádku v csplainu (šířka A4 - 2in) % výška sazby (výška A4 - 2in)
Pokud chceme nastavit vlastnı´ velikosti, doporucˇujeme nejprve registry \hoffset a \voffset nastavit na hodnotu −1 in a pak k nim prˇicˇ´ıst hodnoty pozˇadovany´ch okraju˚ pomocı´ prˇ´ıkazu \advance. Da´le doporucˇujeme vy´sˇku sazby prˇesneˇ rozmeˇrˇit na pocˇet rˇa´dku˚. K tomu potrˇebujeme veˇdeˇt, zˇe vzda´lenost dvou rˇa´dku˚ se urcˇ´ı pomocı´ registru \baselineskip (pozor: prˇi veˇtsˇ´ım pı´smu se toto rˇa´dkova´nı´ mu˚zˇe rozhodit). Plain i csplain nastavujı´ \baselineskip na 12 pt. Kromeˇ toho je u´cˇarˇ´ı prvnı´ho rˇa´dku od pomyslne´ho hornı´ho okraje sazby vzda´leno o \topskip, ktery´ ma´ v plainu i v csplainu hodnotu 10 pt. Protozˇe se vy´sˇka sazby \vsize meˇrˇ´ı od hornı´ho pomyslne´ho okraje po u´cˇarˇ´ı poslednı´ho rˇa´dku na stra´nce, vycha´zı´ \vsize jako \topskip + (n − 1) × \baselineskip, kde n je pocˇet rˇa´dku˚ na stra´nce. Nastavenı´ velikosti sazby tedy mu˚zˇeme udeˇlat naprˇ´ıklad takto: \voffset=-1in \advance\voffset by 2cm % velikost horního okraje bude 2cm \hoffset=-1in \advance\hoffset by 1.5cm % velikost pravého okraje bude 1.5cm \hsize=10cm % šířka řádku bude 10cm \vsize=\topskip \advance\vsize by 15\baselineskip % sazba bude mít 16 řádků na stránce
V LATEXu se prˇi nastavova´nı´ rozmeˇru˚ sazby pouzˇ´ıvajı´ registry specia´lneˇ deklarovane´ v tomto forma´tu. Jedna´ se o \textheight (vy´sˇka sazby), \textwidth (sˇ´ırˇka sazby), \oddsidemargin (levy´ okraj na lichy´ch stra´nka´ch), \evensidemargin (levy´ okraj na sudy´ch stra´nka´ch) a \topmargin (hornı´ okraj). LATEX pak sa´m podle hodnot teˇchto registru˚ nastavı´ vnitrˇnı´ registry TEXu \hoffset, \voffset, \hsize a \vsize. Uzˇivatel LATEXu by k nim nemeˇl prˇistupovat prˇ´ımo a navı´c by meˇl s registry zacha´zet „LATEXovsky“, cozˇ prakticky znamena´, zˇe mı´sto jednoduche´ho prˇirˇazenı´ nebo prˇ´ıkazu \advance by meˇl zapisovat sve´ pozˇadavky zhruba takto: \setlength\topmargin{-1in} \addtolength\topmargin{2cm} % velikost horního okraje bude 2cm \setlength\oddsidemargin{-1in} \addtolength\oddsidemargin{1.5cm} % velikost pravého okraje bude 1.5cm \setlength\evensidemargin{\oddsidemargin} \setlength\textwidth{10cm} % šířka sazby bude 10cm \setlength\textheight{\topskip} \addtolength\textheight{15\baselineskip} % 16 řádků
TEXem veˇtsˇinou nenastavujeme parametry pro archovou monta´zˇ sazby, takzˇe na´m vy´sˇe uvedene´ prˇ´ıklady pro nastavenı´ velikosti sazby bohateˇ stacˇ´ı. Pokud bychom chteˇli se sazbou da´le manipulovat a umist’ovat ji na jednotlive´ archy podle urcˇity´ch pozˇadavku˚, pouzˇijeme veˇtsˇinou pomocne´ programy, ktere´ manipulujı´ s PostScriptovy´m vy´stupem. Prˇedstavme si, zˇe chceme stra´nky tohoto manua´lu zmensˇit tak, aby se vesˇly dveˇ vedle sebe na stranu A4. Da´le chceme tyto stra´nky usporˇa´dat tak, abychom po 20
oboustranne´m vytisˇteˇnı´ manua´lu na sˇest archu˚ A4 dostali svazecˇek, ktery´ prˇelozˇ´ıme v pu˚li a ma´me knı´zˇecˇku s 24 na sebe navazujı´cı´mi stra´nkami. Pro takovy´ u´kol se asi nejle´pe hodı´ programy z volneˇ sˇ´ırˇene´ho balı´cˇku psutils. Na prˇ´ıkazovy´ rˇa´dek mu˚zˇeme postupneˇ napsat tyto instrukce: > > > > > > > >
csplain prvni dvips prvni psbook prvni.ps p0.ps pstops "4:[email protected](21cm,.5cm)[email protected](21cm,14.4cm)" p0.ps p1.ps pstops "4:[email protected](21cm,.5cm)[email protected](21cm,14.4cm)" p0.ps p2.ps lpr -Ptiskarna p1.ps lpr -Ptiskarna p2.ps rm prvni.ps p0.ps p1.ps p2.ps
Prˇ´ıkaz dvips prˇevede dokument do PostScriptu a psbook usporˇa´da´ stra´nky pro pouzˇitı´ do „svazecˇku“. Prvnı´ vola´nı´ prˇ´ıkazu pstops vybere vzˇdy dveˇ ze cˇtyrˇ stra´nek, zmensˇ´ı je na 0,7 na´sobek pu˚vodnı´ velikosti (@.7) a umı´stı´ je do archu podle uvedeny´ch parametru˚. Tı´m vznika´ podklad pro tisk lı´covy´ch stran archu˚ A4 (p1.ps). Podobneˇ druhe´ vola´nı´ prˇ´ıkazu pstops vytvorˇ´ı podklad pro rubovou stranu archu˚. Vlastnı´ tisk (lpr) pak mu˚zˇeme prove´st na tiska´rneˇ, ktera´ neumı´ oboustranny´ tisk, ve dvou pru˚chodech. Prˇed druhy´m pru˚chodem obra´tı´me vytisˇteˇne´ papı´ry a vlozˇ´ıme je do za´sobnı´ku tiska´rny znovu.
Overfull/Underfull box Prˇi pra´ci s TEXem narazı´me postupneˇ na celou rˇadu chybovy´ch hla´sˇenı´, prˇi ktery´ch se program veˇtsˇinou zastavı´ a vyzve na´s k neˇjake´ akci. Acˇkoli trˇeba jen stiskneme kla´vesu Enter, uveˇdomı´me si, zˇe je neˇco sˇpatneˇ a pokusı´me se chybu rˇesˇit. Kromeˇ toho TEX vypisuje varova´nı´ o prˇetecˇeny´ch (overfull) a nedoplneˇny´ch (underfull) boxech. Protozˇe se prˇi teˇchto vy´pisech nezastavuje, povazˇujı´ to mnozı´ zacˇa´tecˇnı´ci za mensˇ´ı zlo, ktere´ho si nenı´ nutne´ vsˇ´ımat. Nenı´ to tak docela pravda. Prˇetecˇene´ boxy (overfull) bychom meˇli rovneˇzˇ zarˇadit do kategorie chyb. TEXu se totizˇ nepodarˇilo vmeˇstnat sazbu do prˇedepsane´ sˇ´ırˇky \hsize. Prakticky to znamena´, zˇe sazba v dane´m mı´steˇ „vycˇnı´va´“ na prave´ straneˇ ven smeˇrem do okraje. Hla´sˇenı´ obsahuje u´daj, o kolik bodu˚ sazba vycˇnı´va´, cˇ´ıslo rˇa´dku ve zdrojove´m ko´du a kus textu, ktery´ urcˇuje proble´move´ mı´sto. Plain a csplain da´le nastavuje registr \overfullrule na 5 pt, takzˇe se v sazbeˇ na proble´move´m mı´steˇ objevı´ teˇzˇko prˇehle´dnutelny´ cˇerny´ obde´lnı´k. LATEX tento registr nuluje, takzˇe cˇerne´ obde´lnı´ky nejsou videˇt, cozˇ da´va´ uzˇivateli pocit, zˇe je vsˇechno v porˇa´dku. Objevı´-li se prˇetecˇeny´ box v odstavci, veˇtsˇinou stacˇ´ı „rozvolnit“ mezery. Mezery mezi slovy majı´ totizˇ pruzˇnost (mohou se smrsˇt’ovat nebo natahovat). Tato pruzˇnost nenı´ neomezena´, ale je dana´ jisty´mi parametry podle pouzˇite´ho fontu. Chceme-li da´t mezera´m veˇtsˇ´ı volnost v roztahova´nı´, nezˇ si prˇa´l autor fontu, pisˇme naprˇ´ıklad \emergencystretch=2cm. TEX ma´ plno dalsˇ´ıch vnitrˇnı´ch registru˚, jejichzˇ nastavenı´m ovlivnı´me algoritmy na sestavova´nı´ odstavce. Jejich popis ovsˇem prˇekracˇuje ra´mec tohoto u´vodnı´ho textu. Nedoplneˇne´ boxy (underfull) mu˚zˇeme na rozdı´l od prˇetecˇeny´ch boxu˚ povazˇovat pouze za varova´nı´. TEX na´s informuje, zˇe byl nucen v neˇktere´m mı´steˇ nata´hnout mezery vı´c, nezˇ je esteticky zdra´vo. Hodnota badness, ktera´ hla´sˇenı´ doprova´zı´, uda´va´ 21
zhruba stupenˇ esteticke´ vady v takove´m mı´steˇ (nebo take´ velikost na´silı´ provedene´ na mezera´ch). Cˇ´ım vysˇsˇ´ı badness, tı´m horsˇ´ı vy´sledek. Maxima´lnı´ hodnota badness je 1000, cozˇ znacˇ´ı, zˇe neˇktery´ rˇa´dek je u´plneˇ sˇpatneˇ. Stojı´ zato se podı´vat do sazby na takto oznacˇena´ mı´sta a zamyslet se, co by se dalo zmeˇnit, aby se zlepsˇila esteticka´ u´rovenˇ vy´sledku. LATEXovı´ uzˇivatele´ dosti cˇasto neopatrneˇ pracujı´ s prˇ´ıkazem \\, ktery´ se v ru˚zny´ch LATEXovy´ch prostrˇedı´ch chova´ jako ukoncˇenı´ rˇa´dku. Neˇkdy se dostane takovy´ prˇ´ıkaz i na konec odstavce, cozˇ samo o sobeˇ nema´ logiku, protozˇe na konci odstavce se samo sebou ukoncˇ´ı rˇa´dek. Pokud se tak stane, TEX na konci odstavce vytvorˇ´ı jesˇteˇ dalsˇ´ı pra´zdny´ rˇa´dek, ve ktere´m nema´ zˇa´dnou mezeru k natazˇenı´ na sˇ´ırˇku \hsize a opra´vneˇneˇ se rozcˇ´ılı´: Underfull hbox badness 1000. V tomto prˇ´ıpadeˇ vlastneˇ TEX krˇicˇ´ı na uzˇivatele, ktery´ nebyl schopen opustit principy staroda´vne´ho psacı´ho stroje a potrˇebuje mı´t k ruce tu velikou pa´ku, do ktere´ je obcˇas potrˇeba prasˇtit, aby se prˇesˇlo na novy´ rˇa´dek.
22