Mihai Budiu -- mihaib+@cs.cmu.edu
http://www.cs.cmu.edu/~mihaib/
septembrie 2000
Acest articol este dedicat unei scule software, care pentru mine este de neînlocuit în activitatea zilnică. Voi descrie în cele ce urmează un limbaj, numit LATEX, și un set de programe folosite pentru tehnoredactarea computerizată. Dintru început simt nevoia însă să avertizez cititorul asupra dezavantajelor acestui sistem, comparat cu alte sisteme similare:
Perfect. Dacă ați ajuns pînă aici cu cititul înseamnă că sunteți gata să înfruntați toate aceste obstacole. Iată și unele dintre avantajele LATEX:
Evoluția acestui limbaj de tehnoredactare este extrem de interesantă în ea însăși, și ne va cauza întîlnirea cu niște giganți ai informaticii. Pe lîngă aceste aspecte anecdotice, multe din idiosincraziile limbajului provin din deciziile făcute de designer-ul inițial, Donald Knuth.
Donald E. Knuth este una dintre figurile cele mai impresionante din istoria informaticii. Deși pagina sa de web este foarte comprehensivă, http://www-cs-faculty.stanford.edu/~knuth/, merită să ne oprim pe scurt asupra personajului. Este genul de individ care are nevoie de o pagină și jumătate pentru a face lista tuturor premiilor, distincțiilor academice și doctoratelor onorifice pe care le-a primit (acestea din urmă deocamdată 21 în număr). Excelența sa academică în informatică este dublată de o cultură enciclopedică, care se reflectă în stilul său literar deosebit de interesant. Chiar dacă, din punct de vedere tehnic, multe din cărțile sale sunt relativ greu de citit, ele sunt întotdeauna o combinație foarte plăcută de știință, literatură, umor și înțelepciune.
Domnul Knuth este începînd din 1968 profesor la universitatea Stanford din California. Doctoratul său este însă în matematică, obținut în 1963 la universitatea Caltech. Articolele sale în general sunt la intersecția dintre matematică și calculatoare, dar are foarte multe publicații de matematică pură; Don Knuth (cum este cunoscut printre prieteni și admiratori) este responsabil de altfel pentru multe din metodele matematice de analiză a algoritmilor folosite astăzi în mod curent. Multe din aceste metode au fost expuse în volumele publicate din ampla lucrare ``Arta programării calculatoarelor''. Această serie a fost începută în 1969, și trebuia să conțină șapte volume masive. Primele trei au fost publicate în 1968, 1971 și respectiv 1973, și au fost traduse și în românește, la Editura tehnică, între 1974 și 1976; sunt cu siguranță disponibile la o mulțime de biblioteci și anticari.
Aceste cărți se doreau a fi o incursiune în toate tehnologiile majore din informatică la vremea respectivă, dar conțin și o mulțime de rezultate originale ale lui Don Knuth. Ca urmare, în 1974 i-a fost decernat cel mai prestigios premiu din informatică, ``Nobel''-ul din calculatoare, premiul Turing.
Frustrat de dificultatea de a produce documente tipărite de bună calitate, care să conțină formule matematice, înainte de a începe volumul 4 din serie, Knuth s-a apucat să studieze problemele tipografiei digitale. Astfel a început o excursie de un deceniu în acest domeniu, care a dus la crearea sistemelor TEX și METAFONT, pentru tehnoredactare computerizată și pentru crearea automată de seturi de caractere (font-uri). Pentru a putea împărtăși întregii lumi creațiile sale, Knuth a făcut codul-sursă al lui TEX disponibil în întregime, gratuit dintru început. Pentru a putea apoi explica codul sursă, Knuth a creat un sistem numit WEB (a nu se confunda cu World-Wide-Web), care permite compunerea simultană a unui program și a documentației sale. Sistemul WEB este explicat de Knuth într-un articol celebru numit ``Literate Programming'', despre programarea ca o formă de literatură! Rezultatele acestui proiect în tipografia digitală au fost tipărite în 1986 sub forma a cinci volume numite ``Computers and Typesetting'' (Calculatoarele și tehnoredactarea). Două dintre cărți sunt manualele TEX și respectiv METAFONT, alte două cărți conțin codul sursă al programelor TEX și METAFONT, descrise în sistemul CWEB (care este o implementare a sistemului WEB pentru limbajul C), iar ultimul volum conține descrierile parametrilor și programelor METAFONT utilizate de Knuth pentru a genera setul de caractere Computer Modern.
Creația lui Knuth nu se termină aici; este autorul a peste douăzeci de cărți și a cîteva sute de articole, de la matematică, analiza algoritmilor, tipografie digitală, pînă la analiza unor texte biblice!
Domnul Knuth are o pagină de web foarte comprehensivă, care reflectă propensiunile sale literare, dar a renunțat de mai bine de zece ani să mai folosească poșta electronică, din cauză că primea prea multe scrisori de la nenumărații fani. În urmă cu cîțiva ani a ieșit la pensie, dar asta nu înseamnă că s-a oprit din activitatea didactică în întregime; ține în continuare prelegeri la universitatea Stanford și în alte locuri unde este invitat, și afirmă că vrea să-și dedice majoritatea timpului rămas completării celor șapte volume din ``Arta programării'', a căror serie a fost întreruptă temporar în urmă cu 26 de ani. Afirmă de asemenea că nu mai primește studenți în calitate de îndrumător la doctorat, dar că va semna teza de doctorat a oricui rezolvă în timp scurt (2-3 săptămîni) una din problemele nerezolvate pe care le propune din cînd în cînd în prelegerile sale (aviz amatorilor de un doctorat pe fugă).
Aceasta este schița de portret a unuia dintre cele mai pitorești personaje din informatică. Chiar dacă ne-am abătut de la subiectul acestui articol, nu am rezistat să nu vorbesc puțin despre el.
Vom vedea mai departe că LATEX nu e nimic altceva decît un pachet de definiții (macro-uri) în limbajul TEX creat de Knuth. Ca atare vom arunca întîi o privire rapidă asupra acestui limbaj.
Versiunile succesive de TEX sunt numerotate cu zecimalele numărului : la ora actuală s-a ajuns la versiunea 3.14159.
Primul lucru care trebuie clarificat este pronunția: TEX se citește de fapt ``tech'', și nu ``tex''. Iată explicația lui Don Knuth pentru etimologie, extrasă din primul capitol al cărții de TEX:
English words like `technology' stem from a Greek root beginning with the letters ; and this same Greek word means art as well as technology. Hence the name TEX, which is an uppercase form of .
Insiders pronounce the of TEX as a Greek chi, not as an `x', so that TEX rhymes with the word blecchhh. It's the `ch' sound in Scottish words like loch or German words like ach; it's a Spanish `j' and a Russian `kh'. When you say it correctly to your computer, the terminal may become slightly moist.
în traducere:
Cuvinte ca ``tehnologie'' sunt formate dintr-o rădăcină grecească care începe cu literele (tau, epsilon, chi); acest cuvînt grecesc înseamnă el însuși ``artă'' dar și ``tehnologie''. De aceea numele TEX, care este scrierea cu litere majuscule a cuvîntului .
Cunoscătorii pronunță litera din TEX ca pe grecescul ``chi'', și nu ca pe un ``x'', astfel încît TEX rimează cu cuvîntul blecchhh. Este ca sunetul ``ch'' din cuvinte scoțiene ca loch sau cuvinte germane ca ach; este ``j''-ul spaniol și ``kh''-ul rusesc. Cînd este pronunțat corect în fața calculatorului, va face ca terminalul să se umezească.
Tehnoredactat corect, litera E din TEX trebuie să apară mai jos decît celelalte (vedeți și figura 4), tocmai pentru a indica faptul că e vorba de un program de tehnoredactare. Cînd se folosește un terminal ASCII cuvîntul se scrie cu T și X mare și E mic: TeX.
Conceptele fundamentale cu care TEX operează sunt cutiuțele și lipiciul (boxes and glue). Motorul care tehnoredactează nu știe mare lucru despre fiecare caracter; tot ceea ce îi trebuie este să știe dimensiunile unei cutii care cuprinde caracterul, ca în figura 2. TEX nu știe nimic despre care puncte din cutie vor fi pictate cu cerneală și care nu; aceasta este treaba altor scule.
Textul este asamblat din astfel de cutiuțe pusă una lîngă alta. TEX aranjează cutiuțe una după alta pe orizontală formînd rînduri. Cînd un rînd se termină, TEXface din el o cutiuță mai mare și pune cutiuțele-rînduri una peste alta. Fiecare pagină este tot o cutie, asamblată din mai multe rînduri puse unul peste altul.
Utilizatorul poate crea cutii cu dimensiuni negative; în felul acesta
se pot obține efecte speciale, micșorînd distanța dintre caractere
sau scriind caractere suprapuse. Comenzi speciale pot muta cutiile
(de exemplu dacă vrem să facem un exponent putem folosi semnul
^
, care va ridica cutia care urmează și va micșora font-ul).
În TEX mai există și un alt tip special de cutie, care se cheamă ``clei''. Ca și cutiuțele, clei-ul are o anumită dimensiune, dar în plus are capacitatea de a se întinde și comprima ca un elastic. Între cuvintele de pe o linie TEX pune automat lipici; asta permite spațiilor dintre cuvinte să se întindă sau să se comprime pentru a ajusta frumos marginea din dreapta a liniei. Cu cît se întinde mai mult lipiciul, cu atît mai ``dureros'' este rezultatul, pentru că așezarea în pagină se depărtează de la cea ideală.
TEX folosește conceptul de lipici pentru a calcula despărțirea în rînduri ``optimă'' a unui text. TEX folosește pentru asta o formulă matematică, care în funcție de cît de întins este lipiciul din fiecare rînd calculează ``frumusețea'' unui paragraf. Cînd programul desparte în rînduri un paragraf, folosește un algoritm deștept inventat de Knuth (folosind programare dinamică) pentru a calcula tăieturile care oferă cel mai plăcut efect estetic, dintre toate cele posibile.
Folosind tipuri speciale de lipici, care se întinde la infinit fără ``dureri'', se pot obține efecte speciale: de exemplu punînd lipici la marginea din dreapta a fiecărui rînd se pot obține pagini la care rîndurile nu sunt egale, ci sunt aliniate la stînga. Punînd lipici la ambele părți se obțin rînduri centrate.
Asta e tot! Folosind cutiuțe și lipici împreună cu algoritmi inteligenți de aranjare în pagină, TEX obține tipografie de calitate extraordinară.
Trebuie menționate aici formulele matematice: modul în care TEX formatează matematica este încă neîntrecut, deși sistemul este vechi de peste douăzeci de ani. Cînd are de tehnoredactat o formulă, TEX folosește un algoritm sofisticat care re-calculează dimensiunile și plasamentele tuturor cutiuțelor în funcție de tipurile de simboluri care apar: fiecare simbol este catalogat ca fiind într-una din 13 categorii: operator binar, operator relațional, accent, un semn de punctuație, un tip de paranteză închisă sau deschisă, semn de fracție, radical, etc. Fiecare din aceste categorii de simbol se comportă într-un anume fel în raport cu vecinii săi; unele simboluri cresc cît este necesar pentru a se adapta la cutiile cu care sunt vecine (de exemplu linia de fracție sau parantezele).
TEX este un limbaj foarte original. Principalul concept din acest
limbaj este macro-instrucțiunea, numită familiar și macro. Cei care programează în C sunt familiarizați cu
macro-urile, care sunt acolo definite cu comanda #define
. Un
macro este practic o instrucțiune care arată cum un anumit text este
substituit cu un altul.
Limbajul TEX este în întregime bazat pe macro-uri. Fiecare variabilă este de fapt un macro care este substituit în text cu valoarea sa. Limbajul are un set restrîns de operații primitive (cea mai primitivă operație fiind cea de a ``desena'' un caracter), și toate celelalte operații sunt definite din acestea folosind macro-uri. Unele macro-uri se pot expanda la rîndul lor într-un text care conține macro-uri, care trebuie expandate la rîndul lor, etc. În felul acesta, folosind macro-uri recursive, limbajul folosește un concept rudimentar de buclă.
Limbajele bazate pe macro-uri sunt extrem de puternice; de fapt sunt la fel de puternice ca orice alt limbaj; pentru demonstrație Andrew Marc Greene de la universitatea MIT a scris în 1992, în 470 de linii de TEX (inclusiv comentarii) un interpretor complet de BASIC! (Un alt limbaj bazat pe macro-uri foarte folosit este m4.) Dar anumite complicații cu macro-urile fac de fapt folosirea lor extrem de dificilă. Cele mai multe probleme apar din ordinea de evaluare: cînd avem un macro aplicat altui macro, care dintre ele trebuie expandat întîi? În funcție de ordine putem avea rezultate diferite.
În TEX problemele sunt exacerbate din cauză că nu există cuvinte rezervate, ca în toate limbajele cu care suntem obișnuiți. Fiecare cuvînt sau chiar fiecare caracter poate fi transformat într-un macro, care se expandează în altceva! Expansiunea unui macro poate genera o definiție care schimba semnificația macroului însuși!
Cu tot respectul pentru dl. Knuth, care a jucat un rol foarte important în 1968 în construirea primului compilator de Algol, și care a contribuit la crearea unor importante concepte în teoria compilatoarelor, limbajul TEX este o varză completă. Utilizatorul trebuie să consume un efort de imaginație substanțial pentru a face programele să funcționeze, fiind foarte atent la ordinea de evaluare și la efectele laterale ale fiecărui macro.
Pentru că unele macro-uri le redefinesc pe altele, avem o neplăcută problemă de dependență: efectul unui ``program'' TEX depinde de mediul în care este invocat. Pentru că efectele prin variabile globale și definiții de macro-uri nu sunt întotdeauna controlate clar, programele TEX sunt foarte greu de scris și de depanat. Mai mult, unele concepte care funcționează foarte frumos în izolare, au mari probleme cînd sunt folosite laolaltă (de exemplu, în LATEX e foarte complicat să faci note de subsol în tabele).
Utilizatori sofisticați pot folosi TEX pentru a tehnoredacta texte relativ simple, dar doar o mînă de oameni poate exploata TEX cu ușurință. Eu cred că design-ul mizerabil al limbajului este unul dintre motivele fundamentale pentru care TEX nu este folosit pe scară mai largă. De fapt TEX ar fi trebuit de mult să fie scos din circulație de produse mai ușor de folosit; singura explicație pentru longevitatea sa este faptul că piața pentru un program de tehnoredactare de matematică este extrem de îngustă, iar dificultatea implementării unui program de tehnoredactare atît de sofisticat (cu toată publicarea algoritmilor și a codului sursă) este enormă (Knuth este un programator colosal, cu o atenție nemărginită pentru detaliu).
Simultan cu TEX, Knuth a construit un alt program foarte interesant, numit METAFONT, care poate genera familii întregi de font-uri dintr-o singură specificație. Astfel, programatorul descrie forma generală a fiecărui caracter; fișiere de configurație pot apoi genera toate familiile de font-uri dintr-o singură descriere: caracterele oblice, grase, egale, CAPITALIZATE, italice și variatele dimensiuni și mărimi, cu și fără serife sunt toate generate apoi automat din aceeași descriere.
METAFONT este tot un limbaj de programare care permite desenarea a felurite primitive geometrice, declarații de variabile, definirea de macro-uri și bucle, folosirea a diferite creioane cu vîrfuri eliptice pentru a desena curbe spline cubice2, sisteme de ecuații lineare pentru definirea de variabile (rezolvate automat de interpretor).
Înainte de a afla mai multe detalii despre LATEX, ne întîlnim din nou cu o figură colosală a informaticii, Leslie Lamport.
Deși mai puțin faimos decît Donald Knuth, Leslie Lamport este unul dintre cercetătorii cei mai renumiți din domeniul calculatoarelor. Domeniul său de specialitate este teoria sistemelor distribuite și verificarea formală. După ce a obținut un doctorat în matematică în 1972 de la universitatea Brandeis, a lucrat pentru o vreme la compania Stanford Research Institute (inițial formată prin colaborare cu universitatea Stanford; SRI este unul din cele mai mari centre de cercetare din întreaga lume, care lucrează pe bază contracte). În timp ce lucra aici Lamport a creat sistemul LATEX, care este pretextul acestui articol. După un scurt timp s-a mutat la centrul de cercetări Systems Research Center (SRC) al companiei Digital (care a fost între timp cumpărată de Compaq). Lamport lucrează în continuare la Compaq SRC, unde puteți găsi și pagina sa de web: research.compaq.com/SRC/personal/lamport/home.html.
Înainte de a discuta despre cea mai cunoscută creație a lui Lamport, LATEX, se cuvine să menționăm unele dintre contribuțiile lui fundamentale în teoria sistemelor concurente și distribuite:
În 1983 Lamport învățase TEX de relativ puțină vreme, și își construise un set de macro-uri foarte utile, care mutau operațiile pe un nivel ceva mai înalt, în care descriai nu cum vrei să arate un document, ci care este structura lui logică.
Sistemul acesta de macro-uri a căpătat numele Lamport TEX, sau LATEX. Editura Addison-Wesley dorea să tipărească un manual despre un sistem de tehnoredactare pentru matematicieni și ingineri, așa că un redactor l-a contactat pe Lamport. Ca urmare, Lamport a scris ``cartea de LATEX'' (vedeți și secțiunea despre alte surse de informație), care a devenit un best-seller (s-au vîndut cîteva sute de mii de exemplare și a fost retipărită de cel puțin șapte ori). Cartea a propulsat setul de macro-uri al lui Lamport în celebritate; ca și TEX, acestea sunt disponibile în cod sursă pe Internet.
Ceea ce LATEX încearcă să facă este să ascundă întreaga mașinărie încîlcită a TEX-ului sub o fațadă netedă: redefinirea comenzilor este în mod implicit interzisă (dar poate fi făcută, dacă utilizatorul chiar dorește), un set de comenzi esențiale este oferit, care organizează documentul într-o formă logică, și sunt introduse fișierele de stil, care grupează declarații care influențează arhitectura întregului document; schimbarea stilului se poate face separat de cea a conținutului. LATEX introduce de asemenea suport pentru referințe încrucișate (genul ``vezi figura X'', unde X este numerotat automat de sistem), etichete, cuprins, index, bibliografie, unele cu ajutorul unor programe suplimentare care procesează texte.
LATEX face o treabă destul de bună; este un limbaj destul de rezonabil, în care se pot produce relativ repede rezultate atractive; matematica este tehnoredactată la întreaga putere a TEX-ului. Dar implementarea LATEX era greu de menținut și dezvoltat, așa că începînd din 1993 o serie de voluntari și programatori din întreaga lume au pornit un nou proiect numit LATEX3 (versiunea de LATEX la acea dată era 2.09). LATEX3 este un proiect în evoluție, dar a fost deja lansată o versiune preliminară, numită LATEX2e.
LATEX a fost în întregime re-implementat într-o manieră asemănătoare cu programarea orientată pe obiecte, într-o serie de module separate. Unele module se pot înlocui unele pe altele, și felul în care utilizatorii pot contribui cu noi module este standardizat. Asta a dat naștere la o cantitate remarcabilă de facilități noi aduse limbajului și sistemul de folosire a font-urilor a fost extins și perfecționat, permițînd LATEX să folosească font-uri dezvoltate de terți (și nu numai Computer Modern).
LATEX2e este compatibil cu 2.09, dar nu și invers. Instrucțiunile pe care le prezentăm în continuarea acestui articol funcționează în ambele versiuni. Limbajul de bază 2.09 este complet inclus în 2e.
În cele ce urmează voi prezenta pe scurt unele din cele mai importante construcții ale limbajului. Mi-e teamă că stăpînirea limbajului este imposibilă fără posesiunea cel puțin a cărții de bază. Pe Internet există cîteva cărți de introducere, și cel puțin una a fost publicată și în română. De asemenea, există o pleiadă de fișiere de ``help'' care descriu sumar comenzile. Dar nici una nu poate înlocui în acoperire manualul lui Lamport.
Figura 4 arată un simplu document complet LATEXși
rezultatul tehnoredactării sale. Orice document începe cu o
declarație de stil (\documentstyle
) și este cuprins între
\begin{document}
și \end{document}
. În celelalte
figuri voi omite aceste trei linii.
Înainte de a discuta unele dintre comenzile importante, va trebui să vă spun cum am obținut fiecare din imaginile din acest text.
Pentru a scrie textul din partea de jos din figurii 4 am folosit un editor de texte obișnuit, în cazul meu emacs, care are un mod major care ajută editarea de documente TEX și LATEX (vedeți și articolul meu despre emacs din PC Report din mai 1997).
Am salvat fișierul sub numele exemplu.tex. Sufixul .tex este folosit atît pentru fișiere TEX cît și pentru fișiere LATEX.
Pentru a tehnoredacta fișierul am folosit apoi comanda: latex
exemplu.tex. Această comandă pornește interpretorul TEX, care la
rîndul lui încarcă un set de macro-uri fundamentale, numite
plain.tex, și care apoi încarcă setul de macro-uri numit
latex.tex. Apoi interpretorul citește fișierul
exemplu.tex și îl execută. Comenzile (în general indicate
de cuvinte care încep cu semnul \
, backslash), sunt macro-uri,
care sunt expandate. Literele și semnele speciale sunt
tehoredactate, așa cum am explicat mai sus în secțiunea despre
cutiuțe.
(De fapt LATEX trebuie executat de două, pentru că prima oară strînge informații despre unde se află fiecare secțiune pe care a la a doua rulare le folosește pentru a construi cuprinsul.)
Această execuție produce mai multe fișiere, din care cel mai important este exemplu.dvi. Sufixul .dvi înseamnă DeVice Independent, adică ``independent de dispozitivul de afișare''. Fișierele dvi conțin o descriere a documentului tehnoredactat, în sensul că spun unde pe pagină trebuie plasată fiecare cutiuță și ce simbol se află în interiorul ei. Un fișier dvi nu conține însă nici un fel de informații despre cum arată caracterele, sau eventualele imagini incluse.
Programul dvips transformă un fișierul exemplu.dvi într-un fișier Postscript exemplu.ps folosind comanda dvips -o exemplu.ps exemplu.dvi. Acest fișier extrage informații despre font-uri din locuri dinainte stabilite, adaugă imaginile incluse în text și generează un program în Postscript. Acesta este un program de sine-stătător, care conține toată informația despre cum arată rezultatul final; acest ``program'' poate fi fie vizualizat pe ecranul calculatorului folosind programul ghostview, fie tipărit la orice imprimantă care înțelege limbajul Postscript.
Toate aceste programe, tex, latex, dvips, ghostview sunt disponibile gratuit de pe Internet, laolaltă cu o sumedenie de fișiere de configurare, macro-uri și font-uri, pentru o mulțime de sisteme de operare incluzînd Windows, Unix și MacOS.
Programele LATEX pot fi scrise folosind doar setul de caractere ASCII. Pentru a genera semne care nu sunt pe tastatură se folosesc macro-uri speciale care folosesc font-uri speciale. Acesta este un avantaj mare asupra programelor WYSIWYG: privind fișierul putem spune exact ce se va întîmpla; toate comenzile și caracterele sunt descrise printr-un text clar (de exemplu în Microsoft Word trecerea de la text normal la text gras nu este vizibilă decît prin efectele sale).
Iată cum interpretează LATEX diferitele construcții:
Caracter | Nume | Semnificație |
# |
Diez | Număr de argumente într-un macro definit de utilizator |
$ |
Dolar | Delimitează formule matematice |
% |
Procent | Începe un comentariu |
& |
Ampersand | Separă coloanele în tabele |
~ |
Tilda | Spațiu unde nu se poate despărți rîndul |
_ |
Subliniat | Pentru a scrie indici |
^ |
Căciulă | Pentru a scrie exponenți |
\ |
Backslash | Urmează un nume de macro |
{} |
Acolade | Grupează mai multe caractere la un loc |
\
. Literele mari și mici sunt
distincte, deci \LaTeX
e diferit de \LaTeX
.
%
este folosit pentru a introduce
comentarii în text: tot ce urmează pînă la sfîrșitul liniei este
ignorat de către interpretorul LATEX.
$a^bc$
vom
obține ca rezultat abc; dacă vrem să
ridicăm a la exponentul bc trebuie să scriem $a^{bc}$
,
care generează abc.
\t
în C) și linie-nouă (\n
sau \r
); nu puteți schimba deci alinierea textului tastînd
mai multe spații. Excepții la această regulă sunt însă
următoarele:
\
'', (backslash urmat de spațiu). Trebuie deci să
scrieți:
\LaTeX\ este un program.
După cum spuneam, TEX și LATEX sunt excepționale în tehnoredactarea formulelor matematice. O sumedenie de macro-uri sunt predefinite pentru toate soiurile de operatori matematici, care de care mai ciudați.
Formulele sunt delimitate de semne dolar $
. Există două
feluri de formule: care apar în text, care sunt delimitate de un
singur semn $
, și formule care apar de sine-stătător, care
sunt separate cu cîte două semne: $$
.
Figura 5 arată unele simboluri folosite în formule matematice.
În LATEX există două tipuri de macro-uri: macro-uri simple, care pot avea argumente, sau macro-uri de tip ``bloc'' (environment). Macro-urile de tip bloc apar întotdeauna în perechi begin-end; între begin și end este activ macro-ul.
Trei macro-uri de tip bloc pot fi folosite pentru a obține mai multe feluri de enumerări; acestea sunt itemize, enumerate și description. itemize va pune biluțe (sau alte semne) în fața fiecărui element, enumerate va pune cifre iar description va pune ceea ce indică utilizatorul. Vedeți și figura 6 pentru un exemplu.
Figura 7 arată unele dintre lucrurile care se pot face folosind tabele.
Mediul ``tabular'' este urmat de o listă de poziții ale coloanelor:
Literă | Engleză | Semnificație |
l | left | aliniat la stînga |
c | center | centrat |
r | right | aliniat la dreapta |
| |
bar | bară verticală |
p{marime} | paragraph | coloană de lățime fixă |
Coloanele sunt separate cu semnul ampersand &
, și liniile sunt
terminate cu semnul \\
. Texte pe mai multe coloane se pot face
folosind macro-ul \multicolumn
, care are trei argumente. Linii
orizontale se pot face folosind \hline
; linii orizontale
parțiale cu \cline
.
Rămînînd în interiorul aceleiași familii de font-uri se pot schimba font-urile cu diferite comenzi. Figura 8 arată cîteva exemple de comenzi și fonturile obținute.
TEX și LATEX oferă o serie bogată de accente, care se pot folosi pentru a scrie în majoritatea limbilor cu alfabete latine, ilustrate în figura 9.
LATEX generează automat numere pentru pagini, capitole, secțiuni,
paragrafe, ecuații, figuri, tabele, etc. Folosind macro-ul
\label
se generează automat nume pentru etichete. De exemplu,
\label{sec}
plasată în text va da variabilei sec
numărul secțiunii curente. Plasînd \label{fig}
în
interiorul textului asociat unei figuri (vedeți mai jos un exemplu),
va da variabilei fig numărul figurii curente.
Folosind macro-ul \ref
putem referi aceste variabile astfel:
vezi capitolul \ref{sec}
.
Figurile sunt tot dreptunghiuri în LATEX, dar sunt speciale pentru că plasamentul lor în text nu este fixat de la început, ci este aranjat în funcție de restul textului. Figurile se numesc de aceea ``corpuri flotante'', pentru că ``plutesc'' prin textul înconjurător pentru a ajunge mereu unde a indicat utilizatorul. Există două tipuri de figuri, care funcționează asemănător, dar sunt numerotate independent: figuri și tabele. Iată un exemplu de fragment cod LATEX care generează un tabel:
\begin{table}[ht] \begin{tabular}{lll} .... \end{tabular} \caption{\label{culori}Culorile fundamentale.} \end{table}
Acest tabel conține chiar o tabelă (al cărei corp l-am omis), dar
care asociază un text (capțiune) cu tabelul și o etichetă, numită
culori, care poate fi referită în text cu \ref{culori}
.
Algoritmul de paginare va încerca să plaseze tabela după
indicațiile dintre parantezele pătrate ([ht]
în exemplul
de mai sus), după posibilități, în ordine în locul în care apare
în text (h = here), la partea de sus a unei pagini (t = top) sau la
partea de jos a unei pagini (b = bottom).
După cum am văzut pînă acum în exemple, există mai multe feluri
de macro-uri. Dar toate sunt construite din același obiect
fundamental: un macro cu zero sau mai multe argumente. Utilizatorii
pot defini și ei macro-urile lor, și sunt chiar încurajați să
facă asta. Comanda \newcommand
chiar asta face.
Pentru a defini un macro fără argumente folosim ceva de genul:
\newcommand{\pcr}{PC Report}
Iată și un exemplu de macro cu două argumente, folosit pentru semnul ``combinări de x luate cîte y'':
\newcommand{\comb}[2]{C^{#1}_{#2}}
După cum puteți ghici, semnul #1
înseamnă ``primul
argument''. Pentru a folosi acest macro putem scrie ceva de genul:
\comb{5}{x}
LATEX permite de asemenea definirea unor macro-uri bloc; asta se
face cu ajutorul comenzii \newenvironment
. Figura 10
arată exemple de macrodefiniții.
Cînd expansiunea unui macro generează un alt macro, acesta este expandat la rîndul lui; acest proces se încheie cînd se generează caractere sau macro-uri fundamentale (de exemplu nume de simboluri speciale). Unele dintre macro-urile predefinite pot avea argumente opționale, care sunt transmise între paranteze pătrate.
Prima linie din document este \documentstyle
; acest macro are
un argument care indică tipul de document care urmează. Schimbînd
argumentul puteți schimba radical tipul de document. Tipurile
standard de document sunt article, report, book, sau
letter. Acest macro este înlocuit în versiunea LATEX2e de
macro-ul \documentclass
.
\documentstyle
poate avea tot felul de argumente opționale,
care pot influența dramatic stilul. Font-ul standard e de 10 puncte,
dar putem mări caracterele cu
\documentstyle[12pt]{article}
Dacă vrem să scriem pe două coloane, ajunge să facem:
\documentstyle[twocolumn]{article}
și așa mai departe, avem la dispoziție o mulțime de opțiuni.
În varianta LATEX2e a fost introdusă o nouă metodă (care nu
funcționează în LATEX2.09) de a încărca pachete de macro-uri,
folosind comanda \usepackage
. Există efectiv mii de pachete
de macro-uri, de la modificări și extensii ale comenzilor standard
pînă la pachete ultra-specializate pentru diferite domenii (chimie,
fizică, matematică, algoritmi, etc.), marea majoritate fiind
disponibile pe Internet, din arhivele CTAN (vedeți mai jos secțiunea
despre alte surse de informație).
O grămadă de alte scule pot opera cu fișiere LATEX; iată aici unele dintre cele mai importante:
\index
în text, dar restul
procesării este automat.
LATEX este un program foarte complicat, dar cu care se pot obține cu ușurință rezultate spectaculoase, mai ales în tehnoredactarea de formule matematice. Rămîne să decideți dacă vă este sau nu util. Învățarea este cîteodată anevoioasă, și limbajul este plin de idiosincrazii. Dar, fie ca ne place, fie că nu, LATEX va rămîne pentru viitorul apropiat singura alternativă decentă pentru tehnoredactarea computerizată de mare calitate a textelor matematice.
Cele trei cărți de LATEX:
Cartea de TEX: ``The TeX book de Donald E. Knuth; Addison-Wesley, 1986, ISBN 0-201-13447-0 / 0-201-13448-9.
Tot software-ul și documentația free despre TEX se află la arhiva numită Comprehensive Tex Archive Network și oglinzile sale: http://www.ctan.org/.
Site-ul de web al proiectului LATEX: http://www.latex-project.org/
Legături despre METAFONT: http://www-cgrl.cs.mcgill.ca/~luc/metafont.html
Un articol despre formatarea logică și vizuală scris de Leslie
Lamport ``Document Production: Visual or Logical?'',
http://www.research.digital.com/SRC/personal/lamport/pubs/document-production.ps.
Un articol despre impactul LATEXde Leslie Lamport ``How (La)TeX
changed the face of Mathematics'',
http://www.research.digital.com/SRC/personal/lamport/pubs/lamport-latex-interview.ps.