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 theof 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ţă literadin 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.