Te´meˇrˇ zˇa´dny´ TEXista nepouzˇ´ıva´ TEX v jeho „prˇirozene´“ podobeˇ, jak ji prˇedstavujı´ programy initex a virtex. Mı´sto toho pouzˇ´ıva´ urcˇity´ forma´t – balı´k maker, ktery´ neˇkdo prˇipravil, aby mu zjednodusˇil pra´ci. V Cˇeske´ republice se dnes pouzˇ´ıvajı´ prˇedevsˇ´ım dva takove´ forma´ty: plainTEX a LATEX. V blı´zke´ budoucnosti by se k nim mohl prˇipojit jesˇteˇ jeden: ConTEXt. A nejen prˇipojit, ale mozˇna´ i vytlacˇit LATEX z jeho dominantnı´ho postavenı´. Aby se tak mohlo sta´t, chci va´s v tomto prˇ´ıspeˇvku s ConTEXtem ra´mcoveˇ sezna´mit. ConTEXt vyvı´jı´ soukroma´ nizozemska´ spolecˇnost Pragma ADE, jmenoviteˇ pan Hans Hagen. Acˇkoli vznika´ na pu˚deˇ komercˇnı´ firmy, je cely´ ConTEXt (jeho TEXova´, MetaPostova´ a perlovska´ cˇa´st) distribuova´na zdarma pod GNU licencı´. Jedina´ omezenı´ se ty´kajı´ modifikace zdrojovy´ch souboru˚ – ty se uzˇ po prˇejmenova´nı´ nesmeˇjı´ jmenovat stejneˇ. Take´ dokumentace je sˇ´ırˇena zdarma, a to ve dvou jazycı´ch: holandsky a anglicky. Cely´ ConTEXt, vcˇetneˇ du˚lezˇity´ch perlovsky´ch programu˚ a dokumentace najdete na WWW stra´nka´ch spolecˇnosti Pragma ADE: www.pragma-ade.nl. Rozhodneˇ se vyplatı´ stahovat ho pra´veˇ odtud, protozˇe tak ma´te zajisˇteˇno, zˇe i prˇi velmi rychle´m vy´voji ConTEXtu zı´ska´te vzˇdy poslednı´ stabilnı´ verzi. ConTEXt je forma´t na podobneˇ vysoke´ u´rovni jako LATEX v tom smyslu, zˇe definuje urcˇite´ logicke´ struktury (naprˇ. kapitoly, oddı´ly, plovoucı´ prostrˇedı´ pro obra´zky apod.), se ktery´mi pak da´le pracuje (naprˇ. vytva´rˇ´ı obsahy, seznamy obra´zku˚ apod.). Proto budu v tomto textu srovna´vat ConTEXt pra´veˇ s LATEXem. Od LATEXu se ConTEXt lisˇ´ı prˇedevsˇ´ım svy´m zameˇrˇenı´m. Zatı´mco LATEX je urcˇen prˇedevsˇ´ım pro sazbu veˇdecky´ch cˇla´nku˚, kde dokonaly´ vzhled dokumentu nenı´ prima´rneˇ du˚lezˇity´ (naopak je spı´sˇe vhodne´ zachova´vat urcˇity´ standardnı´ design), ConTEXt je urcˇen prˇedevsˇ´ım pro sazbu rozsa´hly´ch elektronicky´ch dokumentu˚, ve ktery´ch design hraje vy´znamnou roli. Odtud vyply´va´ i hlavnı´ rozdı´l mezi LATEXem a ConTEXtem: na rozdı´l od LATEXu, kde te´meˇrˇ kazˇda´ zmeˇna vzhledu jednotlivy´ch logicky´ch elementu˚ vyzˇaduje „kuta´nı´ “ hluboko pod povrchem (kazˇdy´, kdo se skutecˇneˇ snazˇil zmeˇnit vzhled vy´cˇtove´ho prostrˇedı´, o tom vı´ sve´), jsou zmeˇny designu v ConTEXtu velmi snadne´. Te´meˇrˇ ke kazˇde´mu makru (v terminologii ConTEXtu prˇ´ıkaz, command), ktere´ ovlivnˇuje vzhled dokumentu, existuje specia´lnı´ prˇ´ıkaz, ktery´ upravı´ vzhled prˇ´ıslusˇne´ho logicke´ho elementu.
Dalsˇ´ım vy´razny´m rozdı´lem oproti LATEXu je fakt, zˇe ConTEXt pouzˇ´ıva´ externı´ balı´ky jen zcela vy´jimecˇneˇ. Vsˇechny du˚lezˇite´ vlastnosti jsou integrova´ny do „ja´dra“. Ja´dro je pak na TEXove´ zvyklosti pomeˇrneˇ velke´ (forma´t soucˇasne´ anglicke´ verze ConTEXtu prˇelozˇeny´ pod Linuxem pro pdfeTEX ma´ te´meˇrˇ prˇesneˇ 3,5 MB; forma´t LATEXu ma´ za stejny´ch okolnostı´ asi 660 KB). Vy´hodou tohoto prˇ´ıstupu je to, zˇe odpada´ klasicky´ proble´m se sdı´lenı´m externı´ch balı´ku˚: pokud neˇkomu posˇlu zdrojovy´ text sve´ho dokumentu, stacˇ´ı prˇilozˇit pouze me´ vlastnı´ soubory a rˇ´ıct, jaka´ nejstarsˇ´ı verze ja´dra je potrˇebna´ ke kompilaci. Od plainTEXu a LATEXu se ConTEXt lisˇ´ı jesˇteˇ jednı´m rysem: obvykle se nespousˇtı´ prˇ´ımo bina´rnı´ TEX (program virtex), ale specia´lnı´ perlovsky´ program texexec. Ten se spolu s pomocny´m programem texutil stara´ o neˇkolik veˇcı´: aby byl dokument zkompilova´n v potrˇebne´m pocˇtu pru˚beˇhu˚, aby byly zkompilova´ny a vlozˇeny pomocne´ soubory s rejstrˇ´ıky, obsahy, MetaPostovy´mi triky apod. Za´rovenˇ se take´ stara´ o spra´vu projektu˚, mo´du˚ a verzı´ (viz da´le). Dalsˇ´ımi silny´mi stra´nkami ConTEXtu je take´ vynikajı´cı´ podpora PDF (vcˇetneˇ vkla´da´nı´ JavaScriptu) a neuveˇrˇitelneˇ silna´ spolupra´ce s MetaPostem. Nezˇ se vsˇak dostaneme k teˇmto specialita´m, podı´vejme se nejdrˇ´ıve blı´zˇe na neˇktere´ „klasicke´“ vlastnosti ConTEXtu.
1. Design dokumentu jako celku Jak jsem uzˇ rˇekl, zmeˇnit vzhled dokumentu je v ConTEXtu nesmı´rneˇ jednoduche´. K tomuto u´cˇelu slouzˇ´ı cela´ sˇka´la pomocny´ch prˇ´ıkazu˚, jejichzˇ jme´na vesmeˇs zacˇ´ınajı´ (v anglicke´ verzi) slovem \setup. Obvykle se jmenujı´ \setupneˇco, pokud nastavujı´ vlastnosti jednoho prˇ´ıkazu, nebo \setupneˇcos, pokud meˇnı´ chova´nı´ cele´ trˇ´ıdy prˇ´ıkazu˚. Parametry se uva´deˇjı´ do hranaty´ch za´vorek (na rozdı´l od LATEXu hranate´ za´vorky neznamenajı´ nepovinne´ parametry, ale netextove´ parametry). Jednotlive´ parametry se obvykle oddeˇlujı´ cˇa´rkami. Pokud neˇjaky´ parametr mu˚zˇe mı´t hodnotu, prˇideˇlı´ se mu pomocı´ rovnı´tka. Da´le v textu uvedu neˇkolik prˇ´ıkladu˚. Podı´vejme se nejdrˇ´ıve na zpu˚sob, jak ovlivnit vzhled dokumentu jako celku. ConTEXt umozˇnˇuje zadat na zacˇa´tku pra´ce velikost papı´ru, a to jak velikost papı´ru, na ktery´ se sa´zı´, tak velikost papı´ru, na ktery´ bude tiskova´ strana umı´steˇna. Naprˇ. 1
prˇ´ıkaz
stra´nku, bez za´hlavı´. Textovy´ sloupec je na papı´rˇe umı´steˇn 4 cm shora a 5 cm zleva. Za´patı´ ma´ vy´sˇku dvou rˇa´dku˚ a navazuje teˇsneˇ na textovy´ sloupec. Navı´c jesˇteˇ sa´zı´me na rˇa´dkovy´ rejstrˇ´ık. Tohoto designu dosa´hneme snadno nastavenı´m
\setuppapersize[A4][A4] zajistı´, zˇe se sa´zı´ na papı´r o velikosti A4 a vy´sledek je umı´steˇn na papı´r te´zˇe velikosti. Naproti tomu prˇ´ıkaz
\setuplayout [topspace=4cm, backspace=5cm, width=13cm, lines=41, header=0pt, footer=2\baselineskip, grid=yes]
\setuppapersize[A5][A4] sa´zı´ stra´nky o velikosti A5 a umı´stı´ je na papı´r o velikosti A4. To se hodı´ naprˇ. pro korekcˇnı´ tisky, kdy je trˇeba vyznacˇit orˇeza´nı´ stra´nek (jak se prˇidajı´ orˇezove´ znacˇky, uka´zˇu pozdeˇji). Samozrˇejmeˇ je mozˇne´ definovat novou velikost papı´ru, pokud zˇa´dna´ z prˇeddefinovany´ch velikostı´ nevyhovuje sazecˇovy´m potrˇeba´m. Prˇ´ıkaz \setuppapersize vsˇak doka´zˇe jesˇteˇ mnohem vı´c: doka´zˇe stra´nky ota´cˇet o 90, 180 a 270 stupnˇu˚, sa´zet pode´lneˇ (landscape) nebo prˇeve´st cely´ tisk do negativu, prˇ´ıpadneˇ ho ozrcadlit (mirror, tj. prˇevra´tit tisk okolo svisle´ osy). Ve spolupra´ci s prˇ´ıkazem \setuparranging lze stra´nky na u´rovni TEXu dokonce prˇeskla´dat a sloucˇit! To naprˇ. umozˇnˇuje vytva´rˇet sbornı´ky o velikosti A5 i v prˇ´ıpadeˇ, zˇe vy´stupem je PDF, a nenı´ tedy mozˇne´ pouzˇ´ıt programy z balı´ku psutils. Prˇ´ıkaz doka´zˇe jak zmeˇnit porˇadı´ stra´nek, tak umı´stit neˇkolik sazebnı´ch stran na jednu vy´stupnı´. Vlastnı´ kompozici stra´nky popisuje prˇ´ıkaz \setuplayout. Stra´nka je rozdeˇlena do neˇkolika cˇa´stı´. Shora dolu˚ je to vrsˇek (top), za´hlavı´ (header), textove´ teˇlo, za´patı´ (footer) a spodek stra´nky. Mezi za´hlavı´m (za´patı´m) a textem mu˚zˇe by´t take´ dodatecˇna´ vzda´lenost. Zleva doprava je to (pro prave´ stra´nky) hrˇbetnı´ mezera (backspace), v nı´ umı´steˇne´ dva ru˚zne´ leve´ okraje (left margin a left edge), textove´ teˇlo a dva ru˚zne´ prave´ okraje. Prˇ´ıkaz \setuplayout nastavuje velikosti vsˇech teˇchto cˇa´stı´ stra´nky nara´z. A nejen to: doka´zˇe take´ nastavit umı´steˇnı´ „vnitrˇnı´ stra´nky“ na papı´rˇe (naprˇ´ıklad tehdy, kdyzˇ sa´zı´m na A5 a tisknu na A4), zapnout tisk orˇezovy´ch znacˇek nebo zapnout sazbu na rˇa´dkovy´ rejstrˇ´ık. Ano, cˇtete dobrˇe: pokud chcete sa´zet na rˇa´dkovy´ rejstrˇ´ık, stacˇ´ı v ConTEXtu prosteˇ zapnout jeden prˇepı´nacˇ. Vsˇechny (nebo te´meˇrˇ vsˇechny) prˇ´ıkazy se tomu automaticky prˇizpu˚sobı´; to ma´lo, co zby´va´, jde s pomocı´ prˇ´ıslusˇny´ch prˇ´ıkazu˚ osˇetrˇit rucˇneˇ. Mı´sto detailnı´ho popisu se podı´vejme na jednoduchy´ prˇ´ıklad. Prˇedpokla´dejme, zˇe chceme sa´zet do textove´ho sloupce o sˇ´ırˇce 13 cm a 41 rˇa´dcı´ch na
Pokud bychom navı´c chteˇli zapnout tisk orˇezovy´ch znacˇek, stacˇ´ı do nastavenı´ prˇidat parametr marking=on. Nastavenı´ marking=color prˇida´ navı´c za hranice orˇezu barevnou a cˇernobı´lou sˇka´lu. Nastavenı´ jednotlivy´ch cˇa´stı´ stra´nky mu˚zˇeme snadno vizua´lneˇ zkontrolovat pomocı´ prˇ´ıkazu \showframe. Jestli ConTEXt opravdu dodrzˇuje rˇa´dkovy´ rejstrˇ´ık, se mu˚zˇeme prˇesveˇdcˇit pomocı´ makra \showgrid. Po jejich zada´nı´ jsou na vy´stupu videˇt boxy ohranicˇujı´cı´ jednotlive´ oblasti stra´nky, respektive u´cˇarˇ´ı jednotlivy´ch rˇa´dku˚. Rozdeˇlenı´ stra´nky do jednotlivy´ch oblastı´ vsˇak neovlivnˇuje pouze vlastnı´ sazbu. V ConTEXtu je mozˇne´ nastavit take´ pozadı´ kazˇde´ cˇa´sti stra´nky. Pozadı´ mu˚zˇe tvorˇit te´meˇrˇ cokoli: text, barevna´ vy´plnˇ, obra´zek, interaktivnı´ menu nebo neˇjaka´ jejich kombinace. Podobny´m zpu˚sobem lze snadno umı´stit na kazˇdou stra´nku naprˇ. logo spolecˇnosti nebo projektu. Pokud bych naprˇ. chteˇl, aby byl pravy´ okraj na pravy´ch stra´nka´ch (a levy´ okraj na levy´ch) ora´movany´ a vybarveny´ zˇluteˇ, mohl bych nastavit \setupbackgrounds[text][rightmargin] [frame=on, background=color, backgroundcolor=yellow] Pokud bych na mı´sto toho chteˇl, aby byl na pozadı´ cele´ stra´nky neˇjaky´ obra´zek, mohu (prˇi vy´stupu do PDF) zadat \defineoverlay[pozadi] [{\externalfigure[desert2.jpg] [width=\overlaywidth, height=\overlayheight]}] \setupbackgrounds[page] [background=pozadi]
2
Prvnı´ prˇ´ıkaz vytvorˇ´ı tzv. overlay, ktery´ bude obsahovat obra´zek. Velikost obra´zku se automaticky prˇizpu˚sobı´ velikosti overlaye. Druhy´m prˇ´ıkazem se overlay vlozˇ´ı na pozadı´ stra´nky. V tuto chvı´li se spocˇ´ıta´ jeho skutecˇna´ velikost a obra´zek se podle nı´ prˇizpu˚sobı´. Mechanismus vkla´da´nı´ overlayu˚ a jiny´ch typu˚ pozadı´ se neomezuje pouze na cˇa´sti stra´nky – ve skutecˇnosti valna´ veˇtsˇina vizua´lnı´ch elementu˚ umozˇnˇuje tento mechanismus standardnı´m zpu˚sobem vyuzˇ´ıt. To se ty´ka´ naprˇ. i pozna´mek pod cˇarou nebo pozna´mek na okraj. Pokud je vy´stupnı´m forma´tem PDF, pak je mozˇne´ kombinaci prˇ´ıkazu˚ \setuppapersize a \setuplayout poneˇkud zneuzˇ´ıt a pouzˇ´ıt znovu na kazˇde´ nove´ stra´nce. Tak lze dosa´hnout zvla´sˇtnı´ho efektu, kdy je kazˇda´ strana jinak velka´ a jinak orientovana´. Pokud nebude zmeˇneˇno nastavenı´ pozadı´, automaticky se samo prˇizpu˚sobı´ zadany´m zmeˇna´m. Podobny´m zpu˚sobem je mozˇne´ pomocı´ dalsˇ´ıch \setup prˇ´ıkazu˚ nastavit i dalsˇ´ı komponenty designu, jako je obsah za´hlavı´, paticˇky a zpu˚sob cˇ´ıslova´nı´ stran. Jine´ prˇ´ıkazy nastavujı´ roztecˇ tiskovy´ch rˇa´dku˚, velikost odstavcove´ zara´zˇky a jejı´ umı´steˇnı´ (naprˇ. zda ma´ by´t odstavec po vynechane´m rˇa´dku odsazen apod.)
ktere´ dalsˇ´ı u´daje a modifikuje prˇepı´nacˇe fontu˚. Od te´to chvı´le \tf znamena´ „textfont“ (za´kladnı´ patkove´ pı´smo v za´kladnı´ velikosti), v nasˇem prˇ´ıpadeˇ Times Roman o velikosti 17 pt, \it znamena´ italiku tohoto pı´sma, \sl skloneˇnou variantu tohoto pı´sma, \bf tucˇnou atd. Prˇ´ıkaz \bs naprˇ. prˇepne sazbu do tucˇne´ho skloneˇne´ho pı´sma. ConTEXt nicme´neˇ neobsahuje plny´ ekvivalent NFSS, zna´me´ho z LATEXu. Pokud tedy chceme veˇtsˇ´ı rˇez beˇzˇne´ho textove´ho pı´sma, musı´me vyuzˇ´ıt prˇ´ıkazy jako \tfa, \tfb apod., pro mensˇ´ı rˇezy jsou k dispozici prˇ´ıkazy \tfx a \tfxx. Podobne´ prˇ´ıkazy existujı´ i pro dalsˇ´ı textove´ varianty. Prˇepı´na´nı´ sazby mezi patkove´, bezpatkove´ a neproporciona´lnı´ pı´smo obstara´vajı´ prˇ´ıkazy \rm, \ss a \tt respektive. Mimo to existuje i makro pro zdu˚razneˇny´ text. Oznacˇuje se \em. Toto makro se automaticky prˇizpu˚sobuje pouzˇite´mu rˇezu. Navı´c doplnˇuje automaticky i kurzı´vnı´ korekci. Jeho pouzˇitı´ je proste´: {\em Toto má váhu.} Standardneˇ se v ConTEXtu ke zdu˚raznˇova´nı´ pouzˇ´ıva´ skloneˇne´ pı´smo. Pokud to chcete zmeˇnit na italiku, stacˇ´ı zapsat prˇ´ıkaz \setupbodyfontenvironment[default] [em=italic]
2. Fonty K pouzˇitı´ pı´sem v ConTEXtu je trˇeba uve´st jesˇteˇ jednu pozna´mku. Na rozdı´l od LATEXu se ConTEXt snazˇ´ı standardizovat i pouzˇitı´ fontu˚. Pokud tedy chceme mı´sto standardnı´ch anglicky´ch postscriptovy´ch fontu˚ pouzˇ´ıvat jejich cˇeske´ obdoby, nemeˇli bychom vytva´rˇet novy´ definicˇnı´ soubor fontu˚ (neˇjake´ cs-pos), ny´brzˇ sa´hnout do specia´lnı´ho lokalizacˇnı´ho souboru, ktery´ je soucˇa´stı´ distribuce, a v neˇm vytvorˇit synonyma pouzˇity´ch fontu˚. Vı´c k te´to problematice je mozˇne´ nale´zt v dokumentaci a archivu konference o ConTEXtu.
Zpu˚sob pra´ce s fonty je v ConTEXtu v urcˇite´m smeˇru asi na pu˚l cesty mezi plainTEXem a LATEXem, neˇktere´ vlastnosti vsˇak v LATEXu nemajı´ obdobu. ConTEXt se postara´, aby pro zvolenou rodinu pı´sem a ko´dova´nı´ zadefinoval prˇ´ıkazy, ktere´ pouzˇijı´ prˇ´ıslusˇny´ rˇez ve spra´vne´ velikosti. K tomu slouzˇ´ı prˇ´ıkaz \setupbodyfont. Pokud naprˇ. pouzˇijeme na zacˇa´tku dokumentu prˇ´ıkaz \setupbodyfont[pos, 17pt] nacˇte ConTEXt standardnı´ postscriptova´ pı´sma (Times, Helveticu a Courier) a nastavı´ za´kladnı´ velikost pı´sma na 17 pt. Na rozdı´l od LATEXu nenı´ uzˇivatel ConTEXtu omezen na velikosti 10, 11 a 12 pt; zda´ se, zˇe jediny´m omezenı´m jsou tu schopnosti TEXu a METAFONTu, cozˇ umozˇnˇuje velmi snadno vytva´rˇet jak ru˚zne´ prezentace s velky´mi pı´smeny, tak slovnı´ky s drobny´mi pı´smeny. Za´rovenˇ s nastavenı´m standardnı´ velikosti pı´sma ConTEXt nastavı´ take´ vzda´lenosti u´cˇarˇ´ı standardnı´ch rˇa´dku˚ a neˇ-
3. Kapitoly, oddı´ly Patrneˇ nejdu˚lezˇiteˇjsˇ´ım standardnı´m elementem te´meˇrˇ kazˇde´ho dokumentu jsou ru˚zne´ hlavicˇky: nadpisy kapitol, oddı´lu˚ apod. ConTEXt umozˇnˇuje nejen jednodusˇe meˇnit vzhled sta´vajı´cı´ch hlavicˇek, ale vytva´rˇet i dalsˇ´ı. Tak mu˚zˇe naprˇ. existovat neˇkolik ru˚zny´ch hlavicˇek stejne´ u´rovneˇ (odpovı´dajı´cı´ch 3
naprˇ. klasicke´mu prˇ´ıkazu \section) odlisˇeny´ch vzhledem, za´pisem do obsahu apod. Vzhled kazˇde´ hlavicˇky je mozˇne´ meˇnit prˇ´ıkazem \setuphead. Protozˇe tento prˇ´ıkaz ma´ mnoho parametru˚, uka´zˇu radeˇji dva jednoduche´ prˇ´ıklady. Nastavenı´
vy´ rejstrˇ´ık nenarusˇily. Budou posazeny u´cˇarˇ´ım poslednı´ho rˇa´dku na prvnı´ mozˇne´ u´cˇarˇ´ı rˇa´dkove´ho rejstrˇ´ıku.
4. Krˇı´zˇove´ odkazy \setuphead[section] [style=bold, number=no, align=left, before={\blank[3*line,force]}, after={\blank[2*line]}, indentnext=yes]
Druhou podobneˇ du˚lezˇitou skupinu prˇ´ıkazu˚ tvorˇ´ı prˇ´ıkazy, ktere´ se starajı´ o krˇ´ızˇove´ odkazy. Take´ pro neˇ platı´, zˇe jejich vzhled a chova´nı´ lze velmi jednodusˇe modifikovat. Prvnı´ cˇa´st prˇ´ıkazu˚ ma´ na starost tvorbu obsahu, seznamu obra´zku˚, tabulek a jiny´ch plovoucı´ch prostrˇedı´ a rejstrˇ´ıku˚. V ConTEXtu je velmi snadne´ definovat dalsˇ´ı plovoucı´ prostrˇedı´ a definovat jeho vlastnı´ seznam. Stejneˇ tak je mozˇne´ definovat svoje specia´lnı´ rejstrˇ´ıky. Prˇ´ıkaz, ktery´ slouzˇ´ı k modifikaci vzhledu obsahu a dalsˇ´ıch seznamu˚, ma´ tolik parametru˚, zˇe se radeˇji zmı´nı´m jen o neˇkolika jeho uzˇitecˇny´ch vlastnostech. Obsahy mohou by´t loka´lnı´ i globa´lnı´. Loka´lnı´ obsah zahrnuje jen seznam oddı´lu˚, poddodı´lu˚ atd. prˇ´ıslusˇne´ kapitoly (nebo oddı´lu ap.), globa´lnı´ obsah zahrnuje seznam vsˇech hlavicˇek v cele´m dokumentu. V jednom dokumentu mu˚zˇe by´t vytvorˇen jak globa´lnı´ obsah, tak loka´lnı´ obsahy ru˚zny´ch u´rovnı´. Samozrˇejmeˇ je mozˇne´ urcˇit, ktere´ typy hlavicˇek budou zarˇazeny do obsahu a ktere´ ne – tento vy´cˇet se mu˚zˇe na ru˚zny´ch mı´stech dokumentu lisˇit. Jedna´ se skutecˇneˇ o vy´cˇet, takzˇe zarˇazenı´ do obsahu nemusı´ by´t nutneˇ „spojite´“ jako v LATEXu. Pokud k tomu ma´me neˇjaky´ du˚vod, mu˚zˇeme do obsahu zarˇadit trˇeba kapitolu a pododdı´l, ale nikoli oddı´l. Vzhled obsahu lze snadno modifikovat: bud’ vybrat jednu z prˇednastaveny´ch variant, nebo nastavit chova´nı´ kazˇde´ho prvku obsahu zvla´sˇt’. Stejna´ „nastavovacı´ “ makra (\setuplist, resp. \setupcombinedlist) mohou prˇi vy´stupu do PDF nastavit take´ interaktivitu polozˇek obsahu, tj. oznacˇit, ktera´ cˇa´st polozˇky (cˇ´ıslo hlavicˇky, jejı´ popis, cˇ´ıslo stra´nky nebo cela´ polozˇka) je interaktivnı´. Podobneˇ snadno modifikovatelne´ jsou i pozna´mky pod cˇarou (footnotes). Prˇ´ıslusˇny´ nastavovacı´ prˇ´ıkaz doka´zˇe snad vsˇechno, co v LATEXu deˇlajı´ specia´lnı´ balı´ky, vcˇetneˇ cˇ´ıslova´nı´ pozna´mek pod cˇarou na kazˇde´ straneˇ zvla´sˇt’. Jedna z voleb dokonce umozˇnˇuje zmeˇnit pozna´mky pod cˇarou v pozna´mky na konci textu (endnotes). Ty mohou by´t take´ loka´lnı´, tj. rozdeˇlene´ po kapitola´ch nebo jiny´ch oddı´lech, nebo globa´lnı´.
zajistı´, zˇe oddı´ly budou mı´t na´sledujı´cı´ vzhled: nad nadpisem se vynechajı´ trˇi beˇzˇne´ rˇa´dky, pod nı´m dva. Nadpis nebude cˇ´ıslova´n. Bude vysa´zen tucˇny´m rˇezem beˇzˇne´ho patkove´ho pı´sma, a to vpravo (nenechte se zmy´lit nastavenı´m „left“, to v ConTEXtu obvykle znamena´ „doprava“ :–). Prvnı´ odstavec pod nadpisem bude mı´t odstavcovou zara´zˇku (pokud jsou zapnute´). Naproti tomu nastavenı´ \setuphead[chapter] [numberstyle={\bfa}, textstyle={\bfd}, page=right, header=empty, before={\blank[5*line, force]}, after={\blank[3*line]}, command=\mychapter] \def\mychapter#1#2{ \vbox{ #1 \blank[2*line] #2}} zpu˚sobı´, zˇe kapitola bude umı´steˇna na nejblizˇsˇ´ı nove´ prave´ stra´nce. Cˇ´ıslo bude vysa´zene´ veˇtsˇ´ım tucˇny´m, vlastnı´ nadpis velky´m tucˇny´m pı´smem. Na stra´nce bude potlacˇeno za´hlavı´. Prˇed nadpisem bude vynecha´no peˇt rˇa´dku˚, pod nı´m trˇi. Vlastnı´ vzhled kapitoly urcˇuje makro \mychapter. Prˇ´ıkaz \blank se stara´ o vynecha´nı´ mı´sta. Jako parametr mu˚zˇe mı´t bud’ prˇ´ımo de´lkovy´ u´daj nebo celocˇ´ıselny´ na´sobek vy´sˇky standardnı´ho rˇa´dku apod. Parametr force zajistı´, zˇe se mezera na zacˇa´tku stra´nky neztratı´. Pokud sa´zı´me na rˇa´dkovy´ rejstrˇ´ık, budou obeˇ hlavicˇky automaticky upraveny tak, aby rˇa´dko4
Klasicke´ krˇ´ızˇove´ odkazy jsou rˇesˇeny poneˇkud jinak, nezˇ je obvykle´ v LATEXu. Kazˇdy´ element, na ktery´ je mozˇne´ se odka´zat, ma´ logicke´ jme´no odkazu jako jeden ze svy´ch parametru˚. Tak je mozˇne´ napsat naprˇ.
obsah dokumentu je uzavrˇen mezi dva prˇ´ıkazy \begin{document} a \end{document}. Naproti tomu ConTEXt zˇa´dny´ takovy´ u´vodnı´ prˇ´ıkaz nezna´. Vlastnı´ dokument je uzavrˇen v pa´ru prˇ´ıkazu˚ \starttext a \stoptext. Tato dveˇ makra vsˇak rozhodneˇ neodpovı´dajı´ LATEXove´ dvojici \begin{document} a \end{document}. Prˇ´ıkazy \starttext a \stoptext totizˇ mohou by´t vza´jemneˇ zanorˇene´ – v tom prˇ´ıpadeˇ se chovajı´ v podstateˇ jako zacˇa´tek a konec bloku. Tato odlisˇnost je nesmı´rneˇ du˚lezˇita´. Umozˇnˇuje totizˇ vytva´rˇet neˇco, cˇemu ConTEXt rˇ´ıka´ projekty. Jeden a tenty´zˇ dokument mu˚zˇe by´t vysa´zen bud’ samostatneˇ nebo jako soucˇa´st veˇtsˇ´ıho celku. To je v ConTEXtu mozˇne´ bez jake´hokoli za´sahu do zdrojove´ho textu. Jeden dokument se oznacˇ´ı jako „projekt“ – ten pak bude obsahovat vsˇechny ostatnı´ jako sve´ cˇa´sti. Jednotlive´ dı´lcˇ´ı dokumenty jsou oznacˇeny jako „produkty“ (product) nebo „komponenty“ (component). Projekt obsahuje pouze popis designu a odkazy na produkty, z nichzˇ se skla´da´; stejneˇ tak kazˇdy´ produkt mu˚zˇe obsahovat odkazy na jednu nebo vı´ce komponent (komponenta mu˚zˇe obsahovat odkazy na dalsˇ´ı dı´lcˇ´ı komponenty). Prˇitom kazˇdy´ dı´lcˇ´ı dokument obsahuje odkaz na rˇ´ıdı´cı´ projekt. Kdyzˇ se prˇekla´da´ jen cˇa´st celku, naprˇ. neˇjaky´ „produkt“, nacˇtou se vsˇechny definicˇnı´ cˇa´sti prˇ´ıslusˇne´ho projektu. Tak je mozˇne´ vyuzˇ´ıt design celku i v kazˇde´ dı´lcˇ´ı cˇa´sti. K cˇemu tato funkce slouzˇ´ı? Naprˇ´ıklad k tvorbeˇ rozsa´hly´ch pocˇ´ıtacˇovy´ch manua´lu˚, ktere´ majı´ popsat balı´k neˇkolika kooperujı´cı´ch programu˚. Popis jednoho programu je v nasˇ´ı terminologii produkt. Ten se skla´da´ z jednotlivy´ch kapitol, komponent. Vsˇechny popisy dohromady tvorˇ´ı projekt. Prˇedpokla´dejme, zˇe distribuujeme dokumentaci jak v tisˇteˇne´ podobeˇ, tak na prˇilozˇene´m CD ROMu. Tisˇteˇna´ prˇ´ırucˇka by meˇla v jednom svazku popsat cely´ balı´k programu˚. Zkompilujeme tedy soubor popisujı´cı´ projekt. Na CD ROM chceme naproti tomu ulozˇit dokumentaci rozdeˇlenou do neˇkolika souboru˚ (abychom prˇ´ılisˇ nezateˇzˇovali pameˇt’ pocˇ´ıtacˇe) – co program, to soubor. V tomto prˇ´ıpadeˇ zkompilujeme kazˇdy´ produkt zvla´sˇt’. Pokud se v manua´lu vyskytnou za´vazˇneˇjsˇ´ı chyby, mu˚zˇeme prˇesa´zet prˇ´ıslusˇnou kapitolu – komponent a vystavit ji jako errata na Internet. Projekty nejsou jedinou mozˇnostı´ jak modifikovat hotovy´ dokument bez nutnosti za´sahu do jeho zdrojove´ho ko´du. Dalsˇ´ı mozˇnostı´ jsou mo´dy (mode). Sta´le cˇasteˇji je trˇeba jeden dokument vysa´zet neˇkolika ru˚zny´mi zpu˚soby: jiny´ vzhled mu-
\chapter[odkaz, sem]{Název kapitoly} Nynı´ jsou definova´ny dva ru˚zne´ odkazy (odkaz a sem), ktere´ se vztahujı´ k te´zˇe kapitole. V textu se pak na tuto kapitolu mu˚zˇeme odka´zat trojı´m zpu˚sobem, pomocı´ prˇ´ıkazu˚ \in, \at a \about. Prˇ´ıkaz \in vypı´sˇe cˇ´ıslo kapitoly, prˇ´ıkaz \at vypı´sˇe cˇ´ıslo strany, na ktere´ se kapitola nacha´zı´, a prˇ´ıkaz \about vypı´sˇe na´zev kapitoly. Vsˇechny trˇi prˇ´ıkazy majı´ take´ nepovinne´ parametry, ktere´ mohou obsahovat text. Pokud je zapnuta´ interaktivita, slouzˇ´ı jako „cı´l pro kliknutı´ “ nejen vlastnı´ cˇ´ıslo, ale i tento text. Prˇ´ıkazy pak mohou by´t zapsa´ny naprˇ. na´sledujı´cı´m zpu˚sobem: v~\in{kapitole}[sem] Jako „cı´l kliknutı´ “ pak slouzˇ´ı cely´ text „v kapitole 5“. Obdobneˇ fungujı´ i odkazy na obra´zky, tabulky apod. Samozrˇejmeˇ je take´ mozˇne´ vytvorˇit autonomnı´ odkaz prˇ´ımo na zvolenou stra´nku. Mechanismus odkazu˚ je ovsˇem jesˇteˇ podstatneˇ obecneˇjsˇ´ı. Nejobecneˇjsˇ´ım prˇ´ıkazem je zde prˇ´ıkaz \goto. Ten mu˚zˇe (prˇi vy´stupu do PDF) obsahovat nejen vy´sˇe zmı´neˇne´ klasicke´ krˇ´ızˇove´ odkazy, ale take´ odkazy na dalsˇ´ı PDF dokumenty, neˇktere´ specia´lnı´ prˇ´ıkazy pro PDF prohlı´zˇecˇ a dokonce prˇ´ıkazy JavaScriptu. To umozˇnˇuje velmi snadno vytva´rˇet interaktivnı´ dokumenty. Naprˇ. lze vytvorˇit „klika´tko“, ktere´ nacˇte WWW stra´nku, jiny´ PDF dokument, spustı´ hudbu nebo video, „roluje“ neˇkolik obra´zku˚ umı´steˇny´ch prˇes sebe, skocˇ´ı na dalsˇ´ı nebo prˇedchozı´ stra´nku, spustı´ v prohlı´zˇecˇi vyhleda´va´nı´ nebo ukoncˇ´ı prohlı´zˇecˇ. Jedine´, co je trˇeba zna´t, je jme´no specia´lnı´ho odkazu.
5. Projekty, prostrˇedı´ a mo´dy Kazˇdy´ LATEXista vı´, zˇe LATEXovy´ dokument zacˇ´ına´ prˇ´ıkazem \documentclass, ktery´ definuje jaka´ trˇ´ıda dokumentu (prˇeddefinovany´ design) se ma´ pouzˇ´ıt. Za tı´mto prˇ´ıkazem na´sleduje nepovinna´ preambule, ve ktere´ se nacˇ´ıtajı´ dalsˇ´ı styly, ktere´ majı´ zmeˇnit design dokumentu. Vlastnı´ 5
sı´ mı´t tisk pro jazykovou korekturu, jiny´ preprint pro vy´slednou korekturu, jesˇteˇ jiny´ tisk pro vy´stup na osvitovou jednotku. Sta´le cˇasteˇji je take´ nutne´ vytvorˇit interaktivnı´ verzi pro prohlı´zˇenı´ na obrazovce. V LATEXu je mozˇne´ tyto varianty realizovat celkem snadno: bud’ zasa´hneme do preambule zdrojove´ho textu a zmeˇnı´me stylovy´ balı´k, ktery´ se ma´ pouzˇ´ıt, nebo vytvorˇ´ıme neˇkolik ru˚zny´ch „hlavnı´ch“ souboru˚, ktere´ pak nacˇ´ıtajı´ ostatnı´ cˇa´sti dokumentu. ConTEXtove´ rˇesˇenı´ je jine´. Uzˇivatel nespousˇtı´ prˇ´ımo TEX, ny´brzˇ perlovsky´ skript texexec. Ten doka´zˇe take´ rˇ´ıdit, jaka´ verze dokumentu se ma´ vytvorˇit. Za´kladnı´ dva prˇepı´nacˇe urcˇujı´, zda se vytvorˇ´ı barevny´ nebo cˇernobı´ly´ vy´stup (ConTEXt doka´zˇe prˇepı´nat mezi barevnou a cˇernobı´lou verzı´) a zda se jedna´ o vy´stup do DVI nebo do PDF. Zvla´sˇtnı´ prˇepı´nacˇ doka´zˇe take´ spustit zvoleny´ mo´d sazby. V popisu designu mu˚zˇe uzˇivatel definovat ru˚zne´ mo´dy: kazˇdy´ mo´d obsahuje prˇ´ıkazy, ktere´ se provedou specia´lneˇ v prˇ´ıpadeˇ, zˇe texexec tento mo´d zavola´. Popis designu je mozˇne´ ulozˇit do zvla´sˇtnı´ho soubour – tomu se v ConTEXtove´ terminologii rˇ´ıka´ prostrˇedı´.
vytvorˇit dveˇ verze dokumentu: cˇernobı´lou pro tisk a barevnou pro prohlı´zˇenı´ na obrazovce. Standardneˇ jsou barvy vypnute´. Zapnout je lze prˇ´ıkazem \setupcolors[state=start] Pra´ci s obra´zky dominuje pra´ce s MetaPostovy´mi obra´zky. ConTEXt je doka´zˇe vlozˇit nejen do vy´stupu pro dvips, ale i do PDF. Potrˇebne´ konverze prˇi tom probeˇhnou na u´rovni TEXu. Tato makra prˇebı´ra´ i LATEX. Navı´c doka´zˇe konvertovat barevne´ MetaPostove´ obra´zky na cˇernobı´le´. Bohuzˇel to deˇla´ prˇ´ımo na u´rovni vy´stupnı´ch MetaPostovy´ch souboru˚, takzˇe prˇed kompilacı´ barevne´ho dokumentu je potrˇeba vsˇechny MetaPostove´ obra´zky prˇegenerovat. Vkla´da´nı´ ostatnı´ch obra´zku˚ je standardizova´no asponˇ natolik, zˇe je mozˇne´ psa´t jejich jme´na bez koncovek. ConTEXt si pak vybere tu variantu, ktera´ je pro dany´ vy´stup nejvhodneˇjsˇ´ı. Prˇi vy´stupu do PostScriptu bude preferovat obra´zky s koncovkou .eps, prˇi vy´stupu do PDF .pdf apod. Pokud neexistujı´, hleda´ dalsˇ´ı varianty obra´zku˚ v porˇadı´, ktere´ preferuje. Samozrˇejmostı´ je „recyklace“ obra´zku˚. Prˇ´ıkaz
6. Barvy a obra´zky
\useexternalfigure [figgold][goldprice][width=5cm]
TEX jako takovy´ neumı´ pracovat s barvami. Umozˇnˇuje vsˇak vlozˇit do dokumentu informace, ktere´ urcˇity´ postprocesor interpretuje jako barvy. Tote´zˇ se ty´ka´ obra´zku˚. Potı´zˇ je v tom, zˇe dva dnes nejobvyklejsˇ´ı postprocesory, dvips pro vy´stup do PostScriptu a pdfTEX pro vy´stup do PDF jsou vza´jemneˇ pomeˇrneˇ nekompatibilnı´. Za´lezˇ´ı pak na TEXove´m forma´tu, jak se podarˇ´ı pra´ci s barvami a obra´zky standardizovat. ConTEXt v te´to oblastil znacˇneˇ pokrocˇil, ale i tak ma´ jeho rˇesˇenı´ k dokonalosti jesˇteˇ daleko. Co se ty´cˇe barev, jejich pouzˇitı´ je stejne´ prˇi vy´stupu do PDF i do PostScriptu. ConTEXt umozˇnˇuje definovat barvy jak ve forma´tu RGB, tak CMYK, a teˇmito barvami sa´zet jak text, tak pozadı´ te´meˇrˇ vsˇech objektu˚. Kromeˇ jednotlivy´ch barev umozˇnˇuje vytva´rˇet i cele´ palety – soustavy dobrˇe ladı´cı´ch barev s dany´m stupneˇm sˇedi. Neˇkolik palet je prˇeddefinovany´ch. Navı´c ConTEXt umozˇnˇuje zapı´nat a vypı´nat pouzˇitı´ barev. Pokud je pouzˇitı´ barev vypnuto, je text sa´zen cˇernou barvou a barva pozadı´ je bı´la´. Take´ obra´zky v MetaPostu jsou prˇevedeny do cˇernobı´le´ varianty. To umozˇnˇuje snadno
nacˇte rozmeˇry nejlepsˇ´ı mozˇne´ varianty obra´zku ulozˇene´ho v souboru goldprice.* a zveˇtsˇ´ı nebo zmensˇ´ı obra´zek tak, aby byl sˇiroky´ 5cm. Vy´sledek ulozˇ´ı do pameˇti pod logicky´m jme´nem figgold. Nynı´ mu˚zˇeme tento obra´zek vlozˇit podle jeho logicke´ho jme´na prˇ´ıkazem \externalfigure[figgold][width=12cm] a prˇ´ıpadneˇ opeˇt zveˇtsˇit nebo zmensˇit. Oba prˇ´ıkazy toho umeˇjı´ jesˇteˇ mnohem vı´ce. Mimo jine´ doka´zˇou vytva´rˇet logicka´ jme´na obra´zku˚ z jiny´ch logicky´ch jmen. V tom prˇ´ıpadeˇ se uplatnı´ deˇdicˇnost: potomek prˇevezme nastavenı´ sve´ho prˇedka a lisˇ´ı se pouze teˇmi atributy, ktere´ jsou vy´slovneˇ uvedeny. (Tato vlastnost se zdaleka nety´ka´ jen obra´zku˚, ale take´ hlavicˇek oddı´lu˚ a mnoha dalsˇ´ıch elementu˚.) Pokud pouzˇ´ıva´me vy´stup, ktery´ umı´ recyklovat obra´zky (naprˇ. PDF), pak bude do vy´sledne´ho dokumentu obra´zek vlozˇen fyzicky pouze jednou.
6
7. Neˇktere´ dalsˇı´ du˚lezˇite´ vlastnosti
vyporˇa´da´va´ se sazbou tabulek jiny´m zpu˚sobem. Uzˇivatel si mu˚zˇe prosteˇ vybrat formu, ktera´ mu nejvı´ce vyhovuje. Mimo jine´ zde existuje i prostrˇedı´, ktere´ umozˇnˇuje sa´zet tabulky zpu˚sobem, ktery´ je obvykly´ v HTML, vcˇetneˇ slucˇova´nı´ neˇkolika bunˇek na rˇa´dku nebo ve sloupci. Velkou silou tabulek je mozˇnost forma´tova´nı´ a barvenı´ obsahu buneˇk. Na druhou stranu, mozˇnosti ra´mova´nı´ jsou mnohem omezeneˇjsˇ´ı nezˇ ve specializovany´ch balı´cı´ch LATEXu. Celkoveˇ lze rˇ´ıci, zˇe kazˇde´mu prvku nebo prostrˇedı´ zna´me´mu z LATEXu odpovı´da´ v ConTEXtu jeden nebo vı´ce prvku˚ a prostrˇedı´. Navı´c v ConTEXtu existuje cela´ rˇada prostrˇedı´, ktera´ nemajı´ v LATEXu zˇa´dnou obdobu. Vzhled vsˇech prvku˚ lze relativneˇ snadno modifikovat.
Nezˇ se podı´va´me na neˇktere´ velmi specia´lnı´ vlastnosti ConTEXtu, rˇekneˇme jesˇteˇ neˇkolik slov o neˇktery´ch klasicky´ch „prostrˇedı´ch“, jmenoviteˇ o sazbeˇ do vı´ce sloupcu˚, vy´cˇtovy´ch prostrˇedı´ch a tabulka´ch. Z maker na sazbu do vı´ce sloupcu˚ se mi zda´ by´t ConTEXtova´ verze nejstabilneˇjsˇ´ı. Nedocha´zı´ ani ke ztra´ta´m textu jako v eplainu, ani k „prˇete´ka´nı´ “ stra´nek jako v LATEXu. Po zapnutı´ sazby na rˇa´dkovy´ rejstrˇ´ık nejen souhlası´ u´cˇarˇ´ı ve vsˇech sloupcı´ch, ale nenı´ narusˇen ani rˇa´dkovy´ rejstrˇ´ık nad a pod zacˇa´tkem odstavcove´ sazby. Plovoucı´ objekty jsou ve sloupcove´ sazbeˇ bud’ vysa´zeny tam, kde jsou uvedeny, nebo, pokud to nenı´ mozˇne´, odplavou na na´sledujı´cı´ stra´nku. Tam jsou umı´steˇny prˇes tolik sloupcu˚, kolik vyzˇaduje jejich skutecˇna´ sˇ´ırˇka. Zda´ se, zˇe prˇi tom nemohou by´t dva plovoucı´ obra´zky na jedne´ stra´nce. Za urcˇity´ch okolnostı´ mu˚zˇe ConTEXt dokonce prˇehodit porˇadı´ obra´zku˚, pokud tato zmeˇna zlepsˇ´ı vy´sledny´ vzhled dokumentu. Dalsˇ´ım du˚lezˇity´m mechanismem jsou vy´cˇtova´ prostrˇedı´. Zna´ma´ LATEXova´ prostrˇedı´ itemize a enumerate nahrazuje jedine´ ConTEXtove´ prostrˇedı´ \startitemize...\stopitemize. Toto prostrˇedı´ je nesmı´rneˇ variabilnı´. Kromeˇ neˇj existuje jesˇteˇ neˇkolik dalsˇ´ıch prostrˇedı´, ktera´ vesmeˇs nemajı´ v LATEXu zˇa´dnou obdobu. Dokonce existuje i prostrˇedı´, ktere´ umozˇnˇuje sa´zet ru˚zne´ texty (naprˇ. ru˚zne´ jazykove´ verze) vedle sebe do neˇkolika sloupcu˚ tak, aby odpovı´dajı´cı´ si cˇa´sti textu byly vzˇdy vedle sebe. Dalsˇ´ım zajı´mavy´m mechanismem, ktery´ take´ nema´ v LATEXu obdobu, jsou bloky. Bloky umozˇnˇujı´ na jednom mı´steˇ napsat urcˇitou cˇa´st textu a vysa´zet ji na jine´m, poprˇ. vı´cekra´t. To se hodı´ naprˇ. prˇi sazbeˇ ucˇebnic. Ota´zky a odpoveˇdi jsou napsa´ny pohromadeˇ. V prˇ´ıslusˇne´ kapitole se vsˇak tisknou pouze ota´zky, zatı´mco odpoveˇdi (prˇ´ıpadneˇ ota´zky i odpoveˇdi) se tisknou azˇ ve specia´lnı´ prˇ´ıloze na konci knihy. ConTEXt take´ umı´ automaticky zvy´raznit (barevneˇ nebo cˇernobı´le) syntaxi vybrany´ch programovacı´ch jazyku˚. Pokud vı´m, implementova´no je barevne´ zvy´razneˇnı´ TEXu, METAFONTu, MetaPostu, JavaScriptu, Perlu a SQL. Dalsˇ´ı du˚lezˇitou soucˇa´stı´ veˇtsˇiny veˇdecky´ch a technicky´ch dokumentu˚ jsou tabulky. ConTEXt ma´ pomeˇrneˇ rozsa´hlou podporu tabulek: existuje v neˇm neˇkolik ru˚zny´ch prostrˇedı´, z nichzˇ kazˇde´ se
8. MetaPost a triky s grafikou Jednou z nejsilneˇjsˇ´ıch stra´nek ConTEXtu je jeho spolupra´ce s MetaPostem. ConTEXt je s MetaPostem tak prova´zany´, zˇe Hans Hagen povazˇoval za dobre´ napsat na toto te´ma velmi rozsa´hly´ manua´l. V cˇem tedy spocˇ´ıva´ jejich spolupra´ce? Jednodusˇe vzato, ConTEXt doka´zˇe za chodu ulozˇit zvolenou cˇa´st dokumentu do pracovnı´ho souboru spolu s MetaPostovy´mi forma´tovacı´mi prˇ´ıkazy. Tento pomocny´ soubor je pak pomocı´ MetaPostu zpracova´n a vy´sledek se opeˇt nacˇte v dalsˇ´ım pru˚beˇhu TEXu. Uzˇivatel se o pomocne´ soubory vu˚bec nemusı´ starat, protozˇe jejich spra´vu a kompilaci zajisˇt’uje pomocny´ perlovsky´ skript texexec. K cˇemu je to cele´ dobre´, vzˇdyt’obra´zky se dajı´ vytva´rˇet v MetaPostu prˇ´ımo? Vyuzˇitı´ je cela´ rˇada. ConTEXt tı´mto zpu˚sobem rˇesˇ´ı veˇtsˇ´ı cˇa´st proble´mu˚, ktere´ LATEX osˇetrˇuje pomocı´ balı´ku˚ graphics a graphicx, naprˇ. zveˇtsˇova´nı´, zmensˇova´nı´ a rotace textu, orˇeza´va´nı´ obra´zku˚ apod. Navı´c se tento mechanismus uplatnı´ vsˇude tam, kde je trˇeba vzı´t cˇa´st dokumentu a neˇjak ho graficky zpracovat. Naprˇ. mu˚zˇeme chtı´t, aby na kazˇde´ stra´nce byl cˇerny´ obde´lnı´k se jme´nem kapitoly otocˇeny´ oproti textu o 270 stupnˇu˚. Velikost obde´lnı´ku se musı´ zmeˇnit podle de´lky jme´na kapitoly. Nebo je trˇeba umı´stit nadpis kapitoly do elipsy, jejı´zˇ velikost se zmeˇnı´ podle velikosti nadpisu (je zrˇejme´, zˇe se elipsa musı´ nakreslit ve spra´vne´ velikosti, a nikoli dodatecˇneˇ zveˇtsˇovat, protozˇe to by zmeˇnilo sı´lu cˇar). Nebo je trˇeba cˇa´st textu, obra´zku˚, tabulek atd. orˇezat podle neˇjake´ krˇivky. Tento mechanismus je take´ mozˇne´ 7
vyuzˇ´ıt k ora´mova´nı´ bloku textu nepravou´hly´m ra´mecˇkem, ra´mecˇkem s popiskou a k mnoha dalsˇ´ım podobny´m veˇcem. Da´le je mozˇne´ vytva´rˇet velke´ mnozˇstvı´ specia´lnı´ch efektu˚ potrˇebny´ch pro elektronicke´ publikace: naprˇ. ke tvorbeˇ ru˚zny´ch tlacˇ´ıtek, ktere´ se prˇizpu˚sobı´ velikosti sve´ho obsahu, sazbu veˇty pode´l zvolene´ krˇivky, sazbu odstavce do tvaru popsane´ho krˇivkou apod. Take´ overlaye, ktere´ jsem zmı´nil drˇ´ıve, mohou obsahovat MetaPostove´ makro. Uzˇ to samo o sobeˇ umozˇnˇuje neuveˇrˇitelne´ efekty. Veˇtsˇ´ı cˇa´st teˇchto proble´mu˚ je teoreticky rˇesˇitelna´ i v LATEXu – s pomocı´ balı´ku PSTricks nebo s pomocı´ MetaPostu. Znamenalo by to ovsˇem spoustu programova´nı´ (PSTricks navı´c nenı´ mozˇne´ pouzˇ´ıt prˇi prˇ´ıme´m vy´stupu do PDF). ConTEXt naproti tomu zajisˇt’uje inteligentnı´ rozhranı´, ktere´ designerovi umozˇnˇuje soustrˇedit se prˇ´ımo na vlastnı´ proble´m. Navı´c je ke ConTEXtu prˇibalen i MetaFun – balı´k MetaPostovy´ch maker, ktera´ da´le zjednodusˇujı´ tuto cˇa´st sazby. Dalsˇ´ı mozˇnosti propojenı´ TEXu a MetaPostu prˇedstavujı´ moduly ppchTEX a Flowcharts. Ty umozˇnˇujı´ snadno do TEXu integrovat chemicke´ strukturnı´ vzorce a strukturnı´ diagramy, pouzˇ´ıvane´ naprˇ. pro popis algoritmu˚. Domnı´va´m se, zˇe toto sˇt’astne´ propojenı´ TEXu a MetaPostu rozsˇirˇuje schopnosti TEXu natolik, zˇe se prˇi zpracova´nı´ graficky´ch prvku˚ nejen vyrovna´, ale v mnoha smeˇrech i prˇedcˇ´ı komercˇnı´ „obra´zkove´“ WYSIWYG programy. Sˇka´la graficky´ch triku˚ je totizˇ omezena pouze schopnostı´ sazecˇe programovat v MetaPostu.
ve´ odkazy se automaticky zmeˇnı´ na hypertextove´ odkazy. Samozrˇejme´ je, zˇe lze nastavovat jejich vzhled (barvu, font atd.). Podobneˇ snadno je mozˇne´ vytvorˇit i specia´lnı´ „tlacˇ´ıtka“ pro prˇechod na prˇedchozı´ nebo na´sledujı´cı´ stranu, pro skok na zacˇa´tek nebo konec dokumentu, zavrˇenı´ dokumentu nebo ukoncˇenı´ prohlı´zˇecˇe, spusˇteˇnı´ vyhleda´va´nı´ apod. K tomu vsˇemu je mozˇne´ vyuzˇ´ıt bud’ vy´sˇe popsany´ prˇ´ıkaz \goto a specia´lnı´ na´zvy krˇ´ızˇovy´ch odkazu˚ nebo mechanismus menu. Pomocı´ podobne´ho mechanismu je mozˇne´ propojit vı´ce PDF dokumentu˚ dohromady tak, aby jeden spousˇteˇl druhy´. Take´ lze prˇimeˇt dokument, aby nacˇetl (pomocı´ externı´ho prohlı´zˇecˇe) WWW stra´nku nebo poslal e-mail. Take´ tvorba bookmarku˚ je snadna´. Zacˇleneˇnı´ hlavicˇky kapitoly do bookmarku˚ vyzˇaduje pouze zapnutı´ tohoto mechanismu a prˇ´ıpadneˇ modifikaci vy´cˇtu teˇch hlavicˇek, ktere´ majı´ by´t do bookmarku˚ zapisova´ny. Samozrˇejmeˇ je mozˇny´ i rucˇnı´ za´pis. ConTEXt sice podporuje automatickou konverzi nadpisu˚ do Unicode (takzˇe je zachova´na cˇesˇtina), bohuzˇel to ale zatı´m linuxovy´ Acrobat Reader (verze 4.0) neumı´, takzˇe je lepsˇ´ı se tomu vyhnout – mı´sto bookmarku˚ by uzˇivatele´ Linuxu videˇli pouze same´ tecˇky. Se zacˇlenˇova´nı´m zvuku˚ a videa nema´m zˇa´dne´ zkusˇenosti. Ostatneˇ, Linuxovy´ Acrobat Reader 4.0 zatı´m tyto vlastnosti nepodporuje. Velice silnou stra´nkou je spolupra´ce ConTEXtu a JavaScriptu. ConTEXt jednak vyuzˇ´ıva´ JavaScript pro neˇktere´ sve´ vlastnı´ cı´le, jednak umozˇnˇuje uzˇivateli zacˇlenit do dokumentu kus vlastnı´ho ko´du. ConTEXt pouzˇ´ıva´ JavaScript naprˇ. k rotova´nı´ obra´zku˚. Tato vlastnost mu˚zˇe by´t velice vy´hodna´ naprˇ. prˇi tvorbeˇ prezentacı´ s ekonomickou te´matikou. V ekonomii je cˇaste´, zˇe se urcˇita´ situace demonstruje sadou grafu˚, ve ktery´ch se postupneˇ ru˚zneˇ posouvajı´ krˇivky nabı´dky a popta´vky. Rotace obra´zku˚ umozˇnˇuje to, zˇe jednotlive´ obra´zky nejsou umı´steˇne´ vedle sebe nebo na na´sledujı´cı´ch stra´nka´ch, ale zˇe se prˇekry´vajı´. Jednoduchy´ prˇepı´nacˇ (odkaz nebo tlacˇ´ıtko) pak zajistı´ bud’ zobrazenı´ prˇ´ıslusˇne´ vrstvy, nebo jejich postupne´ zobrazova´nı´ ve vhodne´m porˇadı´. Mimo to umozˇnˇuje ConTEXt vytva´rˇet nejru˚zneˇjsˇ´ı „polı´cˇka“ (fields): prˇepı´nacı´ tlacˇ´ıtka (check buttons, radio buttons), vyplnˇovacı´ polı´cˇka pro vstup textu apod. Obsah teˇchto polı´cˇek mu˚zˇe by´t spojen s neˇjakou promeˇnnou JavaScriptu a modifikovat jeho vy´pocˇet. Tlacˇ´ıtka, vytvorˇena´ pomocı´ prˇ´ıkazu \goto nebo pomocı´ mechanismu menu,
9. Interaktivnı´ dokumenty a JavaScript Dı´ky panu Thanovi je dnes mozˇne´ prˇimeˇt TEX generovat prˇ´ımo nejen DVI, ale i PDF dokumenty. Od klasicky´ch forma´tu˚, jako je DVI nebo PostScript se PDF v jednom smeˇru dost podstatneˇ lisˇ´ı: nejen zˇe popisuje vzhled vlastnı´ stra´nky, ale umozˇnˇuje do dokumentu integrovat i dalsˇ´ı specia´lnı´ vlastnosti: PDF mu˚zˇe obsahovat hypertextove´ odkazy, animace, prˇehra´vat zvuky a dokonce spousˇteˇt i JavaScript. ConTEXt vytva´rˇ´ı k teˇmto vlastnostem PDF dokumentu˚ inteligentnı´ rozhranı´, takzˇe je mozˇne´ je relativneˇ snadno zacˇlenit do vlastnı´ho elektronicke´ho dokumentu. Jak vytvorˇit hypertextovy´ odkaz jsem popsal vy´sˇe. Stacˇ´ı zapnout interaktivitu, a vsˇechny krˇ´ızˇo8
mohou spousˇteˇt take´ vlozˇene´ funkce JavaScriptu. Hans Hagen tı´mto zpu˚sobem naprogramoval funkcˇnı´ veˇdeckou kalkulacˇku (v PDF). Zda´ se, zˇe tento mechanismus by mohl by´t vhodny´ pro vytva´rˇenı´ ru˚zny´ch interaktivnı´ch vy´ukovy´ch programu˚, interaktivnı´ch testu˚, cenı´ku˚, ktere´ by samy pocˇ´ıtaly ceny objednany´ch produktu˚ (a prˇ´ıpadneˇ i odeslaly e-mail s objedna´vkou) apod. Slozˇiteˇjsˇ´ı aplikace ovsˇem vyzˇadujı´ jednak znalost JavaScriptu, jednak spousˇteˇnı´ na pomeˇrneˇ rychly´ch pocˇ´ıtacˇ´ıch. PDF totizˇ pokazˇde´ prˇekresluje celou stra´nku znova. (Pouzˇitı´ stra´nkove´ cache zpu˚sobuje v Linuxu proble´my se zobrazenı´m.)
a cˇeska´ verze a prˇipravujı´ se dalsˇ´ı. Lokalizace v ConTEXtu znamena´ nejen prˇeklad vsˇech standardnı´ch nadpisu˚ (jako je Obsah, Seznam obra´zku˚ apod.) – ty uzˇ jsou do cˇesˇtiny prˇelozˇeny, ale take´ prˇeklad jmen prˇ´ıkazu˚. V cˇeske´ verzi (interface) se tedy mı´sto prˇ´ıkazu \chapter pouzˇ´ıva´ na´zev \kapitola. Nasˇteˇstı´ je mozˇne´ tuto (podle me´ho mı´neˇnı´) nezˇa´doucı´ vlastnost vypnout. Nejjednodusˇsˇ´ı (i kdyzˇ ne moc cˇiste´) je prˇed vygenerova´nı´ forma´tu nastavit v souboru cont-cz.tex definici \def\defaultinterface{english}. Kromeˇ toho je trˇeba pocˇesˇtit take´ neˇktere´ cˇa´sti pomocny´ch programu˚. Perlovske´ programy texexec a texutil se totizˇ starajı´ nejen o kompilaci dokumentu, ale take´ o vytva´rˇenı´ krˇ´ızˇovy´ch odkazu˚ a rejstrˇ´ıku. Cˇ asem by se meˇly starat i o seznam literatury a nahradit tak program bibtex. Pocˇesˇteˇnı´ tvorby rejstrˇ´ıku jesˇteˇ nenı´ hotovo. Podle dokumentace by meˇlo by´t snadno rˇesˇitelne´ na u´rovni TEXu, ale zatı´m vsˇechny moje pokusy selhaly. Bud’ se klı´cˇova´ slova netrˇ´ıdila podle cˇeske´ho rˇazenı´ pı´smen, nebo selhalo trˇ´ıdeˇnı´ velky´ch a maly´ch pı´smen. Nicme´neˇ doufa´m, zˇe i tato potı´zˇ bude v blı´zke´ dobeˇ odstraneˇna.
10. XML SGML a XML jsou v soucˇasne´ dobeˇ skutecˇnou mo´dnı´ za´lezˇitostı´. Zda´ se, zˇe jsou schopne´ vyrˇesˇit pozˇadavek standardizace elektronicky´ch dokumentu˚ bez nutnosti vnutit autoru˚m jeden typ textove´ho editoru (v prostrˇedı´ cˇesky´ch univerzit by to byl nejspı´sˇe MS Word). Protozˇe jak SGML, tak XML jsou textoveˇ orientovane´ strukturovane´ popisy dokumentu, nenı´ principia´lneˇ velky´ proble´m vysa´zet je v TEXu. Hans Hagen publikoval cˇla´nek [5], ve ktere´m demonstroval schopnost ConTEXtu sa´zet XML. Vysa´zel iterantivnı´ prˇehled cˇla´nku˚ publikovany´ch v MAPSech (bulletinu nizozemske´ho sdruzˇenı´ uzˇivatelu˚ TEXu) – vstupem mu byla bibliograficka´ databa´ze ko´dovana´ v XML. K tomu vyuzˇil experimenta´lnı´ makra, ktera´ nejsou soucˇa´stı´ beˇzˇne´ distribuce. Navı´c bylo trˇeba XML dokument nejdrˇ´ıve pomocı´ specia´lnı´ho parseru prˇeve´st do podoby TEXovy´ch prˇ´ıkazu˚. Nicme´neˇ i tak byly vy´sledky nesmı´rneˇ zajı´mave´. Jeho makra byla schopna obslouzˇit nejrozmaniteˇjsˇ´ı prˇ´ıpady vyuzˇitı´ XML. Podle poslednı´ informace je uzˇ hotova nova´ podpora prˇ´ıme´ sazby XML v ConTEXtu a zacˇalo jejı´ testova´nı´. Za neˇkolik ty´dnu˚ by tedy uzˇ mohl ConTEXt umeˇt zpracova´vat paralelneˇ TEXovsky´ a XML vstup, dokonce i z jednoho souboru.
12. Co ConTEXtu dosud chybı´ ConTEXt toho ve sve´ soucˇasne´ podobeˇ umı´ opravdu hodneˇ. Neˇktere´ veˇci vsˇak jesˇteˇ nejsou vyrˇesˇeny k plne´ spokojenosti. ConTEXt jesˇteˇ neumı´ prˇ´ımo sa´zet XML (podle Hanse Hagena je to ota´zka neˇkolika dnı´), nema´ zatı´m u´plnou podporu bibtexu, ani funkcˇnı´ obdobu AMS-u. Oba nedostatky prozatı´m rˇesˇ´ı dva externı´ moduly, ktere´ jesˇteˇ nejsou zcela dokonale´. Dalsˇ´ım proble´mem je tvorba cˇesky´ch rejstrˇ´ıku˚. Jistou slabinou je take´ dokumentace. Neˇktere´ kapitoly nebyly dosud z holandsˇtiny prˇelozˇeny do anglicˇtiny. Jindy manua´l nepokry´va´ vsˇechny vlastnosti popisovany´ch prˇ´ıkazu˚. To je vsˇak nutnou danı´ rychle´ho rozvoje a neusta´le´ho rozsˇirˇova´nı´ mozˇnostı´ ConTEXtu. Velkou vy´hodou vsˇak je skutecˇnost, zˇe pan Hagen prˇida´va´ na pozˇa´da´nı´ dalsˇ´ı vlastnosti a velice ochotneˇ radı´ vsˇem uzˇivatelu˚m ConTEXtu, a to i se specia´lnı´mi MetaPostovy´mi triky.
11. Lokalizace ConTEXt je vcelku dobrˇe prˇipraven pro lokalizaci pro ru˚zne´ jazykove´ skupiny. V soucˇasne´ dobeˇ existuje holandska´, anglicka´, neˇmecka´, italska´ 9
13. Srovna´nı´ plainu, LATEXu a ConTEXtu
va´zˇneˇjsˇ´ıho konkurenta. Take´ jeho vyuzˇitı´ je podstatneˇ jednodusˇsˇ´ı. Abych tedy tuto cˇa´st shrnul: lide´, kterˇ´ı potrˇebujı´ rychle napsat prˇijatelneˇ vypadajı´cı´ text, poprˇ. veˇdecky´ cˇla´nek o matematice nebo fyzice by meˇli patrneˇ sa´hnout po LATEXu, nejspı´sˇe s pomocı´ LYXu. Lide´, kterˇ´ı si chteˇjı´ vsˇechno naprogramovat sami, by meˇli sa´hnout po plainu. Pro ostatnı´ by mohl prˇedstavovat rozumnou alternativu pra´veˇ ConTEXt. Umozˇnı´ jim snadno vytva´rˇet velmi pu˚sobive´, vza´jemneˇ graficky odlisˇene´ dokumenty a interaktivnı´ prezentace. Take´ vydavatelstvı´ veˇdecke´ a pocˇ´ıtacˇove´ literatury (ale i beletrie) by mohla shledat ConTEXt nesmı´rneˇ zajı´mavy´m – zvla´sˇt’ pokud potrˇebujı´ paralelneˇ vytva´rˇet tisˇteˇne´ a „obrazovkove´“, poprˇ. interaktivnı´ verze svy´ch knih.
Co se ty´cˇe rychlosti kompilace, je plainTEX bezkonkurencˇneˇ nejrychlejsˇ´ı. LATEX je o neˇco pomalejsˇ´ı a ConTEXt vy´razneˇ nejpomalejsˇ´ı ze vsˇech. Taco Hoekwater [3] srovnal rychlost sazby primitivnı´ho dokumentu (hladke´ho textu) o de´lce 200 stran v plainTEXu, LATEXu a ConTEXtu. Kompilace trvala 21 s, 27 s a 2 minuty a 59 s respektive. Podstatneˇ pomalejsˇ´ı kompilace v ConTEXtu je danı´ prˇedevsˇ´ım za mnohem komplexneˇjsˇ´ı (a tedy i pomalejsˇ´ı) vy´stupnı´ rutinu, ktera´ navı´c v primitivnı´ hladke´ sazbeˇ zu˚stane vcelku nevyuzˇita. Jistou danˇ si take´ vyzˇa´da´ vysoka´ „parametrizovanost“ vsˇech prˇ´ıkazu˚. Co se ty´cˇe „standardnosti“, standardem je dnes de facto LATEX. Pokud neˇktere´ veˇdecke´ cˇasopisy a konference prˇijı´majı´ prˇ´ıspeˇvky v TEXu, myslı´ se tı´m obvykle LATEX. Neˇktere´ programy, prˇedevsˇ´ım matematicke´ jako je Maple, ktere´ doka´zˇou generovat TEXovsky´ vy´stup, take´ generujı´ LATEX. Dalsˇ´ı silnou zbranı´ LATEXu je v te´to konkurenci LYX, vizua´lnı´ preprocesor, jehozˇ sı´la neusta´le roste. Nesmı´rneˇ uzˇitecˇny´ je take´ pomeˇrneˇ silny´ a stabilnı´ konvertor z LATEXu do HTML. Ani plainTEX, ani ConTEXt nemohou nic takove´ho nabı´dnout. Co se ty´cˇe snadnosti programova´nı´, je na prvnı´m mı´steˇ opeˇt plainTEX. Cˇloveˇk, ktery´ ma´ veˇci nejradeˇji pod kontrolou, asi nebude pouzˇ´ıvat slozˇite´ makrobalı´ky, ktere´ se o vsˇechno starajı´ samy. Za nı´m bude patrneˇ ConTEXt, ktery´ uzˇivateli umozˇnˇuje, aby modula´rneˇ zarˇadil vlastnı´ makra standardnı´m zpu˚sobem do standardnı´ch prˇ´ıkazu˚. Navı´c Hans Hagen, te´meˇrˇ na pozˇa´da´nı´, dodefinova´va´ do ConTEXtu dalsˇ´ı uzˇitecˇne´ funkce. LATEX v tomto pohledu vycha´zı´, asponˇ podle me´ho mı´neˇnı´, jako nejhu˚rˇe prˇizpu˚sobitelny´ produkt. Graficke´ a designerske´ mozˇnosti ma´ v soucˇasne´ dobeˇ nejsilneˇjsˇ´ı ConTEXt. Pro tvorbu rozsa´hly´ch komplexnı´ch textu˚ a tvorbu interaktivnı´ch dokumentu˚ nema´ mezi ostatnı´mi dveˇma forma´ty
Doporucˇena´ literatura 1. Hans Hagen: ConTEXt: the manual. http://www.pragma-ade.com/ 2. Hans Hagen: metafun. http://www.pragma-ade.com/ 3. Taco Hoekwater: Comparing ConTEXt and LATEX. MAPS 20/1998, s. 280–285. 4. Hans Hagen: The Calculator Demo: Integrating TEX, MetaPost, JavaScript and PDF. MAPS 20/1998, s. 290–296. http://www.pragma-ade.com/ 5. Hans Hagen: The NTG MAPS bibliography from SGML to TEX to PDF. MAPS 23/1999, s. 32–47. http://www.pragma-ade.com/ 6. Hans Hagen: Beyond the bounds of paper but within the bounds of screens: The perfect match of TEX and Acrobat. http://www.pragma-ade.com/ A dalsˇ´ı texty na http://www.pragma-ade.com/.
10