Sunteți pe pagina 1din 165

CUPRINS

Prefaţă .......................................................................................... 11
Capitolul 1: CE ESTE TEX ? ...................................................... 13
1.1 Originea TEX–ului........................................................... 13
1.2 Cum lucrează TEX–ul ?................................................... 14
1.3 Caracterele TEX–ului ...................................................... 17
Caractere unite ................................................................ 19
Accente ............................................................................ 21
1.4 Secvenţe de control (comenzi sau instrucţiuni) ............... 22
1.5 Grupuri şi moduri de lucru ı̂n plain TEX ........................ 22
1.6 Mesaje de eroare ............................................................. 28
Capitolul 2: FONTURI UTILIZATE DE plain TEX .................... 33
2.1 Fonturi preı̂ncărcate ........................................................ 33
2.2 Definirea de noi fonturi (fonturi TEX) ............................ 35
2.3 Scalarea unui font ........................................................... 36
2.4 Scalarea globală .............................................................. 37
2.5 Fonturi ı̂n modul matematic de lucru .............................. 38
Capitolul 3: SPAŢIERI, CONCATENĂRI ŞI SALTURI............. 41
8 Cuprins

3.1 Spaţieri orizontale ........................................................... 41


Spaţii neı̂ntrerupte ........................................................... 42
Spaţierea orizontală arbitrară .......................................... 42
3.2 Spaţierea verticală........................................................... 43
3.3 Spaţii care se extind şi care se comprimă (glue) ............. 44
3.4 Salturi ............................................................................. 48
3.5 Spaţierea şi ı̂ntreruperea ................................................. 51
3.6 Spaţierea ı̂ntre paragrafe ................................................. 52
3.7 Alte tipuri de salturi ....................................................... 52
3.8 Salturi negative ............................................................... 54
Capitolul 4: PARAGRAFE .......................................................... 57
4.1 Începutul şi sfârşitul unui paragraf ................................. 57
4.2 Alinierea implicită a paragrafelor.................................... 58
4.3 Generarea secvenţială a liniilor ....................................... 58
4.4 Margini la stânga şi la dreapta ....................................... 60
4.5 Centrarea textului ........................................................... 61
4.6 Itemizări.......................................................................... 61
4.7 Prelucrarea mai multor alineate...................................... 65
4.8 Note de subsol................................................................. 66
4.9 Macroul item triplu ......................................................... 67
4.10 O alternativă pentru item ............................................. 68
Capitolul 5: ORGANIZAREA ŞI PROIECTAREA
PAGINILOR ............................................................ 71
5.1 Generarea implicită a unei pagini ................................... 71
5.2 Realizarea manuală a ı̂ntreruperii liniilor
şi paginilor ...................................................................... 77
Capitolul 6: BOXURI................................................................... 81
Cuprins 9

6.1 Scrierea boxurilor ............................................................ 82


Stivuirea boxurilor (scrierea pe verticală) ........................ 82
Scrierea boxurilor pe orizontală ....................................... 83
6.2 Tipuri de boxuri.............................................................. 84
6.3 Operaţii cu boxuri........................................................... 86
Asignarea unui box .......................................................... 86
Utilizarea conţinutului unui box ...................................... 87
Translarea pe verticală şi pe orizontală............................ 89
Încadrarea şi divizarea unui box ...................................... 90
6.4 Dimensiunile unui box..................................................... 92
6.5 Spaţii ı̂ntre boxuri ........................................................... 93
6.6 Linii................................................................................. 95
Capitolul 7: REALIZAREA TABELELOR.................................. 97
7.1 Alinieri simple ................................................................. 98
7.2 Cazuri speciale de alinieri ............................................... 100
7.2.1 Scurtarea preambulului ................................................ 100
7.2.2 Intrări vide ................................................................... 101
7.2.3 Inserarea de text (material) ı̂ntre linii.......................... 102
7.3 Linii verticale .................................................................. 103
7.4 Alinieri verticale.............................................................. 105
Capitolul 8: SCRIEREA MATEMATICĂ.................................... 105
8.1 Simboluri matematice ..................................................... 107
8.2 Fonturi ı̂n modul matematic de lucru .............................. 112
8.3 Indici şi exponenţi........................................................... 113
8.4 Accente ı̂n modul matematic de lucru ............................. 114
8.5 Spaţierea ı̂n modul matematic de lucru ........................... 116
8.6 Fracţii.............................................................................. 117
10 Cuprins

8.7 Stivuirea mai multor obiecte........................................... 118


8.8 Comanda \mathop........................................................... 119
8.9 Radicali ........................................................................... 120
8.10 Simboluri orizontale extinse .......................................... 121
8.11 Simboluri verticale extinse ............................................ 122
8.12 Stivuirea simbolurilor .................................................... 124
8.13 Generarea mai multor formule matematice ................... 126
8.14 Alinierea mai multor formule ........................................ 127
8.15 Numerotarea formulelor ................................................ 127
8.16 Matrici........................................................................... 129
8.17 Ajustarea spaţiului dintre linii ...................................... 132
8.18 Separarea a două linii.................................................... 132
8.19 Scrierea unei matrici generale ....................................... 133
8.20 Diagrame ....................................................................... 134
Capitolul 9: CE ESTE LATEX ..................................................... 137
9.1 Organizarea logică a documentului ................................. 139
9.1.1 Structura generală a fişierului sursă ............................. 139
9.2 Capitole şi secţiuni .......................................................... 143
9.3. Etichete şi referinţe........................................................ 146
9.4. Variabile LaTEX............................................................. 148
9.4.1 Lungimi ........................................................................ 148
9.4.2. Lungimi pentru controlul layout-ului .......................... 149
9.4.3. Designul unei pagini.................................................... 150
9.4.4. Variabile ı̂ntregi .......................................................... 152
9.4.5. Parametri de stil ......................................................... 154
Index de concepte şi comenzi TEX (plain TEX) ............................ 157
Bibliografie.................................................................................... 177
Prefaţă

”Capul tânărului nu e un vas


pe care să–l umpli,
ci o făclie pe care s–o aprinzi,
astfel ı̂ncât mai târziu
să lumineze cu o lumină proprie.”
Plutarh

TEX este un produs program conceput pentru realizarea unor


documente standard (articole, rapoarte, scrisori, cărţi),
ı̂n special a acelor documente care conţin multe elemente de ma-
tematică (ecuaţii, matrici etc.). Această carte este destinată atât
ı̂ncepătorilor, cât şi celor care au deja experienţă ı̂n utilizarea
diferitelor versiuni ale sistemului TEX (LATEX, AMSTEX, AMS-
LATEX).
Expunerea de faţă familiarizează cititorii cu cel mai perfor-
mant sistem de formatat texte, conceput ı̂n conformitate cu cele
mai exigente standarde de tehnoredactare. Prin conţinutul ei se
pune la dispoziţia utilizatorului atât setul de comenzi de bază
(TEX-ul virtual), cât şi sistemul de macrouri (plain TEX); cartea
este prima de acest fel ı̂n limba română.
Dacă sunteţi ı̂ncepător ı̂n acest domeniu, citiţi fiecare capitol
şi ı̂ncercaţi să executaţi toate exemplele prezentate. Concentra-
12 Prefaţă

ţi-vă atenţia asupra capitolelor 1-5 şi 8, dacă doriţi scrierea tex-
telor matematice. Cum cea mai bună metodă de a ı̂nvăţa un
limbaj de programare (sistemul TEX are asemenea caracteristici)
este prin exemple, materialul de faţă conţine cel puţin un exemplu
de utilizare pentru fiecare concept sau comandă TEX prezentată.
Textul din exemplele prezentului material, atât cel presupus că
apare ı̂n “fişierul sursă” cât şi cel al documentului final (*.dvi),
este scris (ı̂n general) cu caractere de mărime 8pt. Pentru scrierea
comenzilor, am folosit fontul de tip ”maşină de scris” (\tt).
Cartea se bazează pe experienţa acumulată de autor ı̂n peri-
oada ı̂n care a activat ca tehnoredactor la ”Analele Ştiinţifice ale
Univ. Al.I. Cuza” din Iaşi, Secţia Matematică (1992-1999), pre-
cum şi pe cursul ”Sisteme de texte” predat studenţilor din anul IV
ai Universităţii ”Al.I. Cuza” din Iaşi, Facultatea de Matematică,
Secţia Matematici Aplicate.
Textul acestei cărţi a fost scris cu ajutorul procesorului plain
TEX, folosind caractere de mărime 12pt. Întreg materialul rezul-
tat a fost supus atenţiei următorilor specialişti: domnul
Prof. Dr. V. Oproiu de la Facultatea de Matematică a Uni-
versităţii “Al.I. Cuza” din Iaşi, domnul Conf. Dr. H.F. Pop de la
Facultatea de Matematică şi Informatică a Universităţii “Babeş-
Bolyai” din Cluj şi domnul Dr. C. Trenchea de la Institutul de Ma-
tematică ”O. Mayer” al Academiei Române, Filiala Iaşi. Pentru
observaţiile pertinente şi pentru tot efortul depus, autorul doreşte
să le adreseze tuturor mulţumirile cuvenite.

august 2000
Autorul
CAPITOLUL 1. CE ESTE TEX ?

1.1 Originea TEX–ului

Sistemul TEX (se pronunţă teh, şi nu tex!) a fost creat de


renumitul matematician şi informatician american Donald E.
Knuth, profesor la Universitatea Stanford din SUA. Descrierea
acestui sistem este făcută ı̂n cartea The TEXbook, publicată de
Compania Addison Wesley ı̂n 1984 (vezi [2]). Produsul TEX este
strâns legat de cărţile lui Knuth “The Art of Computer Program-
ming”. Cea de–a patra carte din această serie este dedicată dac-
tilografierii computerizate (computer typesetting). Aici pot fi
găsite, după propriile cuvinte ale lui Knuth, elementele de bază
ale originii sistemului TEX.
După cum este şi natural, prima versiune a sistemului TEX
(denumită TEX simplu) a fost dezvoltată ı̂n următorii ani chiar de
D.E. Knuth. Noul sistem astfel rezultat (denumit plainTEX), a
fost extins de către Michael D. Spivak ı̂n 1990 (vezi [8]), obţinând
versiunea AMS–TEX, versiune recunoscută de Societatea Ameri-
cană de Matematică drept instrument oficial de pregătire şi pre-
zentare a manuscriselor ı̂n vederea publicării.
O altă versiune de TEX a fost creată de către Leslie Lam-
port, denumită LATEX (vezi [3]). Bazându–se pe colaborarea cu
cei mai experimentaţi tehnoredactori din SUA, această versiune
14 Capitolul 1

respectă convenţiile valabile ı̂n SUA, multe dintre ele nefiind va-
labile ı̂n Europa. Actualmente este cunoscută o versiune şi mai
nouă, denumită LATEX2ε (vezi [4], [5]).
În limba română există cartea semnată de Artur Pusztai &
Gheorghe Ardelean (vezi [6]) care descrie versiunea LATEX 2.09,
corespunzătoare ediţiei ı̂ntâi a cărţii [3], precum şi o apariţie mai
recentă, cartea semnată de P.A. Blaga & H.F. Pop (vezi [1]).
Facem precizarea că ı̂n toate versiunile amintite mai sus este
utilizat acelaşi set de macrouri TEX , anume TEX–ul simplu. De-
osebirea dintre variante constă ı̂n apariţia de concepte şi definiţii
specifice.
Aşadar, TEX–ul este un produs program destinat culegerii
şi tipăririi de texte cu ajutorul calculatorului (editare computeri-
zată), texte ı̂n care abundă simboluri mai puţin uzitate ı̂n scrierea
obişnuită (simboluri matematice, formule chimice etc.) şi care pot
constitui un document: carte, articol, revistă ştiinţifică, scrisoare.
În cele ce urmează vom referi produsul program TEX spu-
nând: sistemul TEX, procesorul TEX sau, pur şi simplu, TEX–ul.

1.2 Cum lucrează TEX–ul ?


TEX–ul nu este un sistem de tipul “what you see is what
you get”, adică utilizatorul de TEX nu vede imediat forma fi-
nală a textului (materialului) tocmai cules. Procesul de pregătire
a unui document cu ajutorul TEX–ului este similar procesului
de compilare a unui program scris ı̂ntr–un limbaj de programare
evoluat, anume, programul sursă este compilat (generându-se fi-
şierul de coduri obiect) şi ı̂n urma editării de legături se obţine
fişierul executabil.
Analog se petrec lucrurile şi ı̂n cazul sistemului TEX. Se
pregăteşte “fişierul sursă” (cel ce conţine textul documentului),
editat ı̂n spiritul normelor şi convenţiilor recunoscute de sistemul
TEX (vezi Pasul 1). Aşa cum vom vedea mai târziu, acest “fişier
sursă” conţine (printre altele) instrucţiuni primitive (numite şi
CE ESTE TEX ? 15

comenzi sau secvenţe de control), macro–comenzi predefinite ale


TEX-ului, macro–comenzi definite ı̂n fişiere de stil (acestea vor fi
apelate numai ı̂n caz de necesitate), precum şi macro–definiţii dez-
voltate de utilizator-ul de TEX. Fişierul sursă astfel pregătit este
compilat (ı̂n urma supunerii acestuia prelucrării procesorului TEX)
şi linkeditat (dacă a fost nevoie), obţinându-se ı̂n final fişierul exe-
cutabil (vezi Pasul 2). Etapa finală constă ı̂n lansarea ı̂n execuţie
a fişierului executabil (vezi Pasul 3, Pasul 4).
TEX-ul lucrează, ı̂n esenţă, sub sistemul de operare DOS.
Versiunile adaptate la Windows recurg adeseori la prelucrarea
“fişierului sursă” sub DOS.
Procesorul TEX de bază (TEX–ul simplu) execută circa 300
de instrucţiuni primitive, destinate prelucrării (formatării) textu-
lui propriu-zis, putând interpreta macrolimbajul construit cu aju-
torul acestor instrucţiuni primitive. La apelul procesorului este
ı̂ncărcat şi fişierul de formate (tfm), care conţine macrodefiniţii
suplimentare.
În continuare, prezentăm mai ı̂n detaliu paşii necesari obţi-
nerii unui document imprimabil, folosindu-se procesorul TEX.
Pasul 1. Pregătirea “fişierului sursă”. Cu ajutorul unui editor
oarecare de texte (de exemplu, vi sub sistemul de operare
UNIX sau ne sub sistemul de operare MS–DOS) se constru-
ieşte un fişier al cărui sufix este tex. Vom apela ı̂n cele
ce urmează acest fişier prin “fişierul sursă”. Sufixul tex nu
este obligatoriu, dar folosirea lui simplifică lucrul (ı̂n cele ce
urmează). Trebuie făcută distincţie ı̂ntre editorul de texte
folosit ı̂n acest pas şi procesorul TEX.
Odată editat, “fişierul sursă” este salvat pe unitatea de disc
(sau un alt periferic preferat de utilizator) sub un nume stabilit
de utilizator. În expunerile următoare, vom utiliza denumirea
generică nume–fişier.tex.
Pasul 2. Procesarea “fişierului sursă”. Presupunem că produsul
16 Capitolul 1

program TEX este instalat corect pe echipamentul de calcul al


utilizatorului iar fişierul (fişierele) de prelucrat se află ı̂n sub-
directorul curent. Procesarea unui “fişier sursă” are loc dacă
utilizatorul introduce de la tastatură următoarea comandă:

tex nume–fişier.tex

ı̂ncheiată prin apăsarea tastei Enter (CR). Schematic, acest


pas poate fi reprezentat astfel:

tex
nume-fişier.tex −−−−−−−−−−−→ nume-fişier.dvi



fişiere tfm

Pasul 3. Vizualizarea documentului. Cu ajutorul comenzii (intro-


dusă de la tastatură şi ı̂ncheiată prin apăsarea tastei Enter):

v nume–fişier.dvi

se poate vedea pe ecranul monitorului imaginea finală a do-


cumentului obţinut cu ajutorul procesorului TEX. Această co-
mandă foloseşte utilitarul dviscr al produsului program TEX,
care are rolul de a transpune informaţiile din fişierul nume–
fişier.dvi pe ecran. Procesul de vizualizare permite identifi-
carea unor erori ı̂n document (de sintaxă sau de formatare),
ı̂naintea tipăririi (imprimării) acestuia pe hârtie.
CE ESTE TEX ? 17

Pasul 4. Imprimarea documentului. Există diferite utilitare (ı̂n


funcţie de tipul imprimantei) cu ajutorul cărora se poate
obţine documentul pe hârtie. Amintim aici doar pe cele mai
utilizate, şi anume:
dvidot – pentru imprimante cu ace,
prtfx – pentru imprimanta EPSON FX 80,
dvihplj – pentru imprimante de tip laser,
dvi2ps – pentru imprimante PostScript,
prthplj – pentru imprimante laser din seria HEWLETT
PACKARD LJ.
Toate aceste utilitare sunt funcţionale sub sistemul de operare
MS–DOS.

1.3 Caracterele TEX –ului


Înainte de a trece la prezentarea instrucţiunilor procesoru-
lui TEX, să aruncăm o privire asupra tastaturii echipamentului
de calcul. Procesorul recunoaşte 256 de caractere. Toate aces-
tea se regăsesc pe tastatură şi sunt reproduse ı̂ntocmai ı̂n textul
tipărit (cu puţine excepţii, care vor fi precizate mai jos). Ele sunt
ı̂mpărţite (funcţie de modul ı̂n care un caracter este tratat de către
procesor) ı̂n mai multe clase:

Caractere Semnificaţie

A,...,Z şi a,...,z literele mari şi mici;


0,...,9 cifrele;
$,#,%,&,\, {, },ˆ, , ˜ caractere speciale;
. ,;: ! ? ’ ‘” semne de punctuaţie;
+ = <> | simboluri matematice;
( ) [ ] /(slash) * - alte caractere.

Pe lângă aceste caractere, procesorul TEX mai recunoaşte


caracterele SP (bara spaţiu) şi CR (tasta inscripţionată cu En-
18 Capitolul 1

ter la unele tastaturi). Toate aceste caractere pot fi ı̂ntâlnite


ı̂ntr-un “fişier sursă”, fiind introduse prin intermediul tastaturii.
Prezentăm ı̂n continuare o descriere succintă a celor mai semni-
ficative caractere.
Caracterele $,#,%,&,\, {, },ˆ, , ˜ (caractere cu rol de co-
menzi de control) sunt utilizate pentru a comunica cu procesorul
TEX ı̂ntr–un mod distinct (după cum vom vedea imediat). Aces-
tea nu sunt imprimabile dacă apar ı̂n “fişierul sursă” ca sim-
ple caractere. Pot fi imprimate dacă ı̂n “fişierul sursă” se scrie
\$, \#, \%, \&, \backslash, \{, \}, \ˆ, \ , \˜, respectiv. Din-
tre acestea distingen ı̂n primul rând caracterul \ care are un rol
fundamental ı̂n procesarea textului.
Un text ı̂ncadrat la stânga şi la dreapta de semnul $ anunţă
că acesta va fi tratat de procesor ı̂ntr–un mod special (modul ma-
tematic de lucru, după cum vom vedea mai târziu). Este esenţial
de a “spune” TEX–ului că suntem ı̂n modul matematic, deoarece o
serie de reguli şi convenţii capătă alt sens ı̂n acest mod de lucru.
Când TEX–ul ı̂ntâlneşte caracterul %, atunci textul care ur-
mează pe linia respectivă a “fişierului sursă” este ignorat de pro-
cesor ı̂n operaţia de prelucrare. Astfel, cu ajutorul caracterului
%, se pot introduce comentarii ı̂ntr–un “fişier sursă”.
Caracterele & şi # sunt utilizate drept parametri ı̂n construc-
ţiile mai complexe pe care le vom prezenta mai târziu (tabele,
alinieri de formule matematice etc.).
Caracterele {, } au şi ele o ı̂ntrebuinţare specială. Reţinem
pentru moment doar că o pereche de acolade {...} defineşte un
grup (prin “...” am evidenţiat conţinutul grupului), iar dacă deli-
mitează un parametru al TEX-ului, atunci nu mai este considerat
de procesor că perechea de acolade defineşte un grup.
Caracterele ˆ (superscript) şi (subscript) sunt utilizate nu-
mai ı̂n modul matematic de lucru, iar caracterul ˜ este folosit
pentru a defini un spaţiu de legătură (un spaţiu ı̂ntre două texte
consecutive, completat cu unul sau mai multe caractere ˜ , care
CE ESTE TEX ? 19

nu poate fi divizat de procesorul TEX ı̂n procesul de pregătire a


paginii de ieşire (layout)).
Caracterele ‘ (apostrof deschis) şi ’ (apostrof ı̂nchis) sunt uti-
lizate pentru realizarea citărilor, ı̂n timp ce caracterul ” are acelaşi
efect cu două ghilimele ı̂nchise ”.
Caracterul SP (spaţiu) nu este interpretat ı̂ntotdeauna de
către procesor ca atare, adică o succesiune de mai multe spaţii are
acelaşi efect cu unul singur.
Acţionarea tastei CR (Enter) o singură dată are drept conse-
cinţă trecerea cursorului pe linia următoare (linie nouă), iar pro-
cesorul interpretează aceasta ca un spaţiu. Acţionarea tastei CR
de două ori conduce la introducerea unei linii goale ı̂n “fişierul
sursă”, ceea ce anunţă procesorul că textul ce urmează după linia
vidă este un nou alineat (paragraf). În fine, acţionarea tastei
CR de mai mult de două ori antrenează generarea a mai multor
linii goale ı̂n “fişierul sursă” dar, ı̂n viziunea procesorului TEX,
această situaţie este tratată ca mai sus (vezi “mai multe caractere
SP”). Aşadar, procesorul TEX este informat de ı̂nceperea unui nou
paragraf prin introducerea ı̂n “fişierul sursă” a cel puţin unei linii
goale. După cum vom vedea mai târziu, tratarea unui text drept
un paragraf nou poate fi anunţată procesorului folosind secvenţa
de control \par.
Pornind de la caracterele de bază, plain TEX–ul generează
o serie nouă de caractere proprii. Prezentăm ı̂n cele ce urmează
două tipuri de astfel de caractere:
Caractere unite. O serie de combinaţii de două caractere (ı̂n
unele cazuri, precedate de \) determină procesorul să producă ı̂n
locul lor un caracter nou (de cele mai multe ori, prin concatenarea
caracterelor ı̂n cauză). De exemplu, dacă “fişierul sursă” conţine
secvenţa de caractere fi (nu neapărat sub formă de cuvânt),
atunci, corespunzător acestora, procesorul va genera ı̂n fişierul de
ieşire (cel cu extensia .dvi) caracterul unit fi. Iată lista celor mai
multe astfel de caractere:
20 Capitolul 1

ff −→ ff fi −→ fi
ffi −→ ffi ffl −→ ffl
‘‘ −→ “ !‘ −→ ¡
\oe, \OE −→ œ, Œ \aa, \AA −→ å, Å
\ae, \AE −→ æ, Æ \o, \O −→ ø, Ø

fl −→ fl
’’ −→ ”
?‘ −→ ¿
\l, \L −→ l, L
\ss −→ ß
Un ultim caracter de tip unit este liniuţa. Procesorul TEX
operează cu patru tipuri de astfel de liniuţe, anume:
• cratima: este utilizată pentru scrierea cuvintelor unite. Se
obţine prin scrierea ı̂n “fişierul sursă” a unui singur caracter
-. Facem observaţia că procesorul TEX este programat să
insereze automat o cratimă, la trecerea de pe un rând pe
altul, după prima parte a cuvântului divizat de el, ı̂n vederea
scrierii acestuia pe două linii (corespunzător despărţirii ı̂n
silabe ı̂n engleză). Pentru a realiza despărţirea ı̂n silabe ı̂n
limba română, trebuie inserat grupul de caractere “\−” ı̂ntre
silabele cuvântului.
• liniuţa “en-dash”: este dublul lungimii unei cratime; se ob-
ţine prin scrierea ı̂n “fişierul sursă” a două caractere - -,
consecutive.
• liniuţa “em-dash”: este triplul lungimii unei cratime, se ob-
ţine prin scrierea ı̂n “fişierul sursă” a trei caractere - - -,
consecutive.
CE ESTE TEX ? 21

• semnul minus: este operatorul matematic de scădere şi este


utilizat ı̂n modul matematic de lucru.
Exemplul 1.1. Următoarea secvenţă din “fişierul sursă” -, - -,
- - -, 1+2-3, $1+2-3$, va produce ı̂n fişierul de ieşire secvenţa:

-, –, —, 1+2-3, 1 + 2 − 3.
Să remarcăm că semnul minus diferă de primele trei tipuri de
liniuţe, atât prin lungime, cât şi prin grosime.
Accente. Pentru a obţine un accent peste o literă, trebuie scrisă
secvenţă de control corespunzătoare accentului dorit, urmată de
literă. Orice literă sau simbol poate seconda o secvenţa de control
de tip accent. Prezentăm ı̂n continuare lista accentelor disponibile
ı̂n cadrul plain TEX–ului, folosind litera r drept argument:

\‘r −→ r̀ \ˆr −→ r̂
\= r −→ r̄ \b r −→ r
¯
\H r −→ r̋ \’r −→ ŕ
\u r −→ r̆ \.r −→ ṙ
\v r −→ ř \c r −→ ŗ

\˜ r −→ r̃
\t r −→ r
\”r −→ r̈
\d r −→ r.
Să observăm că, pentru accentele obţinute prin folosirea unei
litere după \, argumentul trebuie separat de aceasta printr–un
spaţiu.
22 Capitolul 1

Pentru a pune un accent pe litera i, acest caracter trebuie


mai ı̂ntâi degrevat de punct, lucru care se realizează dacă se scrie
“\i”. Aceeaşi operaţie trebuie făcută şi cu j.

Exemplul 1.2. La ı̂ntâlnirea secvenţei de control \ˆ\i, procesorul


plain TEX va produce caracterul ı̂.

1.4 Secvenţe de control (comenzi sau instrucţiuni)


Secvenţele de control sunt comenzi (instrucţiuni) ale proce-
sorului plain TEX, menite să ajute utilizatorul, angajat ı̂ntr–un
proces de tehnoredactare computerizată. În continuare, princi-
palul nostru scop ı̂l constituie descrierea comenzilor şi modul de
utilizare a acestora.
O instrucţiune ı̂ncepe cu caracterul \ (backslash) (cu mici
excepţii; vezi, de exemplu, caracterele unite) şi este urmată de
o succesiune de caractere, nu neapărat litere (vezi accentele).
Aşadar, mulţimea secvenţelor de control recunoscute de procesorul
plain TEX se ı̂mparte ı̂n două clase:
instrucţiuni cuvânt: sunt acele comenzi care necesită un spaţiu
ı̂ntre denumirea secvenţei şi următorul caracter (diferit de carac-
terul \);
instrucţiuni simbol: sunt acele comenzi care nu necesită spaţiu
de separare faţă de materialul ce urmează după acestea.
Am folosit deja câteva secvenţe de control, de exemplu: \$,
\%, \&, \par, \ˆ.

1.5 Grupuri şi moduri de lucru ı̂n plain TEX.


După cum se poate constata din paragraful §1.3, procesorul
plain TEX recunoaşte drept grup acea parte a unui “fişier sursă”
care nu reprezintă un parametru al procesorului, delimitat de
perechea de acolade {, }. Acolada deschisă “{” marchează ı̂ncepu-
tul grupului, iar acolada ı̂nchisă ”}” marchează sfârşitul acestuia.
Perechile $ ... $ şi $$ ... $$ definesc de asemenea grupuri.
CE ESTE TEX ? 23

Exemplul 1.3. În urma procesării secvenţelor următoare: Text


normal, {\it text italic}, {\bf text boldface}, \c si din nou text normal.,
procesorul plain TEX va genera:
Text normal, text italic, text boldface, şi din nou text normal.
Observăm că modificarea formei caracterelor are loc numai
la nivelul grupului (local deci) aşa ı̂ncât, la părăsirea grupului
(adică după simbolul ”}”), procesorul plain TEX reface automat
forma curentă a caracterelor (cea avută ı̂nainte de a intra ı̂n grup).
Modalitatea cea mai elocventă de definire a unui grup este ı̂ntâl-
nită la instrucţiunile care operează cu box–uri, anume: \hbox{
... }, \vbox{ ... }, \vtop{ ... } şi \vcenter{ ... }
(vezi Capitolul 6), precum şi la o serie de instrucţiuni de alini-
ere (vezi Capitolul 7).
Definiţia 1.1. (regula de procesare a unui grup) Valorile
asignate variabilelor din interiorul unui grup au caracter local
(adică aceste valori sunt valabile numai ı̂n interiorul grupului);
la ieşirea din grup, valorile variabilelor locale sunt reasignate au-
tomat la valorile avute ı̂naintea intrării ı̂n grup (sunt exceptate de
la această regulă acele variabile care, ı̂n propria linie de definiţie,
conţin secvenţa \global ).
Grupurile nu se pot suprapune. În două grupuri suprapuse,
unul trebuie să fie complet inclus ı̂n celălalt.
Exemplul 1.4. a) Următoarea secvenţă constituie o definire
corectă de grupuri suprapuse:
{XXX .... {YYY ... {ZZZ .... zzz} ... yyy} ... xxx}.

Într-adevăr, grupul {XXX .... xxx} conţine grupul {YYY ...


yyy}, care, la rândul său, conţine grupul {ZZZ .... zzz}.
b) Următoarea secvenţă constituie o definire de grupuri su-
prapuse:
{XXX .... {YYY ... $ ZZZ .... yyy} ... zzz$ ... xxx}.
24 Capitolul 1

În ultimul caz procesorul plain TEX va semnala un mesaj de


eroare, deoarece utilizatorul ı̂ncearcă să ı̂nchidă grupul {YYY ...
yyy} ı̂nainte de a ı̂nchide grupul $ ZZZ .... zzz$, care a ı̂nceput ı̂n
interiorul său.
Se pot defini grupuri şi folosind una dintre următoarele pe-
rechi de secvenţe de control:
\bgroup ... \egroup
sau
\begingroup ... \endgroup.
Perechea de secvenţe \bgroup, \egroup constituie noua de-
numire pentru perechea de acolade {, }. Asta ı̂nseamnă că putem
ı̂nlocui o acoladă deschisă prin \bgroup, iar o acoladă ı̂nchisă prin
\egroup. Perechea de secvenţe \begingroup ... \endgroup nu
este sinonimă cu perechea de acolade; altfel spus, un grup ı̂nceput
cu \begingroup trebuie să se sfârşească neapărat cu \endgroup
(ı̂n timp ce un grup ı̂nceput cu \bgroup poate fi ı̂ncheiat cu ”}”).
De ce această deosebire? Deoarece ultima modalitate de a defini
un grup ne permite să construim mecanisme de verificare a ero-
rilor mult mai complete decât cele din cazul plain TEX–ului. De
exemplu, sistemul LATEX–ul utilizează secvenţele \begingroup,
\endgroup pentru a defini un domeniu mărginit de acestea. Mai
precis, dacă “fişierul sursă” conţine:
\begin{document}
...
\begin{theorem}
...
\end{document},
atunci procesorul LATEX va semnala un mesaj de eroare prin care
informează utilizatorul că secvenţa \begin{theorem} nu are ı̂n
corespondenţă secvenţa \end{theorem}. La nivelul procesorului
plain TEX asemenea tipuri de erori sunt greu de detectat.
CE ESTE TEX ? 25

TEX–ul memorează valorile unui număr mare de variabile


legate de: fonturi, dimensiunile unei pagini, spaţiul dintre linii
ı̂ntr–o pagină etc. De exemplu, parametrul \parindent (care
furnizează procesorului mărimea alineatului pentru prima linie a
unui paragraf) are implicit valoarea 20pt. Presupunem că, tempo-
rar, această variabilă trebuie setată cu 0 (zero), ı̂n vederea scrierii
câtorva paragrafe fără alineat. Pentru a realiza acest lucru, putem
proceda astfel: ı̂n “fişierul sursă”, ı̂nainte de primul paragraf ı̂n
cauză, introducem secvenţa \parindent=0pt, iar după ultimul,
introducem secvenţa \parindent=20pt. Acest mod de lucru este
incomod, din simplul motiv că utilizatorul trebuie să cunoască va-
loarea variabilei pe toată perioada editării “fişierului sursă”. O
metodă simplă de rezolvare a unei asemenea probleme este de a
utiliza grup–ul. Deci, ı̂n “fişierul sursă” ar trebui scrisă o secvenţă
de forma:
{\parindent=0pt ... (material) ... }
Aplicând “regula de procesare a grupului” (vezi Definiţia
1.1) pentru situaţia de mai sus, avem: ı̂n interiorul grupului valoa-
rea parametrului \parindent este 0pt, iar la ieşirea din grup va-
loarea sa este automat adusă la cea avută ı̂n prealabil. În general,
valorile atribuite unor variabile din interiorul unui grup (diferite
de cele avute ı̂n exteriorul grupului) sunt automat uitate de proce-
sor după părăsirea grupului. Spunem că valorile lor au fost locale
pentru acel grup, scutind astfel utilizatorul de a memora valorile
pe toată perioada procesului de editare a “fişierului sursă”. Con-
statăm astfel că grupurile sunt mânuite printr–un mecanism de tip
stivă. Pentru a exemplifica acest lucru, să analizăm următoarele
secvenţe ale unui “fişier sursă”:
26 Capitolul 1

Exemplul 1.5.

\def\salut{Servus!}
\parindent=12pt
........... material ..........
{\def\salut{Ciao!}
\parindent=2pt
............... }
........... material ..........

În exemplul de mai sus, ı̂n prima linie, am utilizat secvenţa


de control \def, prin care s–a atribuit parametrului \salut valoa-
rea ‘Servus!’ (aceasta va fi valoarea globală a parametrului), iar
ı̂n cadrul grupului i s–a atribuit valoarea ‘Ciao!’ (care reprezintă
valoarea locală). Dacă se doreşte ca după procesarea grupului
parametrul \salut să ı̂şi păstreze valoarea ‘Ciao!’, aceasta se
poate realiza ı̂nlocuind secvenţa de control
\def\salut{Ciao!}
cu secvenţa de control
\global\def\salut{Ciao!}
(vezi Definiţia 1.1).
Pentru a discuta despre moduri de lucru ale TEX–ului, an-
ticipăm faptul că entitatea de bază cu care operează procesorul,
ı̂n activitatea sa de generare a liniilor, şi, ı̂n consecinţă, a paginilor
din fişierul de ieşire nume–fişier.dvi, este box–ul (pentru amănun-
te, vezi Capitolul 6). În general vorbind, procesorul TEX plasează
box–urile generate ı̂ntr–o pagină, ı̂n unul din următoarele trei mo-
duri de lucru (fiecare având câte două submoduri de lucru):
• modul vertical (cu submodurile: vertical obişnuit şi vertical
intern);
CE ESTE TEX ? 27

• modul orizontal (cu submodurile: orizontal obişnuit şi ori-


zontal restrâns);
• modul matematic (cu submodurile: text matematic şi display
matematic).
Când este ı̂ncepută procesarea unui “fişier sursă”, procesorul
TEX se găseşte ı̂n submodul vertical obişnuit (recunoscut ca mod
implicit de lucru). Procesorul TEX se află ı̂n unul din submo-
durile vertical de lucru atunci când pregăteşte o stivă de box–
uri, box–uri care vor fi aranjate pe verticală, de sus ı̂n jos, unul
peste altul, ı̂n pagina de ieşire pe care acesta tocmai o generează.
Când mulţimea (stiva) de box–uri umple lungimea unei pagini,
procesorul le şterge din stivă pe cele tocmai prelucrate (după ce
au fost salvate ı̂n documentul final) şi ı̂ncepe generarea unei noi
pagini (prin prelucrarea box–urilor rămase ı̂n stivă).
Procesorul TEX se află ı̂n submodul orizontal obişnuit de
lucru atunci când ı̂ncepe prelucrarea unui paragraf. Toate box–
urile şi caracterele ce alcătuiesc paragraful sunt scrise ı̂ntr–o listă
de lucru orizontală (o zonă de memorie continuă, ı̂n care proce-
sorul stochează temporar box–urile), de lungime egală cu suma
lungimilor tuturor box–urilor şi caracterelor din cadrul paragrafu-
lui respectiv. Această listă este divizată apoi ı̂n linii mai mici, de
lungime egală cu lăţimea unei pagini (\hsize), pe care le aşează
apoi una după alta, ı̂n pagina curentă. Procesorul TEX se află ı̂n
submodul orizontal restrâns atunci când prelucrează textul (ma-
terialul) din interiorul secvenţelor de control \hbox sau \halign.
Comportarea procesorului ı̂n acest caz este asemănătoare cu cea
descrisă mai sus, doar că lista de lucru pe care o creează nu mai
este divizată, ci doar este inclusă ı̂n pagina curentă, ı̂n locul şi
cu lungimea ei reală. Sfârşitul prelucrării unui paragraf implică
revenirea la modul implicit de lucru (modul vertical obişnuit).
Întâlnirea de către Procesorul TEX a simbolului $ face ca
modul implicit de lucru să fie comutat ı̂n modul text matematic.
În acest mod este construită o expresie matematică, care va fi
28 Capitolul 1

inclusă ı̂n lista orizontală de lucru. Modul display matematic este


considerat atunci când materialul este delimitat, atât la stânga,
cât şi la dreapta, de două semne $, adică $$ ... (material) ... $$.
În această situaţie, procesorul construieşte o expresie matematică
care va fi apoi plasată ı̂n pagina curentă, centrat, pe o singură
linie.

1.6 Mesaje de eroare

Firesc că este de dorit ca “fişierul sursă”, creat ı̂n vederea


obţinerii unui document, să fie editat corect (atât din punct de
vedere al utilizatorului cât şi al procesorului TEX), ı̂ncă de la in-
troducerea lui pentru prima dată. Această situaţie este ı̂nsă destul
de rar ı̂ntâlnită, ı̂ncât activitatea de obţinere a unui document fi-
nal, corect din toate punctele de vedere, presupune eliminarea
erorilor semnalate de procesor precum şi a celor de sintaxă sau
semantică.
În timpul procesării unui “fişier sursă”, la ı̂ntâlnirea unei sec-
venţe de control eronate, procesorului TEX ı̂l informează pe uti-
lizator printr–un mesaj de eroare afişat pe monitor. Acest mesaj
este stocat ı̂ntr–un fişier cu numele nume–fişier.log, creat automat
de procesor, astfel ı̂ncât nu este necesară memorarea acestuia (u-
neori, asemenea mesaje pot fi ı̂n număr destul de mare). Fişierul
nume–fişier.log poate fi folosit de utilizator atunci când reia pro-
cesul de editare a “fişierului sursă”, ı̂n vederea eliminării erorilor
tocmai depistate de procesor. O modalitate de a realiza acest lu-
cru este de a folosi utilitarul ne, cu ajutorul căruia se pot deschide
pe monitor două subferestre, una pentru “fişierul sursă” şi alta
pentru nume–fişier.log. În continuare, sunt parcurse cele două
fişiere ı̂n modul următor: printr–un proces repetitiv, se citeşte
mesajul de eroare din ....log, după care se revine ı̂n “fişierul
sursă” ....tex pentru localizarea şi corectarea acesteia. Iată un
mesaj de eroare, adesea ı̂ntâlnit la ı̂ncepători:
CE ESTE TEX ? 29

! Undefined control sequence


l.27 xxxxxx \hvill
yyyyyy
?
Şirurile xxxxxx şi yyyyyy reprezintă textul din “fişierul sur-
să”, aflat ı̂nainte şi după eroare. Prin acest mesaj, procesorul TEX
spune că ı̂n linia 27 a “fişierului sursă”, secvenţa de control \hvill
nu ı̂i este cunoscută. Semnul ı̂ntrebării este afişat de procesor
pentru a sugera utilizatorului că aşteaptă de la acesta un răspuns.
Iată câteva răspunsuri posibile ale utilizatorului:
• Acţionarea tastei CR (Enter). Aceasta spune procesorului
TEX că utilizatorul nu are nimic de spus. La acest răspuns,
procesorul TEX va ı̂ncerca să rezolve singur eroarea respec-
tivă, după care va continua procesarea textului ce urmează.
În general, procesorul delimitează destul de bine zona unei
erori, ı̂ncât paragrafele următoare celui ı̂n care s-a depistat
eroarea nu sunt afectate de eroarea depistată ı̂ntr–un para-
graf precedent. Anumite erori sunt totuşi dificil de depăşit,
ceea ce va necesita afişarea de către procesor a mai multor
mesaje de eroare pentru aceeaşi linie a “fişierului sursă”, şi
implicit, necesitatea de a acţiona de mai multe ori tasta CR
de către utilizator.
• Tipărirea literei H sau h, urmată de CR. La acest răspuns,
procesorului TEX va oferi utilizatorului un mesaj prin care
ı̂i comunică informaţii suplimentare ı̂n legătură cu eroarea
depistată.
• Tipărirea literei I sau i, urmată de textul dorit de utiliza-
tor va ı̂nlocui pe cel de dinaintea şirului yyyyyy, ı̂ncheiat
cu un CR. Pentru exemplul de mai sus, dacă utilizatorul va
răspunde prin a tipări i\hfill, atunci procesorul TEX va
ı̂nlocui secvenţa \hvill cu secvenţa \hfill, după care va
continua procesarea. Atenţie! Înlocuirea este făcută doar
temporar.
30 Capitolul 1

• Tipărirea literei X sau x, urmată de CR. La acest răspuns,


procesorul TEX va ı̂ncheia activitatea de procesare a “fişi-
erului sursă” respectiv, stocând ı̂n fişierul de ieşire (nume–
fişier.dvi) paginile generate până ı̂n acest punct.
• Tipărirea literei S sau s, urmată de CR. În această situaţie,
TEX–ul va procesa tot materialul care urmează liniei ı̂n care
tocmai a depistat o eroare, fără a mai informa utilizatorul de-
spre noile erori (dacă acestea vor mai apărea). Acest răspuns
scuteşte utilizatorul de a tasta CR la fiecare mesaj de eroare.
• Tipărirea literei R sau r, urmată de CR. Acest răspuns este
asemănător cu S, chiar mai puternic, deoarece ı̂i comunică
TEX–ului să nu oprească procesarea, chiar dacă acesta nu
găseşte un fişier anume.
• Tipărirea literei Q sau q, urmată de CR. Acest răspuns este
asemănător cu R, ı̂n plus, anulează toate mesajele destinate
să apară pe monitor.
În cel mai rău caz, se poate ı̂ntrerupe sau reseta sistemul de
calcul, pentru a abandona procesarea unui anume “fişier sursă”.
Alte mesaje de eroare obişnuite sunt:
a) ! Overfull \hbox (urmat de un număr)
Acest mesaj de eroare nu este foarte grav; procesorul TEX
chiar nu opreşte prelucrarea “fişierului sursă” curent. Eroarea
este produsă de faptul că procesorul este pus ı̂n situaţia de a scrie
anumite box–uri ı̂n afara spaţiului de drept alocat aranjării ı̂n pa-
gină a liniei pe care tocmai a procesat–o (vezi secvenţa \hbox din
Capitolul 6). Dacă depăşirea este foarte mare (≥ 100pt), atunci se
recomandă verificarea folosirii secvenţelor \line sau \centerline
ı̂n cadrul unui paragraf.
b) ! Underfull \hbox (sau Underfull \vbox)
Procesorul TEX ignoră şi acest mesaj, continuând prelu-
crarea “fişierului sursă” curent.
CE ESTE TEX ? 31

Un ultim mesaj de eroare pe care ı̂l prezentăm, se datorează


lipsei din “fişierul sursă” a secvenţei \end sau \bye. În această
situaţie, procesorul TEX afişează pe ecranul monitorului carac-
terul ’*’, dând posibilitatea utilizatorului să adauge text nou ı̂n
“fişierul sursă”. Dacă nu doreşte acest lucru, atunci trebuie să
tipărească neapărat una din secvenţele de mai sus, şi atunci va fi
ı̂ncheiată procesarea “fişierului sursă” curent. Acţionarea tastei
CR imediat după caracterul ’*’ va produce afişarea mesajului:
(Please type a command or say ’\end’),
obligând–ul pe utilizator să tasteze secvenţa \end. Într–o astfel
de situaţie, imediat după ı̂ncheierea procesării, utilizatorul trebuie
să adauge, ı̂n “fişierul sursă” tocmai procesat, secvenţa de control
\end.
CAPITOLUL 2. FONTURI UTILIZATE DE plain TEX

Plain TEX–ul permite utilizarea mai multor tipuri de fonturi


(stiluri) pentru scrierea unui text, anume: roman, italic, bold-
face, ı̂nclinat şi maşină de scris (typewriter). Toate aceste fonturi
aparţin unei familii mai largi, numită “Calcul Modern”. Fonturile
de tip italic şi ı̂nclinat sunt diferite. Cele mai multe sisteme care
lucrează cu TEX-ul oferă toate fonturile familiei “Calcul Modern”
care, pe lângă stilurile enumerate mai sus, includ şi alte stiluri
(bold neextins, italic neı̂nclinat, de exemplu). Se pot obţine fon-
turi pentru alfabetele altor limbi decât cea engleză, precum şi o
gamă largă de caractere speciale.
Fonturile utilizabile ı̂n TEX se ı̂mpart ı̂n două categorii: fon-
turi preı̂ncărcate (cele cunoscute de procesorul TEX ı̂n momentul
când acesta este lansat ı̂n execuţie) şi fonturi TEX ¸(fonturi definite
de utilizator). Să le analizăm pe rând.

2.1 Fonturi preı̂ncărcate


La lansarea ı̂n execuţie a procesorului plain-TEX, fontul im-
plicit al familiei “Calcul Modern”, cu care aceasta operează asupra
materialului conţinut ı̂n “fişierul sursă”, este fontul roman, de di-
mensiune 10 puncte tipografice (10pt). Procesorul TEX cunoaşte
acest font sub numele (secvenţa de control) \tenrm, iar fontul ro-
man, corespunzător mărimilor 7 respectiv 5 puncte tipografice,
34 Capitolul 2

este cunoscut de TEX sub numele \sevenrm şi \fiverm, respec-


tiv. Exemplele următoare ilustrează modul de utilizare a acestor
tipuri de fonturi.
Remarcă. Textul din exemplul următor, precum şi din altele
de acelaşi tip, trebuie ı̂nţeles astfel: textul din stânga reprezintă
”materialul” pe care utilizatorul ı̂l introduce ı̂n ”fişierul sursă”, iar
textul din dreapta reprezintă ceea ce se obţine ı̂n urma procesării
acestui ”material”.
Exemplul 2.1.
Caract. de dim. 10pt . . . . . . . . . . . . . . . . . . Caract. de dim. 10pt
\sevenrm Caract. de dim. 7pt . . . . . . . . . . . . . Caract. de dim. 7pt
\fiverm Caract. de dim. 5pt . . . . . . . . . . . . . . . . . Caract. de dim. 5pt
sau
Caract. de dim. 10pt . . . . . . . . . . . . . . . . . . Caract. de dim. 10pt
{\sevenrm Caract. de dim. 7pt} . . . . . . . . . . . . Caract. de dim. 7pt
Caract. de dim. 10pt . . . . . . . . . . . . . . . . . Caract. de dim. 10pt

Să remarcăm ı̂n exemplul de mai sus utilizarea noţiunii de


grup, ceea ce a permis procesorului să revină automat la stilul
precedent de font (fontul roman 10pt, cel de dinaintea intrării ı̂n
grup). Iată lista completă a fonturilor nematematice preı̂ncărcate
ale plain-TEX–ului:
numele comanda-font dimensiunea şi
fişierului-font tipul caracterului
cmr10 \tenrm roman, 10 puncte
cmr7 \sevenrm roman, 7 puncte
cmr5 \fiverm roman, 5 puncte

cmbx10 \tenbf bold, 10 puncte


cmbx7 \sevenbf bold, 7 puncte
cmbx5 \fivebf bold, 5 puncte
FONTURI UTILIZATE DE plain TEX 35

cmti10 \tenit italic, 10 puncte


cmsl10 \tensl ı̂nclinat, 10 puncte
cmtt10 \tentt maşină de scris, 10 puncte
În plus, pentru comenzile-font care reprezintă fonturile cores-
punzătore dimensiunii 10pt, plain-TEX-ul oferă abrevierile: \rm,
\bf, \it, \sl, \tt.
Exemplul 2.2. Şirul de secvenţe din Exemplul 1.3 pot fi scrise,
fără a utiliza grupul, ı̂n felul următor:
Text normal, \it text italic, \bf text boldface, \rm din nou text normal.
Rezultatul procesării va fi acelaşi ca cel din exemplul amintit,
anume:
Text normal, text italic, text boldface, din nou text normal.

2.2 Definirea de noi fonturi (fonturi TEX)


Presupunem că dorim să utilizăm fontul roman, de dimen-
siune 8pt, care nu este preı̂ncărcat ı̂n plain-TEX. Pentru aceasta,
trebuie definit un nume care să fie asociat acestui nou font, iar
apoi, acest nume să fie utilizat drept nume de font (secvenţă de
control). Informaţia despre fiecare font nou definit este păstrată
ı̂ntr-un fişier special, stocat undeva ı̂n memoria sistemului de cal-
cul; ı̂n cazul de faţă, pentru fontul roman de 8pt, familia “Calcul
Modern” numeşte acest fişier cmr8, şi ı̂i este furnizat procesoru-
lui TEX prin următoarea secvenţă (ce trebuie inclusă ı̂n “fişierul
sursă”, dacă se doreşte utilizarea sa):
\font\eightrm=cmr8
Odată ce definirea noii comenzi este ı̂ncheiată, TEX-ul va
trata recenta definiţie (\eightrm ı̂n cazul de mai sus) exact ca pe
o secvenţă de control predefinită (vezi secţiunea §1.4). Exemplul
2.1 (prima parte) poate fi modificat astfel:
36 Capitolul 2

Exemplul 2.3.
10pt . . . . . . . . . . . . . . . . . . Caract. de dim. 10pt
Caract. de dim.
\eightrm Caract. de dim. 8pt . . . . . . . . . . . . Caract. de dim. 8pt
\fiverm Caract. de dim. 5pt . . . . . . . . . . . . . . . . . Caract. de dim. 5pt
O serie de alte fonturi pot fi obţinute prin combinarea celor
cunoscute, şi anume: cmbxti10, cmbxsl10, cmitt10, cmsltt10,
cmcsc10, cmss10 (fontul “sans-serif”), cmssdc10 (fontul “dc”;
demibold condensed), cmssi10, cmdunh10 (fontul “Dunhill”) şi
cmff10 (fontul “funny”).

2.3 Scalarea unui font


Presupunem că avem nevoie de fontul roman de dimensiune
12pt, dar plain-TEX-ul instalat pe calculatorul pe care lucrăm
are numai fontul roman, de dimensiune 10pt (cmr10). Se poate
adapta fontul existent acestei necesităţi, prin scrierea ı̂n “fişierul
sursă” a următoarei secvenţe:
\font\twelverm=cmr10 at 12pt
ceea ce va spune procesorului TEX să ı̂nmulţească dimensiunea
fontului cmr10 cu factorul 12/10=1.2, obţinând astfel fontul ro-
man, de dimensiune 12pt. Construcţia următoare are exact ace-
laşi rezultat:
\font\twelverm=cmr10 scaled 1200 (2.1)
Scalarea cu 1000 este ı̂nţeleasă ca fiind echivalentă cu un fac-
tor de scalare egal cu 1, scalarea cu 1200 este echivalentă cu fac-
torul de scalare egal cu 1.2 (adică creşterea cu 20% a dimensiunii
caracterelor, faţă de dimensiunile recunoscute implicit), scalarea
cu 500 corespunde factorului 0.5 (adică o reducere cu 50% a di-
mensiunii caracterelor, faţă de dimensiunile implicite) ş.a.m.d.
Plain TEX-ul dispune şi de următoarele secvenţe de control,
destinate urmăririi scalărilor:
FONTURI UTILIZATE DE plain TEX 37

\magstep1 echivalent cu 1000pt*1.2=1200pt


\magstep2 echivalent cu 1000pt*1.2*1.2=1440pt
..
.
\magstep5 echivalent cu 1000pt*5*1.2=2488pt.
Folosind această convenţie, construcţia (2.1) poate fi scrisă,
ı̂n mod echivalent, astfel:
\font\twelverm=cmr10 scaled 1200
Există de asemenea secvenţa√de control \magstephalf, care
corespunde factorului de scalare 1.2=1.09545≈11pt.

2.4 Scalarea globală


Scriind, la ı̂nceputul “fişierului sursă”, următoarea secvenţă
de control:
\magnification=1200,
ı̂ntregul document va fi mărit cu 20%. Există o restricţie impor-
tantă ı̂n ce priveşte utilizarea acestei secvenţe de control, anume:
scalarea globală poate fi setată o singură dată. Este ilegală mo-
dificarea acestei scalări ı̂n timpul procesării unui “fişier sursă”.
Totuşi, se pot face scalări numai asupra anumitor fonturi. E-
fectele secvenţei \magnification sunt astfel combinate cu cele
ale definiţiilor de fonturi noi. De exemplu, dacă se utilizează
fontul \twelverm, definit mai sus, ı̂mpreună cu factorul de scalare
\magstep1, ı̂ntr-un text sursă care ı̂ncepe cu secvenţa de control:
\magnification=\magstep1,
rezultatul va fi un font mărit cu factorul 1.2*1.2, adică cu 44%
(efectul produs de \magstep2).
Prin utilizarea secvenţei \magnification, toate dimensiu-
nile sunt crescute cu 20%. Dacă ı̂ntr-un anumit loc al documen-
tului final se doreşte o spaţiere de 1in (1 inch=1.27cm) ı̂ntre linii,
38 Capitolul 2

atunci ı̂n “fişierul sursă” trebuie scrisă secvenţa \vskip .833in


deoarece: 1/1.2 = 0.833 (deci 0.833in mărit cu 20% ne dă 1in).
Pentru a evita această operaţie, se poate folosi secvenţa de control
următoare:
\hskip 1truein
Când procesorul TEX ı̂ntâlneşte grupul de litere true, acesta
divide valoarea care ı̂i urmează (adică 1 ı̂n exemplul de mai sus)
prin factorul de scalare global curent, ı̂nainte de a procesa secvenţa
de control \hskip, obţinându-se aşa numitul salt adevărat.

2.5 Fonturi ı̂n modul matematic de lucru


Procesorul TEX are un mecanism destul de sofisticat de a
mânui fonturile ı̂n modul matematic de lucru. Acesta alege au-
tomat o dimensiune mai mică pentru un caracter care este sub-
scris sau superscris altui caracter (exponent inferior sau superior,
respectiv) ş.a.m.d.
Exemplul 2.4. Analizaţi rezultatul procesării (textul din dreap-
ta) secvenţelor următoare (textul din stânga):
$S-Bˆ{R S }$ $S-B {R S}$ . . . . . . . . . . . . . . . S − B RS S − BRS
În exteriorul modului matematic de lucru, TEX-ul utilizează
fontul \tenrm iar ı̂n cadrul modului matematic, acesta utilizează:
\tenrm, pentru caracterele ”normale”, \sevenrm, pentru primul
subscript şi primul superscript şi \five, pentru al doilea subscript
şi superscript (vezi Exemplul 2.4).
Să remarcăm că definiţiile de fonturi, realizate cu secvenţa de
control \font, nu au efect ı̂n modul matematic de lucru. Schim-
barea fonturilor ı̂n modul matematic se poate face utilizând sec-
venţa de control \hbox (care transformă, temporar, modul de lu-
cru matematic ı̂n cel orizontal) sau prin utilizarea unei secvenţe
mai speciale (secvenţa \fam).
FONTURI UTILIZATE DE plain TEX 39

Exemplul 2.5. Rezultatul procesării secvenţei:


$B$, $ \eightrm A$, { \eightrm$ A$, $ \ hbox{A}$ }
este: B,A,A,A
CAPITOLUL 3. SPAŢIERI, CONCATENĂRI ŞI
SALTURI

3.1 Spaţieri orizontale

Am văzut deja că procesorul TEX tratează ı̂n mod special


spaţiile şi caracterele SP şi CR, ı̂n sensul că acestea nu apar ı̂n
mod explicit ı̂n documentul final. Pentru completitudine, amintim
din nou regulile pe care le foloseşte procesorul TEX atunci când
ı̂ntâlneşte caracterele SP şi (sau) CR ı̂ntr-un “fişier sursă” (vezi
şi §1.3):
• câteva spaţii consecutive ı̂n “fişierul sursă” generează un sin-
gur spaţiu ı̂n documentul final,
• un singur CR este echivalent cu un spaţiu, generând un sin-
gur spaţiu ı̂n documentul final; ı̂n particular, CR absoarbe
spaţiile de la sfârşitul liniei precedente şi de la ı̂nceputul liniei
următoare,
• două sau mai multe CR-uri ı̂nlănţuite (ceea ce, ı̂n “fişierul
sursă”, este echivalent cu una sau mai multe linii goale)
anunţă un nou paragraf pentru procesor,
• unul (sau mai multe spaţii) (sau un singur CR) după o sec-
venţă de control, urmat de alte caractere recunoscute de TEX,
nu produce spaţii ı̂n documentul final; acestea doar indică
sfârşitul secvenţei de control.
42 Capitolul 3

Exemplul 3.1. Analizaţi rezultatul procesării secvenţei:


\TeX book, care este: TEXbook. (Să observăm că spaţiul ce urmează
secvenţei \TeX nu va mai apărea ı̂n documentul final.)
Ultima regulă (din cele enumerate mai sus) poate fi ı̂mbună-
tăţită prin introducerea secvenţei de control \ (un “backslash”,
urmat de unul sau mai multe spaţii, desemnate aici prin ’ ’), care
forţează procesorul TEX să producă un spaţiu ı̂n documentul final.
Această secvenţă operează atât ı̂n modul de lucru orizontal, cât
şi ı̂n cel matematic.
Exemplul 3.2. Procesarea secvenţelor de control:
{\TeX} book şi \TeX\ book are acelaşi efect, anume: TEX book.

Spaţii neı̂ntrerupte. Am văzut că simbolul ˜ (tilda) are un


ı̂nţeles special ı̂n plain TEX; acesta reprezintă o legătură, adică
un spaţiu unde procesorului nu ı̂i este permisă divizarea liniei de
lucru ı̂n procesul de construire a acesteia. Vom vedea mai târziu
cum putem obţine spaţii neı̂ntrerupte de orice lungime.
Caracterul ˜ mai are şi o altă funcţie importantă: aceea de
definire a unui spaţiu normal; acest spaţiu “normal” se comportă
mai bine decât un spaţiu de după un semn de punctuaţie (vezi
secvenţa a doua din Exemplul 3.2). De exemplu, procesorul TEX
generează spaţiul de după o virgulă dintr-un “fişier sursă”, puţin
mai mare decât un spaţiu “normal”.
Spaţierea orizontală arbitrară. Pentru a obţine un spaţiu o-
rizontal (un spaţiu ı̂ntre două cuvinte) mai mare, se poate folosi
secvenţa de control \hskip, urmată de o valoare (care va repre-
zenta dimensiunea spaţiului ce se doreşte a fi generat). Cele mai
obişnuite unităţi pentru dimensiuni sunt:
inch-ul (prescurtat in),
punctul tipografic (pt); 1in≈72pt,
picas (pc); 1pc=12pt.
Dimensiunea poate fi exprimată şi metric, cu ajutorul cen-
timetrilor (cm) şi al milimetrilor (mm).
SPAŢIERI, CONCATENĂRI ŞI SALTURI 43

Există de asemenea o unitate de dimensiune a spaţiului o-


rizontal, em, care depinde de mărimea fontul curent. În mod o-
bişnuit, această unitate are lăţimea literei “m”, ı̂nsă poate şi să
difere. De exemplu, pentru fonturile de tipul \rm, de dimensiune
10pt, adică pentru 1em=10pt, caracterul “m” măsoară puţin sub
8pt. Această ultimă unitate de măsură este utilă dacă se doreşte
ca spaţierea să fie proporţională cu mărimea fontului. Plain TEX-
ul are trei secvenţe de control predefinite care generează acest tip
de spaţii proporţionale:
• \quad corespunde secvenţei 1em;
• \qquad corespunde secvenţei de control \quad\quad;
• \enskip corespunde secvenţei 0.5em.
Am văzut că, dacă avem specificată secvenţa de control
\magnification, toate dimensiunile sunt ı̂nmulţite cu factorul de
magnificare specificat, exceptând cele ale căror unităţi de măsură
sunt precedate de cuvântul cheie true. De exemplu, dacă ı̂n
“fişierul sursă” avem secvenţa \hskip 1truein, procesorul TEX
va genera un spaţiu egal cu 1in ı̂n documentul final; altfel spus,
magnificarea nu mai este operantă asupra secvenţei \hskip, ı̂n a
cărei definiţie este prezent parametrul true.

3.2 Spaţierea verticală


Spaţierea verticală ı̂nseamnă o spaţiere ı̂ntre paragrafe.
Multe din cele ı̂ntâlnite ı̂n cadrul spaţierii orizontale se aplică,
ı̂n mod egal, şi ı̂n cadrul acestui tip de spaţiere. Generarea unui
spaţiu vertical se face prin scrierea ı̂n “fişierul sursă” a secvenţei
de control \vskip, urmată de o valoare. Corespondentul vertical
pentru em este ex. Şi unitatea ex depinde de fontul curent; aceasta
este aproximativ egală cu ı̂nălţimea literei “x” (adică aproximativ
4.5pt pentru fonturile de dimensiune 10pt). Plain TEX-ul dispune
de trei tipuri predefinite de salturi verticale:
• \smallskip corespunde unui salt de 3pt,
44 Capitolul 3

cu o diferenţă de ±1pt;
• \medskip corespunde unui salt de 6pt,
cu o diferenţă de ±2pt;
• \bigskip corespunde unui salt de 12pt,
cu o diferenţă de ±4pt.

3.3 Spaţii care se extind şi care se comprimă (glue)


În practică, secvenţele de control \hskip şi \vskip nu sunt
suficient de capabile de a satisface cerinţele unei pagini din do-
cumentul final. Pentru a obţine un paragraf (ceea ce pentru pro-
cesorul de TEX este echivalent cu a genera o mulţime de linii cu
aceeaşi lungime), este necesară extinderea sau comprimarea, ı̂ntr-o
oarecare măsură, a spaţiului dintre cuvinte. La rândul lor, paginile
trebuie să aibă aceeaşi mărime şi, deoarece fiecare pagină ı̂n parte
poate avea multe elemente diferite (figuri, ecuaţii etc.), este destul
de dificil să se realizeze o spaţiere uniformă ı̂ntre elemente dintr-o
pagină.
Procesorul de TEX permite adăugarea de spaţii elastice (glue)
ı̂n propriul document. Pentru a obţine extensii şi comprimări
ale spaţiului, se foloseşte una din comenzile obişnuite de spaţiere
(\hskip sau \vskip), urmată de un şir de trei valori care repre-
zintă: cantitatea “ideală” de spaţiu cerut a fi generat, cantitatea
cu care poate fi mărită (extinsă) cantitatea “ideală” şi cantitatea
cu care poate fi micşorată (comprimată) cantitatea “ideală”. Ul-
timele două valori sunt precedate de cuvintele cheie plus şi minus,
respectiv.
Exemplul 3.3. La ı̂ntâlnirea secvenţei de control
\hskip 10pt plus 2pt minus 3pt,
procesorul TEX va genera un spaţiu cuprins ı̂ntre 7pt şi 12pt (de-
pinzând de restricţiile de dimensiune ale paginii) şi va ı̂ncerca
să genereze un spaţiu de o dimensiune cât mai apropiată valorii
de 10pt. Această valoare optimă este numită valoarea ideală a
SPAŢIERI, CONCATENĂRI ŞI SALTURI 45

operaţiei de extensie-comprimare. Atât partea plus, cât şi partea


minus pot lipsi, dar, dacă sunt prezente amândouă, atunci plus
trebuie să preceadă pe minus.
Cum procedează procesorul TEX să decidă cu cât trebuie să
extindă sau să comprime? Pentru aceasta trebuie cunoscut modul
ı̂n care sunt construite paragrafele şi paginile. În linii mari, un
alineat (paragraf) este creat de către procesorul TEX ı̂n trei etape:
1. ı̂n prima fază, procesorul TEX ı̂ncarcă ı̂ntregul paragraf ı̂n-
tr-o singură linie (linia de lucru), de lungime egală cu suma
lungimilor elementelor care alcătuiesc paragraful;
2. ı̂n continuare, procesorul ı̂mparte această linie ı̂n câteva linii,
de lungime aproximativ egală cu \hsize (parametrul care
furnizează lăţimea paginii). Pentru a o găsi pe cea optimă,
operaţia de ı̂mpărţire este realizată ı̂n mai multe variante;
3. dacă o linie este prea scurtă, atunci procesorul o extinde,
proporţional cu factorul de extensie declarat de utilizator.
Similar, dacă o linie este prea lungă procesorul o comprimă.
Evident, un spaţiu care este declarat fără parametrii plus
sau minus nu ı̂şi schimbă mărimea, deoarece acesta nu este
elastic.
Am văzut ı̂n exemplul anterior că secvenţa de control
\hskip 10pt plus 2pt minus 3pt
face ca procesorul să genereze un spaţiu aproximativ, situat ı̂ntre
limitele 7pt şi 12pt, fără a pretinde că valoarea aproximativă este
suficient de corectă. Dacă o linie e prea scurtă, chiar şi după ce a
fost adăugat factorul său de extensie, procesorul va mări factorul
de extensie şi va tipări pe ecran un mesaj referitor la acest lucru:
Underfull \hbox (badness 10000) detected at line nr-linie
Eroarea depistată ı̂ntr-o asemenea linie a ”fişierului sursă”
este o măsură relativă a extensiei sau comprimării făcute de pro-
cesor, ı̂n vederea satisfacerii, ı̂ntr-un mod optim, a restricţiilor
46 Capitolul 3

impuse asupra lăţimii acesteia. O linie cu o elasticitate mai mare


poate fi extinsă şi comprimată mai bine decât una cu o elasticitate
mai mică. Totuşi, se obţine aceeaşi evaluare a erorii. Dacă eroarea
este 10000 (valoarea maximă), atunci operaţia de extensie-com-
primare este ı̂n afara limitelor declarate de utilizator.
Pe de altă parte, dacă o linie este prea lungă, chiar după
comprimare, procesorul nu o va supracomprima; o generează atât
de lungă (cât factorul de comprimare o permite) şi informează
utilizatorul cu un mesaj de eroare de felul următor:
Overfull \hbox (urmat de un număr),
adăugând documentului final o linie groasă (un dreptunghi negru)
ı̂n dreptul liniei ı̂n cauză.
Elasticitatea operaţiei de extensie-comprimare verticală este
utilizată de asemenea de TEX pentru a realiza paginile documen-
tului final, ı̂n conformitate cu mărimea prescrisă de utilizator.
Procesul de divizare este similar cu cel de la linii.
Liniile şi paginile sunt cazuri particulare de box-uri orizontale
şi verticale (vezi amănunte ı̂n Capitolul 6). Când procesorul TEX
construieşte un box, a cărui mărime este fixată dinainte, acesta
foloseşte elasticitatea operaţiei de extensie-comprimare pentru a o
ı̂nlocui pe cea prescrisă. Cu alte cuvinte, dacă lăţimea (pentru un
box orizontal) sau ı̂nălţimea (pentru un box vertical) conţinutului
unui box este mai mică decât lăţimea sau ı̂nălţimea boxului de
creat, procesorul extinde conţinutul din interiorul boxului, ı̂ncer-
când să satisfacă lăţimea cerută prin secvenţa elastică; invers se
petrec lucrurile ı̂n cazul ı̂n care lăţimea sau ı̂nălţimea conţinutului
unui box este mai mare decât a boxului de creat (procesorul com-
primă conţinutul din interiorul boxului).
În exemplele următoare vom utiliza secvenţa de control
\line, a cărei efect este de a genera ı̂n documentul final o linie de
lungime egală cu valoarea parametrului \hsize.
Exemplul 3.4. Presupunem că \hsize=327pt şi că
SPAŢIERI, CONCATENĂRI ŞI SALTURI 47

”fişierul sursă” conţine secvenţa de control:


\line{X \hskip 60pt B \hskip 100pt C\hskip 40pt D}
Procesarea acestei secvenţe va conduce la obţinerea ı̂n documentul
final a următoarei linii:
X B C D
Deoarece lungimea conţinutului din interiorul acoladelor este
200pt+4*7pt=228pt < 327pt, atunci procesorul va semnala uti-
lizatorului această diferenţă printr-un “Underfull box”. Deşi defi-
citul de spaţiu este de 99pt, constatăm că procesorul a distribuit
conţinutul dintre acolade pe toată lungimea liniei, procedând ast-
fel la extensia acestuia. Dacă ı̂nlocuim secvenţa de mai sus cu
următoarea (se adaugă secvenţa plus):
Exemplul 3.40 . \line {X \hskip 60pt plus 100pt B \hskip
100pt C\hskip 40pt plus 50pt D}
atunci, făcând calculele ca mai ı̂nainte, se constată că procesorul
va dispune de spaţiu mai mult decât suficient pentru a acoperi
deficitul, ı̂ncât nu va mai semnala un mesaj de tipul celui de mai
sus (linie prea scurtă). Rezultatul procesării secvenţei anterioare
va fi:
X B C D
Prin folosirea secvenţei elastice din Exemplul 3.40 , deficitul
de 99pt a fost ı̂mpărţit proporţional celor două secvenţe elastice,
adică, deoarece 100pt reprezintă 2/3 din 150pt=100pt+50pt,
atunci prima definiţie elastică va conduce la extensia spaţiului
dintre X şi B cu 66pt iar a celui dintre C şi D cu 33pt. Spaţiul
dintre B şi C nu va fi extins, ı̂ntrucât definiţia corespunzătoare
acestuia nu este elastică.
48 Capitolul 3

3.4 Salturi
Din punct de vedere al procesorului TEX, secvenţele de con-
trol destinate salturilor nu creează spaţiu nou; ele doar comple-
tează spaţiul creat de o altă secvenţă de control.
Plain TEX-ul are câte două tipuri predefinite de secvenţe de
control pentru completarea spaţiului orizontal şi a celui vertical.
Acestea se numesc \hfil, \hfill, \vfil şi \vfill.
Dacă ı̂n “fişierul sursă” avem una din următoarele secvenţe
de control:
{\hfill AAB CDD}
sau
{AAB\hfill CDD}
sau ı̂ncă
{AAB CDD \fill},
procesorul TEX le tratează ı̂n mod obişnuit, adică ı̂n cadrul unui
grup nu se poate crea un anumit spaţiu vid, ı̂ncât prezenţa comen-
zii \hfill ı̂n cadrul blocurilor anterioare este inefectivă.
Exemplul 3.5. Să generăm acum un spaţiu vid prin forţarea
lungimii grupul la 1.2in (vezi Capitolul 6, §6.4). Aşadar, fie
secvenţele:
\hbox to 1.2in {$|$ AAB\hfill CDD $|$}
sau
\hbox to 1.2in {$|$ \hfill AAB\hfill CDD\hfill $|$}
procesarea cărora va genera ı̂n documentul final:
| AAB CDD | şi | AAB CDD |, respectiv. Ob-
servăm că saltul este făcut ı̂n limita spaţiului disponibil.
Iată acum un exemplu pentru cazul vertical.
Exemplul 3.6. Să generăm un spaţiu vid ı̂n interiorul unui box
vertical, a cărui ı̂nălţime să fie 20mm. Una din următoarele secvenţe
de control rezolvă această problemă:
SPAŢIERI, CONCATENĂRI ŞI SALTURI 49

\vbox to 20mm {\vfill AAB \par CDD}


sau
\vbox to 20mm {AAB\vfill CDD}
sau
\vbox to 20mm {AAB \par CDD\vfill}.
Procesarea celei de-a II-a secvenţe de control conduce la obţinerea
următorului box vertical:
AAB

CDD
Ca şi ı̂n cazul orizontal, saltul este făcut ı̂n limita spaţiului disponi-
bil.
S-a observat ı̂n cadrul operaţiei de extensie-comprimare
(vezi Exemplul 3.40 ) că, datorită elasticităţii acesteia, spaţiul este
rearanjat până la un anumit punct (dictat de valorile furnizate
procesorului prin cuvintele cheie plus şi minus). Completarea
secvenţelor de salt cu definiţii de tip elastic nu numai că va ı̂m-
bunătăţi procesul de realizare a saltului, ci va dispune ı̂n plus de
mai multă putere ı̂n realizarea extensiei şi comprimării, faţă de
operaţiile obişnuite de spaţiere.
Exemplul 3.7. Secvenţa elastică:

\line{X\hskip 0pt plus 100pt B\hfil C\hskip 0pt


plus 50pt D}
va genera ı̂n documentul final următoarea linie:
XB CD
Acelaşi rezultat se obţine dacă folosim cele două tipuri de
salturi orizontale (\hfil şi \hfill):
50 Capitolul 3

Exemplul 3.70 . Secvenţa \line{X \hfil B \hfill C\hfil D}


generează următoarea linie:
XB CD
(să observăm că secvenţa \hfil este inefectivă).
O experienţă similară poate fi făcută cu \vfill şi \vfill ı̂n
interiorul aceluiaşi \vbox.
Secvenţa de salt care se termină cu două litere “l” (\vfill
sau \hfill, numite şi salturi tari) este infinit mai tare decât
secvenţa de salt care se termină cu un singur “l” (\vfil sau \hfil,
numite şi salturi slabe). Saltul tare inhibă orice acţiune din partea
unui salt slab.
Pe de altă parte, dacă două sau mai multe salturi de acelaşi
tip (\vfil sau \hfil) concurează pentru acelaşi spaţiu, ele se
extind prin aceeaşi cantitate. Un exemplu obişnuit de o astfel de
egalare este operaţia de centrare ı̂n linie; de exemplu, dacă scriem:
\line{\hfil Text centrat\hfil}
atunci obţinem textul centrat, exact ı̂ntre marginea stângă şi cea
dreaptă a lăţimii unei pagini, adică (pentru secvenţa de mai sus)
Text centrat
Salturile slabe sunt utilizate cu consistenţă ı̂n interiorul ma-
crourilor. De exemplu, \matrix şi \over folosesc saltul slab pentru
centrarea argumentelor sale.
Exemplul 3.8. Iată câteva posibile utilizări ale secvenţei de con-
trol \hfil:
xyz
$ {xyz\over x+y+z}$ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
x+y+z
xyz
${\hfil xyz\over x+y+z}$ . . . . . . . . . . . . . . . . . . . . . . . .
x+y+z
xyz
${xyz\hfil\over x+y+z}$ . . . . . . . . . . . . . . . . . . . . . . . . .
x+y+z
SPAŢIERI, CONCATENĂRI ŞI SALTURI 51

Astfel, eficient ar fi să se utilizeze saltul tare ı̂n text şi saltul slab
ı̂n definiţia unui macrou.

3.5 Spaţierea şi ı̂ntreruperea


Presupunem că ı̂n “fişierul sursă” avem scrisă secvenţa (mate-
rial) AB\quad CD (material) şi că, ı̂n procesul de generare a liniilor
din documentul final, procesorul decide asupra generării unei noi
linii ı̂ntre AB şi CD. Cum va trata acesta secvenţa \quad? Va lăsa
un spaţiu la sfârşitul liniei curente sau va ı̂ncepe noua linie cu un
spaţiu? Răspunsul este următorul: când TEX-ul ı̂ncepe generarea
unei noi linii şi are de tratat o secvenţă de control generatoare de
spaţiu orizontal, atunci spaţiul respectiv este eliminat din noua
linie.
Există totuşi situaţii ı̂n care o ı̂ntrerupere la nivelul unei
secvenţe \hskip ar fi inoportună. De exemplu, dacă “fişierul
sursă” conţine secvenţa R\hskip -1pt I, care este destinată for-
mării unei noi litere, atunci ar fi nedorită o ı̂ntrerupere ı̂ntre cele
două litere! Utilizând secvenţa de control \kern urmată de o di-
mensiune, procesorul TEX nu va ı̂ntrerupe niciodată linia la nivelul
acestei secvenţe. Astfel, ı̂nlocuind secvenţa de control anterioară
cu secvenţa de control R\kern -1pt I, se elimină orice posibil nea-
juns legat de generarea noii litere. Plain TEX-ul oferă trei tipuri
predefinite de kern-uri:
\enspace generează 1/2em (1em=10pt);
\thinspace generează 1/6em≈1.5pt;
\negthinspace genereaza -1/6em.
Se poate ı̂ntâmpla ca TEX-ul să ı̂ntrerupă o linie chiar şi
ı̂naintea secvenţei \kern (şi anume, dacă aceasta este precedată
de o secvenţă \hskip, de exemplu). În acest caz TEX-ul desparte
secvenţele \kern şi \hskip. Pentru a genera un spaţiu orizon-
tal care să garanteze neeliminarea acestuia din documentul final,
procesorul de TEX dispune de secvenţa de control \hglue.
52 Capitolul 3

Probleme similare pot să apară ı̂n cazul generării paginilor.


Folosind secvenţele de control \vglue sau \topglue se poate ge-
nera un spaţiu vertical la ı̂nceputul unei noi pagini.
Revenim la secvenţa de control \kern. Aceasta este ı̂n ge-
neral ambiguă pentru procesor, efectul procesării ei depinzând de
modul curent de lucru al acestuia. În modul de lucru orizontal
sau matematic, \kern creează un spaţiu orizontal, iar ı̂n modul de
lucru vertical, această secvenţă conduce la generarea unui spaţiu
vertical.

3.6 Spaţierea ı̂ntre paragrafe


Cantitatea de spaţiu vertical dintre paragrafe este gestionată
cu ajutorul variabilei \parskip. Procesorul TEX iniţializează a-
ceastă variabilă astfel: \parskip=0pt plus 1pt. Dacă utiliza-
torul doreşte, poate modifica valorile prestabilite, utilizând o de-
finiţie elastică, de exemplu:
\parskip=4pt plus 2pt minus 2pt.

3.7 Alte tipuri de salturi


Dimensiunea spaţiului generat de un salt poate fi acoperită
cu imaginea unui anumit caracter (punctul, de exemplu). O ı̂nşi-
ruire de puncte, precum apare ı̂n cuprinsul unei cărţi, este cunos-
cută drept un “leader”. Sunt cunoscute câteva asemenea
“leaders”-uri predefinite (toate operabile numai ı̂n modul orizontal
de lucru):
\hrulefill trasează o linie orizontală;
\dotfill construieşte un şir de puncte;
\rightarrowfill trasează o săgeată cu vârful
orientat spre dreapta;
\leftarrowfill trasează o săgeată cu vârful
orientat spre stânga;
\downbracefill construieşte o acoladă orizontală
SPAŢIERI, CONCATENĂRI ŞI SALTURI 53

cu deschiderea ı̂n jos;


\upbracefill construieşte o acoladă orizontală
cu deschiderea ı̂n sus.
Primele patru sunt utilizate ı̂n mod identic cu \hfill. Dacă
sunt utilizate mai multe “leaders”-uri ı̂ntr-o construcţie, atunci
spaţiul disponibil este ı̂mpărţit echitabil. Ultimele două vor fi
analizate mai profund ı̂n Capitolul 8.
Exemplul 3.9. Utilizarea secvenţei \upbracefill:
\hbox to 1in {\upbracefill} . . . . . . . . . . | {z }
Pentru o utilizare mai complexă a secvenţelor de control an-
terioare, se poate folosi secvenţa de control \leaders, permiţând
definirea de secvenţe de control mai performante. De exemplu,
pentru \dotfill putem obţine o comandă mai utilizabilă, definind
următorul macrou:
\def\largdotfill{\leaders\hbox to 16pt
{\hfil . \hfil}\hfill}
Să analizăm următorul exemplu ı̂n care se utilizează secvenţa de
control definită mai sus:
Exemplul 3.10. Următorul şir de secvenţe:
Capitolul 1. Preliminarii \largdotfill 3\par
Secţiunea 1.1 Funcţii convexe \largdotfill 15\par
Secţiunea 1.2 Funcţii monotone \largdotfill 32\par

va genera ı̂n documentul final următoarele linii:


Capitolul 1. Preliminarii . . . . . 3
Secţiunea 1.1 Funcţii convexe . . . . 15
Sectiunea 1.2 Funcţii monotone . . . . 32

Acest nou “leader” realizează o spaţiere egală cu cantitatea


specificată de utilizator (16pt pentru exemplul de mai sus) iar ele-
mentul cu care se acoperă cantitatea de spaţiu (punctul, ı̂n cazul
54 Capitolul 3

de faţă), suportă o aliniere pe verticală (ceea ce nu se ı̂ntâmplă ı̂n


cazul secvenţei de control \dotfill).

3.8 Salturi negative


Se pot realiza asemenea salturi, atât pe verticală, cât şi pe
orizontală, prin utilizarea secvenţelor de control \vskip şi \hskip,
urmate de o valoare negativă. Considerăm următoarea definiţie:
\def\negsalt {\hskip 0pt minus 1fil}.
Observaţie: fil este o altă unitate de măsură utilizată de proce-
sorul TEX. Secvenţa de control \hfil este aceeaşi cu construcţia
\hskip 0pt plus 1fil (de unde şi denumirea acestei secvenţe de
control).
Revenim la definiţia introdusă anterior cu următorul exemplu
de utilizare:
Exemplul 3.11. Secvenţa
$|$\hbox to -5pt{ LLL MMM \negsalt}$|$
are drept rezultat: || LLL MMM
Boxul din această construcţie va avea lungimea resetată la o
valoare aproape de zero. Procesorul micşorează lungimea textu-
lui “LLL MMM” cu valoarea dată de \negsalt, suprapunându-l
peste un text deja existent.
Plain TEX-ul dispune de două macrouri care utilizează ideea
de mai sus (\rlap{ ... } şi \llap{ ... }). Iată un exemplu de
utilizare a macroului \rlap. Considerăm definiţia:
\def\page#1{\largdotfill
\rlap{\hbox to 25pt{\hfill # 1}}\par}.
Dacă ı̂nlocuim ı̂n Exemplul 3.10 secvenţa \largdotfill 3 cu
secvenţa \page{3}, obţinem acelaşi rezultat.
TEX-ul are de asemenea o secvenţă de control pentru saltul
orizontal şi una pentru saltul vertical, anume \hss şi \vss, res-
pectiv. Valoarea parametrului de lungime poate varia ı̂ntre -∞
SPAŢIERI, CONCATENĂRI ŞI SALTURI 55

şi +∞ ı̂n aceste cazuri. Aceste ultime două secvenţe de control


corespund următoarelor definiţii:
\def\hss{\hskip 0pt plus 1fil minus 1fil}
\def\vss{\vskip 0pt plus 1fil minus 1fil}
În baza acestora, macroul \centerline este echivalent cu:
\line{\hss ... material ... \hss}
Dacă textul desemnat prin ... material ... este mai lung decât
\hsize, atunci \hss ı̂l contractă şi permite o depăşire cu o canti-
tate egală ı̂n ambele părţi ale liniei, fără ca procesorul să reclame
această depăşire.
CAPITOLUL 4. PARAGRAFE

4.1 Începutul şi sfârşitul unui paragraf


Am văzut (§1.5) că ı̂n debutul procesării unui “fişier sursă”,
TEX–ul se află ı̂n modul vertical de lucru. În faza de procesare, ı̂n
momentul ı̂n care ı̂ntâlneşte un alineat (paragraf) (recunoscut la
nivelul “fişierului sursă” prin existenţa unei linii vide de separare
a două texte diferite sau prezenţa secvenţei de control \par), pro-
cesorul TEX trece din modul vertical de lucru ı̂n modul orizontal
de lucru. Sfârşitul prelucrării unui paragraf face ca procesorul să
revină la modul vertical de lucru. Mai exact, dacă procesorul de
TEX este ı̂n modul vertical, trecerea la modul orizontal de lucru
se face atunci când acesta ı̂ntâlneşte (ı̂n materialul care constituie
“fişierul sursă”):
• un caracter;
• una din secvenţele de control: \indent, \noindent,
\leavevmode;
• o formulă matematică, delimitată prin semnul $ (după ı̂ntâl-
nirea celui de-al doilea semn $, procesorul revine la modul
orizontal de lucru);
• orice comandă care are sens numai ı̂n modul orizontal
(\hskip, \vrule) sau una din comenzile de formatare a para-
grafelor, care vor fi discutate mai târziu (vezi §4.6).
58 Capitolul 4

Aflat ı̂n modul orizontal, TEX-ul comută ı̂n modul vertical de


lucru, terminând prelucrarea paragrafului curent, când ı̂ntâlneşte:
• comenzile de spaţiere verticală (\vskip, \smallskip,
\medskip, \bigskip, \smallbreak, \medbreak şi
\bigbreak);
• comanda \par (sau una sau mai multe linii consecutive de
spaţii (adică mai multe CR-uri consecutive);
• orice comandă care are sens numai ı̂n modul vertical de lucru
(\hrule, de exemplu).

4.2 Alinierea implicită a paragrafelor


În general, prima linie a unui paragraf este aliniată (adică
este scrisă mai din dreapta faţă de marginea stângă a paginii).
Mărimea alineatului este dată de valoarea parametrului
\parindent. Alinierea este anulată prin setarea acestui para-
metru cu valoarea zero. Implicit, procesorul TEX setează acest
parametru astfel:
\parindent = 20pt
Putem modifica această valoare şi ea poate fi chiar negativă
(ceea ce ı̂nseamnă că prima linie a unui paragraf poate depăşi
marginea stângă a paginii).
Dacă se doreşte ca paragraful să ı̂nceapă fără alineat, atunci
trebuie ca acesta să fie precedat de secvenţa de control \noindent
(am văzut că această comandă comută starea procesorului de TEX
de la modul vertical de lucru ı̂n cel orizontal).

4.3 Generarea secvenţială a liniilor


După cum ştim, TEX-ul ignoră ı̂n general caracterul alb CR;
mai exact, ı̂l tratează ca pe un spaţiu. Sunt situaţii ı̂n care proce-
sorul de TEX trebuie să respecte ı̂ntreruperea liniilor din “fişierul
sursă” (adică acestea să apară ı̂n documentul final pe câte o linie,
PARAGRAFE 59

aşa cum sunt scrise ı̂n “fişierul sursă”). Pentru a obţine aceasta,
trebuie ı̂nceput textul respectiv cu comanda \obeylines, care
consideră CR echivalent cu \par.
Exemplul 4.1. Rezultatul procesării materialului:
{\obeylines % (= a asculta, a se supune)
Acest exemplu ilustrează posibilitatea apariţiei ı̂n
documentul final a unei părţi din materialul “fişierului sursă”,
exact ı̂n forma ı̂n care este scris, iar un simbol %
la sfârşitul unei linii
anulează ı̂ntreruperea unei parţi din linie. De
asemenea arată că pentru a obţine orice fel de
spaţiere verticală, trebuie folosită comanda explicită
\medskip
de spaţiere.}

revine la:
Acest exemplu ilustrează posibilitatea apariţiei ı̂n
documentul final a unei părţi din materialul “fi¸sierului sursă”,
exact ı̂n forma ı̂n care este scris, iar un simbol la sfârşitul unei linii
anulează ı̂ntreruperea unei parţi din linie. De
asemenea arată că pentru a obţine orice fel de
spaţiere verticală, trebuie folosită comanda explicită

de spaţiere.

Acest exemplu ne arată că o linie este ı̂ntreruptă conform ı̂n-


treruperilor făcute ı̂n “fişierul sursă” iar un simbol % la sfârşitul
unei linii anulează ı̂ntreruperea acelei linii (adică efectul caracteru-
lui CR este anulat). De asemenea arată că, pentru a obţine orice
fel de spaţiere verticală, trebuie folosită o comandă explicită de
spaţiere. Câteva CR-uri consecutive ı̂n “fişierul sursă” au acelaşi
efect cu al unuia singur. Pentru a neutraliza efectul comenzii
\obeylines asupra ı̂ntregului material care ı̂i succede ı̂n fişierul
60 Capitolul 4

sursă, trebuie inclusă ı̂ntre acolade partea de material asupra


căreia se doreşte a acţiona comanda \obeylines.

4.4 Margini la stânga şi la dreapta


Secvenţele de control \leftskip şi \rightskip controlează
poziţia relativă (din stânga, respectiv, din dreapta) a unei pagini.
Dimensiunea cu care este manevrat textul către stânga sau dreap-
ta poate fi atât pozitivă, cât şi negativă. Pentru ca efectul sec-
venţelor \leftskip şi \rightskip să se petreacă numai la nivelul
unui grup, atunci acesta trebuie să se ı̂ncheie cu secvenţa \par,
ı̂naintea acoladei din dreapta (care ı̂ncheie grupul).
Secvenţa de control \narrower incrementează ambii para-
metri (\leftskip şi \rightskip) cu o cantitate egală cu valoarea
parametrului \parindent (vezi Exemplul 4.2 de mai jos). Cu
alte cuvinte, marginile din stânga şi din dreapta ale paginii sunt
mutate spre interior. Această operaţie este utilă pentru realizarea
citărilor.
Exemplul 4.2. Rezultatul următor:
Câteva CR-uri consecutive ı̂n fişierul sursă au acelaşi efect cu al
unuia singur. Pentru a neutraliza efectul comenzii \obeylines,
trebuie inclusă ı̂n acolade regiunea respectivă

a fost obţinut ı̂n urma procesării următorului material:


{\parindent=.2in \narrower
Câteva CR-uri consecutive ı̂n fişierul
sursă au acelaşi efect cu al unuia singur.
Pentru a neutraliza efectul comenzii \obeylines, trebuie
inclusă ı̂n acolade regiunea respectivă\par}

Dacă utilizăm \narrower ı̂n interiorul unui grup, trebuie


ı̂ncheiat ultimul paragraf ı̂naintea ı̂ncheierii grupului. Prima linie
a paragrafului căruia ı̂i aplicăm \narrower va fi dublu aliniată
(dictată de prima aliniere normală + valoarea parametrului
PARAGRAFE 61

\leftskip). Dacă nu se doreşte aceasta, atunci trebuie ı̂nceput


paragraful respectiv cu secvenţa \noindent.
Dacă se utilizează un al doilea \narrower, ı̂n timp ce primul
este ı̂ncă activ, efectul este: cumularea valorilor parametrilor aces-
tora.

4.5 Centrarea textului


Procesorul TEX dispune de două posibilităţi de centrare a
unui text. Prima posibilitate revine la setarea parametrilor
\leftskip şi \rightskip cu aceeaşi valoare şi utilizarea secvenţei
de control \centerline (pentru fiecare linie ce se doreşte a fi cen-
trată). A doua posibilitate constă ı̂n utilizarea următorului şir de
comenzi:
{\leftskip = 0pt plus 1fil
\rightskip = 0pt plus 1fil
\parfilskip = 0pt
\obeylines ... material ... \par}
Procesarea secvenţei \centerline{\bf LINIE CENTRAT\u A}
are drept rezultat:
LINIE CENTRATĂ

4.6 Itemizări
O utilizare importantă a noţiunii de aliniere se regăseşte ı̂n
generarea şirurilor de itemizări sau a enumerărilor. Procesorul
TEX dispune ı̂n acest sens de secvenţa de control \item, urmată
de un parametru, mărginit de acolade.
Exemplul 4.3.
a) \item{arg-secv} Câteva CR-uri consecutive ı̂n fişierul sursă au acelaşi
efect cu al unuia singur. Pentru a neutraliza efectul comenzii \obeylines,
trebuie inclusă ı̂n acolade regiunea respectivă
62 Capitolul 4

Procesarea materialului de la punctul a) va genera ı̂n documentul


final:
arg-secv Câteva CR-uri consecutive ı̂n fişierul sursă au acelaşi efect cu al un-
uia singur. Pentru a neutraliza efectul comenzii \obeylines, trebuie
inclusă ı̂n acolade regiunea respectivă

Să remarcăm scrierea argumentului arg-secv ı̂n afara marginii din


stânga a paginii, asta deoarece lăţimea acestuia depăşeşte valoarea
parametrului \parindent.
b) {\parindent = 1.5cm \item{ (ii) } Câteva CR-uri consecutive ı̂n
fişierul sursă au acelaşi efect cu al unuia singur. Pentru a neutraliza efectul
comenzii \obeylines, trebuie inclusă ı̂n acolade regiunea respectivă
\item{(iii)} Pentru a neutraliza efectul comenzii \obeylines, tre-
buie inclusă ı̂n acolade regiunea respectivă \par}

Procesarea materialului de la punctul b) va genera ı̂n docu-


mentul final următoarea enumerare:
(ii) Câteva CR-uri consecutive ı̂n fişierul sursă au acelaşi efect cu al
unuia singur. Pentru a neutraliza efectul comenzii \obeylines,
trebuie inclusă ı̂n acolade regiunea respectivă
(iii) Pentru a neutraliza efectul comenzii \obeylines, trebuie in-
clusă ı̂n acolade regiunea respectivă

După cum se poate constata, secvenţa de control \item a-


nunţă ı̂nceputul unui nou paragraf şi acţionează numai asupra
acestuia. Cum operează? Această comandă incrementează tem-
porar valoarea parametrului \leftskip, cu o valoare egală cu
a parametrului \parindent, mutând astfel marginea stângă a
paginii. În plus, plasează argumentul său (arg-sec ı̂n exemplul
de mai sus) ı̂ntr-un alineat nou. Când paragraful se ı̂ncheie,
valoarea precedentă a parametrului \leftskip este restabilită.
Prezenţa grupului după \item este obligatorie, chiar dacă acesta
va fi vid. Dacă acest grup nu este scris, TEX-ul va lua primul
PARAGRAFE 63

caracter din textul care ı̂i urmează şi ı̂l va considera drept ar-
gument. Secvenţa \item este adesea folosită ı̂n interiorul unui
grup; astfel, mărimea alineatului poate fi controlată printr-o mo-
dificare locală a parametrului \parindent (vezi Exemplul 4.4).
În acest caz, ca de obicei, grupul trebuie ı̂ncheiat cu \par (altfel,
următorul paragraf nu este prelucrat corect). Nu este nevoie de
secvenţa \par ı̂ntre secvenţe consecutive de \item-uri, ı̂ntrucât
\item ı̂nsuşi marchează un nou paragraf.
Macroul \itemitem este folosit ı̂ntr-un mod similar cu cel al
comenzii \item, cu acelaşi efect, marginea din stânga fiind aliniată
cu valoarea 2*\parindent.
Exemplul 4.4. Procesarea materialului:
{\parindent = 20pt \item{{\bf 1.}} Câteva CR-uri consecutive ı̂n
fişierul sursă au acelaşi efect cu al unuia singur. Pentru a neutraliza efectul
\obeylines trebuie inclusă ı̂n acolade regiunea respectivă
comenzii
{\itemitem{\bf a.} Câteva CR-uri consecutive ı̂n fişierul sursă au acelaşi
efect cu al unuia singur.
\itemitem{\bf b.} Pentru a neutraliza efectul comenzii \obeylines,
trebuie inclusă ı̂n acolade regiunea respectivă \par}}
conduce la obţinerea următoarelor alinieri:
1. Câteva CR-uri consecutive ı̂n fişierul sursă au acelaşi efect cu al un-
uia singur. Pentru a neutraliza efectul comenzii \obeylines, trebuie
inclusă ı̂n acolade regiunea respectivă
a. Câteva CR-uri consecutive ı̂n fişierul sursă au acelaşi efect cu al
unuia singur.
b. Pentru a neutraliza efectul comenzii \obeylines trebuie inclusă
ı̂n acolade regiunea respectivă

Plain TEX-ul nu dispune de un macrou de forma \itemitem-


item; dacă e nevoie de un asemenea macrou, utilizatorul ı̂şi poate
defini unul propriu (vezi §4.9).
Alte posibile tipuri de secvenţe \item pot fi obţinute cu aju-
torul macroului \leftitem{ ... }, a cărui definiţie este:
64 Capitolul 4

\def\leftitem# 1{\item
{\hbox to\parindent {\enspace# 1 \hfill}}}
Exemplul 4.5. Procesarea materialului
{\parindent = 1in
\leftitem{\bf \TeX\ Book} Câteva CR-uri consecutive ı̂n
“fişierul \hfill\break
sursă” au acelaşi efect cu unul singur. \hfill\break
Pentru a neutraliza efectul comenzii \obeylines, \hfill\break
trebuie inclusă ı̂n acolade regiunea respectivă
}
are drept rezultat:
TEX Book Câteva CR-uri consecutive ı̂n “fişierul
sursă” au acelaşi efect cu unul singur.
Pentru a neutraliza efectul comenzii \obeylines,
trebuie inclusă ı̂n acolade regiunea respectivă

Să notăm utilizarea secvenţii \hfill\break pentru a ı̂ncheia


prelucrarea unei linii; secvenţa \obeylines nu lucrează ı̂n acest
context, deoarece ea marchează efectiv un CR, echivalent cu un
\par, iar aici avem nevoie de a păstra totul ı̂n acelaşi paragraf
(ceea ce rezultatul procesării o confirmă).
Lungimea materialului din interiorul grupului { ... }, ce ur-
mează după \leftitem, este presupusă a fi ≤ valoarea parame-
trului \parindent, din care se scade 0.5em. Dacă ı̂nsă argumentul
constă din material de lungime mai mare, acesta poate fi ı̂mpărţit
ı̂n mai multe linii (pe care procesorul le prelucrează cu ajutorul
secvenţei de control \vtop), ca ı̂n exemplul următor:
Exemplul 4.6. Procesarea materialului
\parindent = 1in
\leftitem{\smash
{\vtop {\hbox {\bf\TeX} \hbox{\bf\ Book}}}}
Câteva CR-uri consecutive ı̂n
PARAGRAFE 65

“fişierul \hfill\break
\hfill\break
sursă” au acelaşi efect cu unul singur.
Pentru a neutraliza efectul comenzii \obeylines, \hfill\break
trebuie inclusă ı̂n acolade regiunea respectivă
}
are drept rezultat:
TEX Câteva CR-uri consecutive ı̂n “fişierul
Book sursă” au acelaşi efect cu unul singur.
Pentru a neutraliza efectul comenzii \obeylines,
trebuie inclusă ı̂n acolade regiunea respectivă

Vom vedea mai târziu o altă secvenţă de control (macroul


\cornerbox) cu ajutorul căreia vom obţine acelaşi rezultat ca ı̂n
Exemplul 4.6.

4.7 Prelucrarea mai multor alineate


În situaţia ı̂n care se doreşte să apară mai multe linii ı̂n do-
cumentul final, toate cu acelaşi alineat, se pot folosi secvenţele
\hangindent şi \hangafter. Prima secvenţă este urmată de o di-
mensiune (un număr pozitiv sau negativ), iar a doua de un număr
ı̂ntreg (pozitiv sau negativ).
Exemplul 4.7. Procesarea secvenţelor:

\parindent = 27pt
\hangindent = 47pt \hangafter=2
Lungimea materialului din interiorul grupului { ... } ce urmează după
\leftitem este presupusă a fi ≤ valoarea parametrului \parindent mi-
nus 0.5em. Dacă ı̂nsă argumentul constă dintr-un cod de lungime mai mare,
acesta poate fi ı̂mpărţit ı̂n mai multe linii pe care procesorul le prelucrează
cu ajutorul secvenţei de control \vtop

are drept rezultat:


66 Capitolul 4

Lungimea materialului din interiorul grupului { ... } ce urmează după


\leftitem este presupusă a fi ≤ valoarea parametrului \parindent mi-
nus 0.5em. Dacă ı̂nsă argumentul constă dintr-un cod de lungime
mai mare, acesta poate fi ı̂mpărţit ı̂n mai multe linii pe care pro-
cesorul le prelucrează cu ajutorul secvenţei de control \vtop
În mod normal, \hangindent şi \hangafter sunt plasate
(ı̂n cadrul “fişierului sursă”) la ı̂nceputul paragrafului pentru care
se aplică, ı̂nsă ele pot fi plasate oriunde ı̂n paragraf. Aceste
secvenţe de control lucrează ı̂mpreună.

4.8 Note de subsol


Acestea se pot obţine prin utilizarea macroului \footnote,
ı̂n a cărui definiţie intră două argumente: “numărul” (sau “sim-
bolul”) pentru numerotarea notei şi “textul” notei.
Exemplul 4.8. Exemplu de utilizare o secvenţei de control
\footnote{∗}{\bf Notă de subsol marcată cu un simbol} *
Dacă este nevoie de numerotarea secvenţială a notelor de
subsol, aceasta se poate face automat, prin utilizarea următorului
macrou:
\newcount\notenumber\notenumber=1
\def\myfootnote# 1
{\unskip\footnote{$ˆ {\the\notenumber}$ }{#1}
\global\advance\notenumber by 1}
În felul acesta va fi nevoie doar de un singur argument,
“textul” notei, adică forma de utilizare a noii secvenţe este \my-
footnote text. Acest macrou permite utilizarea de fonturi diferite
pentru notele de subsol (\footnote foloseşte acelaşi font pentru
“textul” notei şi pentru documentul final).

* Notă de subsol marcată cu un simbol


PARAGRAFE 67

Atât \footnote cât şi \myfootnote nu lucrează ı̂n interiorul


unui box vertical sau orizontal (care este parte a unui paragraf sau
box, de orice clasă); secvenţele sunt pur si simplu neprocesate.

4.9 Macroul item triplu


Să ı̂ncercăm să scriem un macrou \itemitemitem pentru
a realiza alinierea pe trei nivele. Definiţiile procesorului de TEX
pentru secvenţele de control \item şi \itemitem sunt:
\def\item
{\par\hangindent=\parindent\textindent}
\def\itemitem
{\par\indent\hangindent=2\parindent\textindent}
După cum am văzut ı̂n §4.7, \hangindent=\parindent are
drept efect alinierea tuturor liniilor unui paragraf, ı̂ncepând cu a
doua (deoarece acolo \hangafter=1), cu un alineat dat de valoa-
rea parametrului \parindent.
Comanda \hangindent = 2*\parindent lucrează ı̂n acelaşi
mod.
Putem defini macroul item triplu pornind de la \itemitem,
procedând astfel: adăugăm ı̂ncă o secvenţă \item şi ı̂nlocuim 2
cu 3, adică:
\def\itemitemitem
{\par\indent\indent\hangindent=3\parindent\textindent}
Exemplul 4.9. Procesarea materialului (vezi şi exemplul 4.4):
{\parindent = 20pt
\item{\tt A.} România, Bulgaria, Cehia, Slovenia, Croaţia, Rusia, Polo-
nia, Ungaria, Austria;
{\itemitem{\bf 1.} Câteva CR-uri consecutive ı̂n fişierul sursă au acelaşi
efect cu al unuia singur. Pentru a neutraliza efectul comenzii \obeylines
trebuie inclusă ı̂n acolade regiunea respectivă
68 Capitolul 4

{\itemitemitem{\it a.} Câteva CR-uri consecutive ı̂n fişierul sursă au


acelaşi efect cu al unuia singur.
\itemitemitem{\it b.} Pentru a neutraliza efectul comenzii \obeylin-
es, trebuie inclusă ı̂n acolade regiunea respectivă \par}}}
conduce la obţinerea următoarelor alinieri:
A. România, Bulgaria, Cehia, Slovenia, Croaţia, Rusia, Polonia, Ungaria,
Austria;
1. Câteva CR-uri consecutive ı̂n fişierul sursă au acelaşi efect cu al
unuia singur. Pentru a neutraliza efectul comenzii \obeylines
trebuie inclusă ı̂n acolade regiunea respectivă
a. Câteva CR-uri consecutive ı̂n fişierul sursă au acelaşi efect cu
al unuia singur.
b. Pentru a neutraliza efectul comenzii \obeylines, trebuie
inclusă ı̂n acolade regiunea respectivă

4.10 O alternativă pentru item


Să remarcăm că, prin efectul de aliniere al tuturor liniilor
unui paragraf, macrourile \item şi \itemitem sunt risipitoare
de spaţiu. O alternativă pentru acestea este secvenţa de con-
trol \meti. Aceasta aliniază doar prima linie a unui paragraf şi
scrie argumentul său ı̂n spaţiul rezervat aliniatorilor. Definiţia
macroului \meti este următoarea:
\def\meti# 1
{\par\indent\llap{# 1\enspace}\ignorespaces}
Exemplul 4.10. Procesarea materialului:
\meti{\bf(i)} Câteva CR-uri consecutive ı̂n “fişierul sursă” au acelaşi efect
cu al unuia singur. Pentru a neutraliza efectul comenzii \obeylines trebuie
inclusă ı̂n acolade regiunea respectivă
are următorul efect:
PARAGRAFE 69

(i) Câteva CR-uri consecutive ı̂n “fişierul sursă” au acelaşi efect cu al un-
uia singur. Pentru a neutraliza efectul comenzii \obeylines trebuie inclusă
ı̂n acolade regiunea respectivă

Cum va actiona \meti ı̂n acest exemplu? Prima linie va


fi alineată prin \parindent, iar \llap va scrie la stânga punc-
tului curent conţinutul din acolade, fără a muta punctul curent.
Secvenţa \ignorespace (care are acelaşi efect ca şi \unskip din
definiţia macroului \myfootnote) determină procesorul TEX să
ignore orice spaţiu sau CR care urmează acestui macrou.
CAPITOLUL 5. ORGANIZAREA ŞI PROIECTAREA
PAGINILOR

5.1 Generarea implicită a unei pagini

Plain TEX-ul construieşte ı̂n mod automat o pagină de im-


primat sub forma următoare:

\headline l 22.5pt

pagină \vsize

\footline l 22.5pt
←−−−−−−−− \hsize −−−−−−−−→
Să remarcăm, din figura de mai sus, că procesorul plain TEX
gestionează mărimea unei pagini cu ajutorul a patru parametri:
72 Capitolul 5

\hsize (lăţimea paginii),


\vsize (ı̂nălţimea paginii),
\headline (linia de sus) şi
\footline (linia de jos).
Implicit, \hsize=6.5in şi \vsize=8.9in. Valoarea acestora
poate fi schimbată de utilizator, conform propriilor necesităţi.
Procesorul TEX setează linia de sus şi linia de jos astfel:

\headline = {\hfill}
(5.1)
\footline = {\hfill\tenrm\folio\hfill}

Secvenţa de control \folio afişează (imprimă) numărul pa-


ginii (memorat de procesorul TEX ı̂n parametrul \pageno). Prin
convenţie, un număr de pagină negativ este imprimat cu ajutorul
numeralelor romane, caz ı̂n care definiţia plain TEX-ului pentru
\folio este:
\def\folio{ \ifnum\pageno < 0
\romannumeral -\pageno \else\number\pageno\fi}
Pentru scrierea numeralelor romane cu caractere mari, se
ı̂nlocuieşte \romannumeral cu \Romannumeral ı̂n secvenţa de mai
sus.
Revenind la structura anterioară a variabilelor \headline şi
\footline din relaţia (5.1), remarcăm că linia de sus a unei astfel
de pagini va fi vidă, ı̂n timp ce linia de jos va conţine numărul de
pagină, centrat şi scris cu fontul roman, de mărime 10pt.
Dacă se doreşte obţinerea unui document fără numerotarea
paginilor, atunci fişierul sursă *.tex trebuie să conţină secvenţa
\nopagenumbers; această secvenţă de control este o abreviere pen-
tru secvenţa \footline{\hfill}.
Pentru a obţine un număr de pagină ı̂n partea de sus şi nu ı̂n
partea de jos a paginii, schimbăm structura variabilelor \headline
ORGANIZAREA ŞI PROIECTAREA PAGINILOR 73

şi \footline, dându-le următoarele valori:



\headline = {\hfil\tenrm\folio\hfil}
(5.2)
\footline = {\hfil}

După cum am văzut mai sus, numărul paginii este memorat


ı̂n parametrul \pageno şi este incrementat automat, prin trecerea
de la o pagină la alta. Dacă \pageno nu este folosit ı̂ntr-un “fişier
sursă” *.tex, atunci prima pagină a documentului este numerotată
implicit cu valoarea 1; altfel, prima pagină a documentului va avea
valoarea atribuită parametrului \pageno de către utilizator.
Organizarea paginilor de către plain TEX este făcută destul
de simplist. Astfel, procesorul nu distinge ı̂ntre pagina din dreapta
şi pagina din stânga a unui document, nu deosebeşte prima pa-
gină (care, ı̂n general, nu trebuie să aibă imprimat numărul) de
celelalte pagini ale documentului etc. În acest spirit, prezentăm o
modalitate de obţinere a unei pagini mult mai complexe. Pentru
a uşura utilizarea secvenţelor care urmează, acestea pot fi memo-
rate ı̂ntr–un fişier (numit, nume-fis1.tex, pentru a putea fi referit
ı̂n continuare). În “fişierul sursă” se va adăuga secvenţa \input
nume-fis1.tex. Aceste secvenţe de control sunt:
\newif\iftitlepage \titlepagetrue
\newtoks\titlepagehead \titlepagehead={\hfil}
\newtoks\titlepagefoot \titlepagefoot={\hfil}
\newtoks\runningauthor \runningauthor={\hfil}
\newtoks\runningtitle \runningtitle={\hfil}
\newtoks\evenpagehead \newtoks\oddpagehead
\evenpagehead={\hfil\the\runningauthor\hfil}
\oddpagehead={\hfil\the\runningtitle\hfil}
\pageno=1
\newtoks\evenpagefoot \evenpagefoot={\hfil}
\newtoks\oddpagefoot \oddpagefoot={\hfil}
74 Capitolul 5

\headline={\iftitlepage\the\titlepagehead
\else\ifodd\pageno\the\oddpagehead
\else\the\evenpagehead\fi\fi}
\footline={\iftitlepage\the\titlepagefoot
\global\titlepagefalse
\else\ifodd\pageno\the\oddpagefoot
\else\the\evenpagefoot\fi\fi}
Astfel, parametrii linia de sus şi linia de jos ai noii pagini vor fi:

\titlepagehead

pagină

\titlepagefoot

Mai mult, structura unei pagini din stânga, respectiv din


dreapta, va fi:

\evenpagehead \oddpagehead

pagină pară pagină impară

\evenpagefoot \oddpagefoot

Secvenţele de control prezente ı̂n diagramele de mai sus sunt


parametri care generează linia de sus şi linia de jos ale unei pagini.
Aceştia pot fi setaţi cu valorile dorite de utilizator şi trebuie
adăugaţi “fişierului sursă”, altfel cele două zone vor fi vide.
ORGANIZAREA ŞI PROIECTAREA PAGINILOR 75

Exemplu 5.1 Dacă ı̂ntr-un “fişier sursă” sunt memorate urmă-


toarele secvenţe de control:
\input nume-fis1.tex
\runningauthor={\bf Numele Autorului}
\runningtitle={\tt Titlul Cărţii}
iar parametrii \headline şi \footline au structura dată de re-
laţia (5.1), atunci procesorul TEX va genera perechi de pagini,
având următoarea formă:

Numele autorului Titlul Cărţii

pagină pară pagină impară

2 3

Adesea este necesar să se specifice un font, fie ı̂n cadrul de-
finiţiei parametrilor \headline şi/sau \footline, fie ca ı̂n exem-
plul de mai sus (incluzând fontul dorit ı̂n definiţia parametrilor
\runningauthor şi/sau \runningtitle (titlul de pagină)).
Dacă nu se doreşte ca prima pagină să conţină titlul de pa-
gină, atunci utilizatorul trebuie să introducă ı̂n “fişierul sursă”
secvenţa \titlepagefalse, imediat după secvenţa \input nume-
fis1.tex.
Exemplul 5.2. O alegere obişnuită pentru linia de sus şi linia de
jos a unei pagini este următoarea (ı̂n acest exemplu este presupus
că parametrul \footline are definiţia dată de relaţia (5.2)):
\evenpagehead={\tenbf\folio\hfill
\eightrm\the\runningauthor}
\oddpagehead={\tenrm\the\runningtitle
76 Capitolul 5

\hfill\tenbf\folio}
\evenpagefoot={\hfil} \oddpagefoot={\hfil}
\runningauthor={N. Gheorghe}
\runningtitle={Sisteme de Operare}
Rezultatul procesării unui “fişier sursă”, care conţine şi sec-
venţele de control din Exemplul 5.2, va conduce la generarea
perechilor de pagini (ı̂n cazul de faţă perechea (16,17)), cu urmă-
toarea ı̂nfăţişare:

16 N. Gheorghe Sisteme de Operare 17

pagină pară pagină impară

Exemplul 5.3. Următoarele setări vor plasa titlul de pagină ı̂n


marginea din stânga, respectiv din dreapta a paginii:
\evenpagehead={\llap {\tenbf\folio\quad}
\eightit\the\runningauthor\hfill}
\oddpagehead={\hfill \eightit\the\runningtitle
\rlap{\quad\tenbf \folio}}
Multe variante de pagini pot fi create şi pentru linia de jos.
Remarcă: Dacă se doreşte ca titlul unei pagini să ı̂nceapă mai
jos decât marginea de sus a unei pagini, atunci secvenţa de con-
trol \vskip, care realizează acest lucru, trebuie precedată de o
altă secvenţă de control. Altfel secvenţa \vskip va fi ignorată de
procesor. Utilizatorul are la ı̂ndemână următoarele secvenţe de
control pentru a preceda secvenţa \vskip: \hbox{} sau \null.
ORGANIZAREA ŞI PROIECTAREA PAGINILOR 77

De asemenea, poate utiliza secvenţa \topglue ı̂n locul secvenţei


\vskip.
Pentru a genera o pagină vidă, la prima vedere se pare că
putem folosi şirul următor de secvenţe:
\vfill\eject\vfill\eject
Această soluţie nu este ı̂nsă bună, deoarece, ı̂n momentul ı̂n care
procesorul prelucrează ultima grupă \vfill\eject, acesta se află
deja la ı̂nceputul următoarei pagini, lucru care ı̂l face să ignore
efectul prelucrării secvenţei \vfill; ı̂n consecinţă, ultima secvenţă
\eject devine inefectivă (secvenţa \eject are drept efect “un
salt obligatoriu” la o nouă pagină). Altfel spus, după prelucrarea
primei grupe de secvenţe \vfill\eject, procesorul se află ı̂n faţa
unui salt activ (deci nu mai poate să activeze altul). Soluţia
corectă revine la utilizarea următorului ansamblu de secvenţe:
\vfill\eject\null\vfill\eject

5.2 Realizarea manuală a ı̂ntreruperii liniilor


şi paginilor
Când procesorul plain TEX se află ı̂n modul orizontal de lucru
şi ı̂ntâlneşte secvenţa \break, acesta creează o nouă linie şi nu un
nou paragraf; următoarea linie creată de procesor este fără aline-
at, iar linia precedentă nu este completată cu spaţiul de sfârşit-
de-paragraf (realizat de secvenţa \parfillskip). Drept rezultat,
textul liniei precedente trebuie ı̂mpins spre marginea din dreapta,
lucru care este realizat de procesor prin extinderea ı̂ntregului spa-
ţiu vid, aferent liniei ı̂n cauză. Datorită acestui neajuns, este mai
bine de utilizat secvenţa \hfill\break ı̂n locul secvenţei \break.
Remarcă: Două secvenţe de tipul abc\break şi abc \break nu
au acelaşi efect; ı̂n cazul al doilea, spaţiul de după “abc” va fi
adăugat la sfârşitul liniei.
78 Capitolul 5

Când TEX–ul se află ı̂n modul vertical de lucru (ı̂ntre para-


grafe) şi ı̂ntâlneşte secvenţa \break, atunci ı̂ncepe procesarea unei
noi pagini (ca şi cum ar ı̂ntâlni secvenţa \eject). Există o diferen-
ţă ı̂ntre cele două situaţii: secvenţa \eject va ı̂ncheia un paragraf
şi apoi va ı̂ntrerupe pagina curentă, chiar dacă este ı̂ntâlnită de
procesor ı̂n modul orizontal de lucru. Şi ı̂n cazul acesta, utiliza-
torul este sfătuit să folosească ı̂n locul secvenţei \break grupul de
secvenţe \vfill\break.
O altă situaţie delicată, care poate fi ı̂ntâlnită pe parcursul
procesării unui “fişier sursă”, este aceea ı̂n care trebuie să se creeze
un spaţiu vertical (destinat unei figuri, de exemplu). Să analizăm
o astfel de situaţie pe un exemplu. Presupunem că utilizatorul
doreşte să aloce un spaţiu de 2in, ı̂n care să plaseze o figură.
Dacă, pentru a realiza acest lucru, ı̂n “fişierul sursă” s-a folosit
secvenţa de control:
\vskip 2in\centerline{Figura 5} (5.3)
iar ı̂n pagina pe care tocmai o generează, procesorul mai dispune
de un spaţiu de doar 1in, când urmează a fi prelucrată secvenţa
de mai sus, vom descoperi ı̂n documentul final (fişierul *.dvi) că
textul “Figura 5” va apărea la ı̂nceputul paginii următoare, fără a
fi precedată de spaţiu. De ce? În plus, conţinutul acelei pagini va
fi extins pentru a umple spaţiul de 1in rămas neutilizat. Dacă se
utilizează secvenţa \vglue ı̂n locul secvenţei \vskip, cei doi inchi
ceruţi de utilizator vor fi salvaţi la ı̂nceputul paginii următoare,
dar, din nou, conţinutul paginii precedente va fi incorect distribuit
ı̂n pagină. Iată soluţia prin care se elimină acest neajuns. În locul
construcţiei (5.3), se va utiliza grupul de secvenţe
\midinsert\vglue 2in\centerline{Figura 5}\endinsert
Când TEX–ul ı̂ntâlneşte perechea de secvenţe \midinsert ...
\endinsert, memorează conţinutul dintre acestea (simbolizat aici
prin ...) ı̂ntr–un box de lucru. Dacă, ı̂n momentul ı̂ntâlnirii aces-
tei perechi, spaţiul rămas disponibil ı̂n partea de jos a paginii
ORGANIZAREA ŞI PROIECTAREA PAGINILOR 79

ı̂n lucru este < 2in, atunci procesorul TEX mută materialul din-
tre \midinsert ... \endinsert ı̂n partea de sus a următoarei
pagini şi continuă, pe pagina ı̂n lucru, cu prelucrarea materialului
care urmează după \endinsert. O astfel de prelucrare a mate-
rialului se numeşte flotare. Notăm că pentru a genera spaţiu la
ı̂nceputul paginii şi ı̂n cazul unei flotări trebuie utilizată secvenţa
\vglue sau \null\vskip, ı̂n locul secvenţei \vskip.
Există o variantă pentru perechea de secvenţe de mai sus:
perechea
\topinsert
... material ...
\endinsert.
Prezentăm acum o descriere sumară a parametrilor (precum
şi a altor secvenţe de control) utilizaţi de procesorul TEX ı̂n pro-
cesul de organizare a unei pagini:
\advance = adună la un registru de tip: ı̂ntreg, dimensiune, spaţiu
sau spaţiu matematic, un alt obiect de acelaşi tip. Cel mai
frecvent, acest parametru este utilizat la incrementarea au-
tomată a contorului notelor de subsol (footnotes) precum şi
a contorului paginilor.
\advancepageno = incrementează valoarea variabilei \pageno
când procesorul ı̂ncepe prelucrarea unei noi pagini. Acest
macrou are următoarea definiţie:
\def\advancepageno{ifnum\pageno<0
\global\advance\pageno by -1
\else\global\advance \pageno by 1\fi}
Secvenţa \global este necesară deoarece secvenţa \advance
\pageno este apelată de obicei ı̂n interiorul unui grup şi acesta
trebuie să rămână ı̂n acţiune chiar după terminarea grupului
curent (vezi şi \gdef).
\hoffset = controlează dimensiunea orizontală a spaţiului gol,
din stânga foii de hârtie; implicit este 1in.
80 Capitolul 5

\ifodd = testează dacă următorul ı̂ntreg este impar.


\iftitlepage = decide dacă pagina curentă trebuie scrisă cu
linia de sus şi linia de jos, corespunzătoare unei pagini de
titlu (\titlepagehead, \titlepagefoot), altfel decât una
obişnuită. Valoarea lui \iftitlepage este controlată cu \ti-
tlepagetrue şi \titlepagefalse.
\titlepagefalse = face ca pagina curentă să nu fie tratată ca o
pagină cu titlu.
\voffset = controlează dimensiunea verticală a textului, ı̂n ra-
port cu foaia de hârtie; implicit valoare este 1in de la margi-
nea foii.
CAPITOLUL 6. BOXURI

În TEX totul este asimilat ca fiind un box (vezi § 6.2), fiecare
box având anumite dimensiuni. De exemplu, când caracterele
sunt scrise ı̂mpreună pentru a forma o linie, linia ı̂nsăşi devine un
box. Putem spune că activitatea procesorului TEX este divizată
ı̂n două: crearea boxurilor şi scrierea lor.
Boxurile pot fi explicite sau implicite. Implicite sunt acele
boxuri generate de caractere sau linii de text. Cele explicite sunt
create prin utilizarea uneia din următoarele comenzi:
\hbox, \vbox, \vtop, \vcenter.
Odată ce procesorul a creat un box, acesta nu este intere-
sat (pentru moment) de conţinutul acestuia; boxul este privit ca
un dreptunghi ale cărui dimensiuni sunt ceea ce ı̂l interesează pe
procesor ı̂n această fază. Mai precis, iată câteva boxuri prin care
punem ı̂n evidenţă elementele aflate ı̂n atenţia procesorului

→ •........ •........ •........ •........

Figura 6.1.
Linia punctată din interiorul boxului se numeşte linia de
bază. Pe seama acesteia sunt alineate boxurile unul după altul
82 Capitolul 6

(ca ı̂n Figura 6.1). Punctul de referinţă al unui box este ultimul
din stânga al liniei sale de bază, indicat ı̂n figura de sus prin sim-
bolul →. Dimensiunile unui box sunt: lăţimea (width), ı̂nălţimea
(height) (partea de deasupra liniei de bază) şi adâncimea (depth)
(partea de sub linia de bază). Cel mai din stânga box din Figura
6.1 are următoarele dimensiuni: height=6pt, depth=15pt iar
width=lăţimea materialului “........”. Fiecare dimensiune a unui
box este ı̂n mod normal o valoare pozitivă dar acestea pot lua şi
valoarea 0 sau chiar valori negative (de exemplu, macrourile \llap
şi \rlap scriu argumentele lor ı̂ntr-un box de lăţime =0).

6.1 Scrierea boxurilor


După cum am văzut deja, diferenţa fundamentală ı̂ntre mo-
dul de lucru vertical şi cel orizontal este dată de modul ı̂n care
boxurile sunt scrise la un loc (unul peste altul sau unul lângă
altul).
Stivuirea boxurilor (scrierea pe verticală). Când pro-
cesorul TEX citeşte una din secvenţele de control: \vbox, \vtop
sau \vcenter, urmată de o acoladă {, acesta trece ı̂n modul de lu-
cru vertical intern şi ı̂ncepe stivuirea, unul peste altul, a boxurilor
ı̂ntâlnite, aliniindu-le punctele verticale de referinţă. Procesul con-
tinuă până la citirea simbolului }. Rezultatul este tot un box, nu-
mit box vertical. De exemplu, secvenţa următoare: \vbox{\box2
\box3\box4}, dă un box mai mare (vezi Figura 6.2), compus din
boxurile \box2, \box3, \box4, care sunt locaţii de memorie desti-
nate stocării boxurilor, locaţii gestionate de procesorul TEX (vezi
\setbox §6.3)

........

........
→ ........ Figura 6.2.
BOXURI 83

Cel mai dedeasupra (ı̂n vârf) va fi boxul \box2. Procesorul


scrie automat un spaţiu mic ı̂ntre componentele noului box.
Linia de bază a unui box obţinut cu \vbox coincide cu linia
de bază a ultimei componente a boxului (vezi Figura 6.2). Pentru
secvenţa \vtop linia de bază coincide cu cea a primului box ı̂n
timp ce pentru secvenţa \vcenter (care este permisă numai ı̂n
modul matematic de lucru) boxul rezultat are linia de bază ı̂n
mijlocul lăţimii acestuia.
........

→ ........ → ........ Figura 6.3.


........

........
........

Scrierea boxurilor pe orizontală. Când TEX-ul ı̂ntâlneşte


secvenţa de control \hbox, acesta comută ı̂n modul de lucru ori-
zontal restrâns. Comanda \hbox{...} are drept efect concatenarea
materialului dintre acolade (simbolizat aici prin ...) ı̂ntr-un box
orizontal, suficient de mare ı̂ncât să ı̂ncapă tot materialul. Com-
ponentele noului box sunt alineate ţinı̂ndu-se seama de linia de
bază a fiecăreia.
Lungimea boxului orizontal rezultat este suma lungimilor
fiecărei componente deoarece, spre deosebire de cazul vertical, pro-
cesorul nu scrie spaţiu ı̂ntre componente. Înălţimea şi adâncimea
boxului rezultat sunt ı̂nălţimea şi adâncimea maximă ale boxurilor
dintre acolade.
Cı̂nd procesorul TEX construieşte un paragraf, acesta se află
de asemenea ı̂n modul orizontal de lucru numit ordinar. Diferenţa
dintre modul de lucru orizontal ordinar şi cel orizontal restrâns
este că: ı̂n primul, procesorul va diviza boxul rezultat ı̂n mai
multe boxuri de lungime egală cu valoarea parametrului \hsize,
84 Capitolul 6

ı̂n timp ce prin prelucrarea unui \box se va crea exact o linie, linie
ce poate avea orice lungime (funcţie de conţinutul dintre {...}).

6.2 Tipuri de boxuri


Procesorul plain TEX recunoaşte cinci tipuri de bază de box-
uri: caractere, spaţieri (glue), linii, boxuri explicite şi formule
matematice.
Caractere. Acestea sunt apreciate de procesor ca fiind boxuri
deoarece au lăţime, ı̂nălţime şi adâncime, specifice fiecărui
caracter. Dacă TEX-ul se află ı̂n modul vertical de lucru când
ı̂ntâlneşte un caracter, atunci trece imediat ı̂n modul orizon-
tal ordinar şi dă startul unui paragraf, care mai târziu va fi
introdus ı̂ntr-o linie de lăţime \hsize (vezi § 5.1). Amintim
că, dacă ne aflăm ı̂n modul vertical de lucru, atunci un singur
caracter implică crearea unei linii ı̂ntregi. Atât ı̂n modul ori-
zontal ordinar cât şi ı̂n cel restrictiv, caracterele sunt legate
la un loc (lipite), iar liniile de bază ale fiecăruia sunt aliniate
după linia de bază a primului caracter.
Spaţieri. Acestea sunt atât boxuri orizontale, cât şi boxuri ver-
ticale. Spaţiul orizontal este pentru modul de lucru orizontal
şi cel matematic. Dacă TEX-ul este ı̂n modul vertical de lu-
cru şi ı̂ntâlneşte comanda \hskip, acesta comută ı̂n modul
orizontal ordinar, ca şi cum ar ı̂ntâlni un caracter. Spaţierile
verticale sunt pentru modul vertical de lucru; dacă TEX-ul
ı̂ntâlneşte secvenţa \vskip ı̂n timp ce se află ı̂n modul ori-
zontal ordinar, acesta termină de prelucrat paragraful curent,
iar dacă ı̂ntâlneşte aceeaşi secvenţă ı̂n timp ce se află ı̂n
modul orizontal restrictiv, acesta va semnala un mesaj de
eroare şi ı̂ncearcă să termine de prelucrat secvenţa \hbox din
apropierea secvenţei \vskip.
Pe de altă parte, \kern nu schimbă modul de lucru (acesta
este interpretat ı̂n funcţie de modul curent de lucru). Spre
BOXURI 85

deosebire de alte tipuri de materiale, spaţierile au o singură


dimensiune: lăţime – pentru spaţierea orizontală şi ı̂nălţime –
pentru spaţierea verticală. Aceasta ı̂nseamnă că spaţierea ı̂n
interiorul unui box orizontal nu afectează ı̂nălţimea şi adânci-
mea iar spaţierea ı̂n interiorul unui box vertical nu afectează
lăţimea.

Linii. Acestea sunt de tip orizontal şi vertical şi sunt utilizate ı̂n
modul vertical şi orizontal de lucru. Astfel, TEX-ul trece ı̂n
modul vertical de lucru dacă nu se află deja ı̂n acest mod când
ı̂ntâlneşte secvenţa \hrule. Invers, secvenţa \vrule plasează
procesorul TEX ı̂n modul orizontal de lucru, iar boxurile ce
urmează sunt ı̂nşiruite pe orizontală (lipite unul de altul).

Boxuri explicite. Şi acestea sunt de tip orizontal şi de tip ver-
tical; fiecare tip poate să apară ı̂n fiecare mod de lucru. În
interiorul unui box, modul de lucru este schimbat conform
contextului, dar odată boxul terminat, modul de lucru revine
la cel precedent.

Formule matematice. Sunt construcţii speciale, obţinute din


materialul care este ı̂nconjurat de simbolul $. Procesorul
va ı̂ncepe un nou paragraf dacă ı̂ntâlneşte un simbol $ şi
(concomitent) se află ı̂n modul vertical de lucru. Materialul
ı̂nconjurat de doi $$ de-o parte şi de alta este tratat ı̂ntr-un
mod mai special (vezi § 1.5).

Exemplul 6.1. Cum prelucrează TEX-ul o secvenţă \vtop care,


pe lângă boxuri, conţine şi caractere? Secvenţa următoare:
\vtop{\box2 Paragraf \box3\box4} va produce
........

Paragraf ................ Figura 6.4.


86 Capitolul 6

Să analizăm mai amănunţit modul ı̂n care a prelucrat pro-


cesorul secvenţa de mai sus. Când ı̂ncepe procesarea secvenţei
\vtop, acesta este ı̂n modul vertical de lucru. Trecând la analiza
materialului dintre acolade, prima dată ı̂ntâlneşte \box2, pe care
ı̂l stochează ı̂n memoria sa de lucru, plasând-ul ı̂n partea cea mai
de sus a stivei pe care o construieşte. În continuare ı̂ntâlneşte
caracterul ’U’. Acesta face ca procesorul să comute ı̂n modul ori-
zontal de lucru. Astfel ı̂ncepe construcţia unui paragraf care se va
ı̂ncheia atunci când TEX-ul va ı̂ntâlni acolada }. Noul paragraf va
fi plasat sub \box2 şi aliniat la stânga, după cum se poate vedea
mai sus.
Comparaţi rezultatul procesării secvenţelor
\vtop{\hsize=.8in\box2 Paragraf\par\box3\box4}
\vtop{\box2\hbox{Paragraf}\box3\box4}
cu cel din Figura 6.4. În Figura 6.5 de mai jos este ilustrat rezul-
tatul procesării secvenţelor
\ \box2\ Cuvinte\ \box3\ ı̂ntre\ \box4\ boxuri\ \box5
care, ı̂n fişierul sursă (*.tex), fac obiectul unui paragraf.

........ Cuvinte ........ ı̂ntre ........ boxuri ........

Figura 6.5.
Observaţia 6.1. Utilizarea caracterelor ’\ ’ ca prime elemente
ale secvenţei de mai sus a produs trecerea procesorului din modul
vertical ı̂n modul orizontal de lucru (vezi § 4.1).

6.3 Operaţii cu boxuri


Asignarea unui box. Boxurile sunt construite mai ı̂ntâi de către
utilizator, ca apoi să fie ı̂nserate ı̂n cadrul materialului, ı̂n locul ı̂n
BOXURI 87

care se doreşte apariţia sa. Secvenţa de control cu ajutorul căreia


poate fi construit un box este \setboxi, unde ’i’ este un ı̂ntreg
pozitiv, 0 ≤i≤ 255. Iată câteva exemple:
\setbox1=\hbox{...}
\setbox19=\vbox{...}.
Comanda \setboxi spune TEX-ului să memoreze materialul
“...” dintre acolade ı̂n locaţia de memorie ‘i’ (1 respectiv 19, ı̂n
exemplul de mai sus), locaţii gestionate de procesorul plain TEX.
Când un box este creat, acesta nu apare ı̂n documentul final
(fişierul *.dvi); el este utilizat numai când se foloseşte secvenţa
\boxi.
O asignare \setbox are efect numai ı̂n cadrul grupului ı̂n
care este folosită (dacă aceasta nu este precedată de parametrul
\global).
Plain TEXul permite definirea de nume noi pentru boxuri (ı̂n
locul numerelor). Acest lucru se realizează cu secvenţa \newbox.
Exemplul următor defineşte şi asignează boxul cu numele \dodu:
\newbox\dodu
\setbox\dodu=\hbox{$\vcenter{...}$}.
Utilizarea conţinutului unui box. Pe lângă comanda \box din
paragraful de mai sus, mai sunt şi alte comenzi pentru utilizarea
conţinutului unui box, şi anume:
\copy, \unhbox, \unvbox, \unhcopy, \unvcopy.
Când se foloseşte secvenţa \box3, procesorul scrie conţinutul
locaţiei de memorie cu numărul 3 ı̂n locul unde apare această
secvenţă. În plus, şterge boxul \box3 (ı̂n general), iar conţinutul
acestuia este pierdut. Dacă se doreşte utilizarea conţinutului box-
ului \box3 fără a fi şters, atunci trebuie folosită secvenţa \copy3.
Motivul pentru care secvenţa \box3 operează ı̂n felul acesta este
economia de memorie.
88 Capitolul 6

Procesorul plain TEX nu divide conţinutul unui bloc. Pentru


exemplificare, analizaţi efectul prelucrării secvenţelor a) şi b) de
mai jos (valoarea parametrului \hsize este 10cm):
\newbox\fem
a) \setbox\fem=\hbox{is included in H 1 }
\parindent=0pt
A finite elements is conf orming if the space of approximation
\box\fem
b) \setbox\fem=\hbox{is included in H 1 }
\parindent=0pt
A finite elements is conf orming if the space of approximation
\unhbox\fem
În cazul b), conţinutul boxului \fem nu mai este privit de
procesor ca un box, datorită utilizării secvenţei \unhbox. Astfel,
o rupere a materialului poate fi făcută ı̂ntre două cuvinte, ceea ce
nu se poate ı̂n cazul a).
Comanda \unvbox operează ı̂n acelaşi mod precum \unhbox,
dar este folosită pentru boxuri verticale (cele create cu \vbox
sau \vtop). Ca şi \box, secvenţele \unhbox şi \unvbox şterg
conţinutul boxului după utilizare. Comenzile \unhcopy şi
\unvcopy anulează caracterul de box al unui box, fără ştergerea
conţinutului acestuia.
Observaţia 6.2. Câteva sugestii de utilizare a secvenţelor de
control destinate utilizării blocurilor:
(i) folosirea secvenţei \box, când se doreşte utilizarea conţinutului
boxului o singură dată.
(ii) folosirea secvenţelor \unhbox şi \unvbox, pentru prelucrări
mai flexibile.
(iii) folosirea secvenţelor \unhcopy sau \unvcopy, când se doreşte
utilizarea conţinutului boxului de mai multe ori.
BOXURI 89

Translarea pe verticală şi pe orizontală. Se poate ı̂ntâmpla


ca alinierea boxurilor pe orizontală, cu ajutorul propriilor linii de
bază, să nu se facă suficient de bine, dorindu-se astfel mişcarea
fiecăruia ı̂n sus sau ı̂n jos, ı̂n raport cu propria linie de bază. Box-
urile verticale pot fi aranjate altfel decât o face implicit procesorul.

A. Translarea pe verticală. Comenzile \raise şi \lower per-


mit utilizatorului mişcarea unui box ı̂n raport cu propria linie de
bază. De reţinut că acestea sunt permise numai ı̂n modul orizontal
de lucru (atunci când procesorul scrie boxurile unul lângă altul).
Să urmărim efectul comenzii \raise pe baza exemplului următor:

\raise 6pt\box3.

Rezultatul prelucrării secvenţelor de mai sus constă ı̂n ridi-


carea pe verticală a boxului \box3 cu 6pt, ı̂nainte ca acesta să
fie adăugat la paragraful sau \hbox-ul de care aparţine. Este ca
şi cum linia de bază a boxului \box3 a fost coborâtă cu 6pt faţă
de conţinutul acestuia. Înălţimea boxului \box3 a crescut cu 6pt,
ı̂n timp ce adâncimea s-a diminuat cu aceeaşi valoare. Comanda
\raise trebuie să fie urmată de o dimensiune şi apoi de un box
de orice tip, creat pe loc sau recuperat dintr-o locaţie de me-
morie gestionată de procesor (vezi asignarea unui box). În orice
alt context, nu va fi funcţională. De exemplu, secvenţa \raise
6pt{\vbox{...}} va da o eroare; acoladele din jurul secvenţei \vbox
sunt incorecte! În Figura 6.6 de mai jos sunt aliniate ı̂n partea
de sus boxurile \box2, \box3 şi \box4, care au aceeaşi ı̂nălţime şi
adâncime, egale cu: 7mm, 5mm şi 10mm, respectiv. Şirul de secvenţe
de control cu care s-a obţinut această aliniere este următorul:

\hbox{\$rightarrow$\raise -4mm\copy2\copy3
\raise -8mm\copy4}
90 Capitolul 6

........
........
→ ........ Figura 6.6.

........
........
........
→ Figura 6.60 .

Analizaţi Figura 6.60 , care ilustrează rezultatul procesării a-


celuiaşi şir de secvenţe de mai sus, din care s-au eliminat secvenţele
\raise.
Ca efect, comanda \lower este opusul comenzii \raise. De
exemplu, comanda \raise -1in\box9 are acelaşi efect cu co-
manda \lower 1in\box9.

B. Translarea pe orizontală. După cum am văzut ı̂n para-


graful de mai sus, comenzile \raise şi \lower lucrează numai ı̂n
modul orizontal de lucru. Acestea au un echivalent pentru modul
vertical de lucru, şi anume: se poate mişca un box la stânga sau la
dreapta pe orizontală, utilizând următoarele secvenţe de control:
\moveleft şi \moveright, respectiv.

Încadrarea şi divizarea unui box. Pentru a ı̂ncadra con-


ţinutul unui box cu linii, utilizatorul are la dispoziţie macroul
\boxit{2pt} {...}; acesta va ı̂ncadra printr-o linie frântă ı̂nchisă
materialul indicat prin “...”, linie trasată la o distanţă de 2pt faţă
de fiecare latură a cadrurii. Valorile celor doi parametri sunt vari-
abile, cel de-al doilea parametru fiind un box. Definiţia macroului
\boxit este următoarea:
BOXURI 91

\def\boxit#1#2{\hbox{\vrule
\vtop{%
\vbox{\hrule\kern#1%
\hbox{\kern#1#2\kern#1}}%
\kern#1\hrule}%
\vrule}}
Exemplu 6.2. Considerăm box-ul 8 setat astfel: \setbox8=
\hbox{\bf\TeX}. Rezultatul prelucrării secvenţelor:
\boxit{2pt}{\copy8}
\boxit{2pt}{\boxit {2pt}{\copy8}}
este ilustrat ı̂n Figura 6.7.

TEX TEX Figura 6.7.

Conţinutul unui box poate fi scris pe două coloane. În vede-


rea realizării acestui lucru, procesorul TEX dispune de secvenţa de
control \vsplit. Pentru a ilustra modul de utilizare a comenzii
\vsplit, considerăm că boxul 2 este asignat astfel:
\setbox2=\vbox{\eightrm
\hsize 4cm\parindent= 0pt\baselineskip=10pt
A finite ...
}
Divizăm conţinutul boxului 2 ı̂n două, prima jumătate me-
morând-o ı̂n boxul 1, folosind secvenţa:
\setbox1=\vsplit2 to 2cm.
Figura 6.8 ilustrează conţinutul celor două boxuri (box1 şi
box2), rezultat al prelucrării secvenţei:

\centerline{\boxit{3pt}{\copy1}\hfil
\boxit{3pt}{\copy2}}
92 Capitolul 6

A finite element is conforming


if the space of approximation is ment on triangles (tetrahedra).
included in H 1 (in practice con- An element is said to be lagran-
tinuous functions). The most gian if it uses only value of func-
frequently used finite element in tions at nodes and no derivati-
this book is P 1 conforming ele- ves.

Figura 6.8.

6.4 Dimensiunile unui box


Putem referi dimensiunile unui box (care este memorat ı̂n-
tr-o locaţie de memorie) folosind secvenţele: \ht, \dp şi \wd,
urmate de numărul sau numele boxului. De exemplu, pentru a
face ca ı̂nălţimea boxului 2 să apară pe ecran, trebuie scrisă ı̂n
fişierul sursă comanda \showthe\wd2; TEX-ul se va opri ı̂n punctul
ı̂n care ı̂ntâlneşte această comandă, va afişa valoarea parametrului
(precedată de simbolul >) iar apoi, pe o nouă linie a ecranului, va
aştepta introducerea, de către utilizator, a simbolului ’CR’ pentru
a continua procesarea. Pentru a putea referi dimensiunile unui
box, acesta trebuie mai ı̂ntâi asignat.
Implicit, dimensiunile unui box sunt determinate ı̂n funcţie
de conţinutul său. Amintim pe scurt modul de stabilire a dimen-
siunilor boxurilor orizontale şi verticale:
• Pentru un box orizontal, ı̂nălţimea şi adâncimea sunt ı̂nălţi-
mea maximă şi adâncimea maximă a boxurilor care ı̂l alcătu-
iesc. Lăţimea este suma lăţimilor boxurilor care ı̂l alcătuiesc,
la care se adună spaţiile (dacă există).
• Pentru un box vertical, lăţimea este lăţimea maximă a bo-
xurilor care ı̂l alcătuiesc. Dimensiunea verticală totală este
suma ı̂nălţimilor şi adâncimilor boxurilor care ı̂l alcătuiesc,
la care se adună spaţiile (dacă există).
Observaţia 6.3. Dacă un box vertical constă ı̂ntr-un singur ca-
racter, procesorul TEX va crea o linie de lungime \hsize, având
BOXURI 93

drept conţinut acest caracter. Altfel spus, un box vertical va avea


lăţimea cel puţin egală cu valoarea parametrului \hsize. Când
se scrie textul direct ı̂ntr-un box vertical, este indicat să se fixeze
dinainte valoarea parametrului \hsize, de exemplu:
\vbox{\hsize=2.4in ...}.
În funcţie de tipul boxului, se poate impune o restricţie asu-
pra uneia dintre dimensiuni, ı̂ncât să aibă o valoare fixă. Secvenţa
\hbox to 2in{...} va genera un box orizontal de lăţime 2in. Pen-
tru a satisface restricţia, procesorul va extinde sau comprima
spaţiul care (poate) există ı̂n box. Dacă prin această operaţie
este depăşită elasticitatea disponibilă, un mesaj de eroare va fi
semnalat de către procesor (“overfull box” sau “underfull box”).
Pentru a folosi conţinutul unui box asignat ı̂n interiorul al-
tui box, a cărui dimensiune este predefinită, sunt foarte indicate
comenzile: \unvbox şi \unhbox. Analizaţi exemplele următoare şi
rezultatele procesării acestora.
\setbox11=\hbox{The result of}
$|$\copy11$|$ |The result of|
$|$\hbox to 1.1in\{copy11}$|$ |The result of |
$|$\hbox to 1.1in\{unhbox11}$|$ |The result of|
Folosind construcţia to (ca ı̂n exemplul de mai sus), se pot
crea boxuri diferite cu aceeaşi dimensiune. De exemplu, pentru a
crea un box cu aceeaşi ı̂nălţime ca boxul 5, se poate folosi secvenţa:
\setbox6=\vbox to \ht5{...}.

6.5 Spaţii ı̂ntre boxuri


După cum am văzut la ı̂nceputul acestui capitol, procesorul
plain TEX adaugă un anumit spaţiu ı̂ntre elementele unui box,
la generarea acestuia. Trei variabile controlează această operaţie:
\baselineskip, \lineskip şi \lineskiplimit. Prima variabilă
este setată de plain TEX la 12pt.
94 Capitolul 6

Dacă dintre două boxuri alăturate, primul este prea adânc


sau al doilea este prea ı̂nalt, atunci cele două boxuri ar urma să
fie aranjate foarte aproape unul de altul. În acest caz plain TEX-ul
separă totuşi boxurile, cu o valoare dată de variabila \lineskip
(implicit, aceasta are valoarea 1pt). Când două boxuri sunt con-
siderate foarte aproape? Pragul este valoarea variabilei \line-
skiplimit care, ı̂n plain TEX, este implicit 0pt. Figura 6.9 ilus-
trează cele spuse mai sus.
............. .............
................ ................

.............. ..............

Figura 6.9.
Valorile celor trei variabile, pentru partea din stânga şi pen-
tru partea din dreapta din figura de mai sus, au fost, respectiv:
\baselineskip=5mm \baselineskip=0mm
\lineskip=3mm \lineskip=2mm
\lineskiplimit=0mm\lineskiplimit=0mm
Înălţimile celor trei boxuri sunt: 2, 2 şi 4mm, iar adâncimile
sunt toate egale cu 2mm. În exemplul din stânga, primele două
boxuri sunt separate cu 1 = 5 − (2 + 2)mm de spaţiu. Acesta
este acceptabil deoarece nu este mai mic decât valoarea variabilei
\lineskiplimit. Efectuând acelaşi calcul pentru ultimele două
boxuri, obţinem -1mm, valoare care este mai mică decât valoarea
variabilei \lineskiplimit; deoarece procesorul nu poate respecta
variabila \lineskiplimit, va insera ı̂ntre cele două boxuri un
spaţiu de 3mm (valoarea variabilei \lineskip).
Pentru exemplul din dreapta, \baselineskip este zero, ı̂ncât
nu va putea fi respectată niciodată valoarea variabilei
\lineskiplimit. În consecinţă, procesorul va insera ı̂ntre boxuri
un spaţiu de 2mm (valoarea variabilei \lineskip).
BOXURI 95

Observaţia 6.4. (i) Pentru a realiza o spaţiere dublă ı̂ntre liniile


unui document, poate fi utilizată următoarea comandă:
\baselineskip=2\baselineskip.
(ii) Adesea se doreşte eliminarea spaţiilor dintre două boxuri.
Acest lucru se poate realiza prin inserarea comenzii
\nointerlineskip ı̂ntre cele două boxuri. Pentru eliminarea tu-
turor spaţiilor dintr-un box, se poate utiliza comanda
\offinterlineskip.

6.6 Linii
Liniile sunt boxuri umplute cu negru. Ele pot fi create cu
ajutorul următoarelor comenzi:
\hrule height n1 depth n2 width n3
\vrule height m1 depth m2 width m3
unde n1 , n1 , n3 , m1 , m2 , m3 sunt ı̂ntregi pozitivi, reprezentând:
ı̂nălţimea, adâncimea şi lungimea liniei. Oricare dintre argumente
poate lipsi şi poate fi utilizat ı̂n orice ordine. Procesorul re-
cunoaşte aşadar două tipuri de linii: orizontale (\hrule) şi verti-
cale
(\vrule). După cum vom vedea ı̂n continuare, secvenţa \hrule
poate trasa o linie verticală, şi viceversa. Distincţia esenţială din-
tre cele două secvenţe este aceea că \hrule se poate folosi numai
ı̂n modul vertical de lucru, iar \vrule numai ı̂n modul orizontal
de lucru.
Linii orizontale. Comanda \hrule se poate utiliza ı̂ntre para-
grafe sau ı̂n interiorul unui box vertical. Dacă se ı̂ncearcă folosirea
acestei secvenţe ı̂n interiorul unui paragraf, procesorul TEX va
ı̂ncheia prelucrarea paragrafului şi va trece ı̂n modul vertical de
lucru. În plus, dacă procesorul s-ar afla ı̂n modul orizontal restric-
tiv (echivalent cu prezenţa unei comenzi \hrule ı̂n interiorul unui
\hbox), atunci acesta va semnala o eroare.
96 Capitolul 6

Implicit, argumentele height şi depth au, respectiv, valorile:


.4pt şi 0pt. Lipsa tuturor argumentelor are drept efect trasarea
unei linii, a cărei lungime este egală cu valoarea parametrului
\hsize; adică, prelucrarea secvenţei \hrule conduce la trasarea
următoarei linii:
Linii verticale. Secvenţa \vrule poate fi utilizată oricând, ı̂n
modul orizontal de lucru; de exemplu:
\hbox{\vrule height 7pt depth 5pt width 3pt} . . . . . . . . . .
\hbox{\vrule height .4pt depth 0pt width 1cm} . . .
Dacă argumentul width (lungime) este absent din comanda
\vrule, procesorul va folosi valoarea implicită a acestuia (.4pt).
Dacă height şi depth sunt absente, atunci procesorul va folosi
valorile celui mai apropiat box orizontal. De exemplu, următoarele
linii verticale: s-au obţinut prin procesarea şirului de
secvenţe:
\hbox{\vrule height 8pt depth 0pt\quad
\vrule height 0pt depth 5pt\quad
\vrule width 4pt}
CAPITOLUL 7. REALIZAREA TABELELOR

Primul pas ı̂n realizarea unui tabel este descompunerea aces-


tuia ı̂n componente. De cele mai multe ori, tabelul este format
din şiruri (liniile unei matrici), fiecare şir (linie) având un anu-
mit număr de intrări; intrările corespunzătoare fiecărei linii sunt
aliniate vertical (pe coloane) şi riguros legate, atât logic cât şi
tipografic. Iată două exemple:

name type value


x integer 1998
y real 3.9998
z boolean false
sau
name type value
x integer 1998

y real 3.9998

z boolean false

Structura unui tabel se poate da cu ajutorul comenzii \halign, a


cărei formă generală este:
98 Capitolul 7

\halign {...#...&...#...&...#...&...#...&...#...\cr
....... & ....... & ....... & ....... & .......\cr
....... & ....... & ....... & ....... & .......\cr
........................................................
....... & ....... & ....... & ....... & .......\cr
}
Materialul din interiorul acoladelor, de după secvenţa de con-
trol \halign, este ı̂mpărţit ı̂n linii, fiecare terminată prin \cr;
intrările din interiorul fiecărei linii sunt separate prin caracterul
&. Prima linie din \halign se numeşte preambul şi ı̂i comunică
procesorului TEX cum trebuie construite liniile utile ale tabelului.

7.1 Alinieri simple


Prin aliniere simplă ı̂nţelegem o aliniere ı̂n care nu sunt fo-
losite liniile continue (neı̂ntrerupte) pentru separarea şirurilor şi
coloanelor. De exemplu, cu ajutorul secvenţei:
\halign { # & # & # \cr
name & type & value & \cr
$x$ & integer & 1998 & \cr
$y$ & real & 3.9188 & \cr
$z$ & boolean & false & \cr
}
se obţine următoarea aliniere simplă:
name type value
x integer 1998
y real 3.9998
z boolean false

Să remarcăm că, ı̂n scrierea secvenţei de mai sus, chiar dacă
ı̂ntre cuvintele name şi type am lăsat spaţiu explicit, procesorul TEX
face oricum acest lucru.
ALINIERI (Tabele) 99

Pentru a face tabelul precedent mai lizibil, vom introduce


câteva secvenţe \quad (\quad≡ \hskip 1em) ı̂n preambul, de ex-
emplu:
a) cu ajutorul secvenţei:
\halign { # &\quad \it# &\quad # \cr
name & type & value & \cr
$x$ & integer & 1998 & \cr
$y$ & real & 3.9188 & \cr
$z$ & boolean & false & \cr
}
se obţine următoarea aliniere simplă:
name type value
x integer 1998
y real 3.9998
z boolean false

sau
b) utilizând secvenţa:
\halign {\hfil #\hfil & \quad \it#\hfil& \hfil\quad#
\cr
\bf name & \bf type & \bf value & \cr
$x$ & integer & 1998 & \cr
$y$ & real & 3.9188 & \cr
$z$ & boolean & false & \cr
}
se obţine următoarea aliniere simplă:
name type value
x integer 1998
y real 3.9998
z boolean false
100 Capitolul 7

În cele ce urmează, ı̂ntrucât vom folosi frecvent secvenţa


\hfil\quad, corespunzător acesteia introducem următoarea defi-
niţie nouă:

\def\hfq{\hfil\quad} (7.1)

Observaţia 7.1. Comanda \halign poate fi folosită doar ı̂n


modul vertical de lucru, deoarece aceasta creează o stivă de boxuri
orizontale (liniile). De obicei, când clădeşte stiva de boxuri, pro-
cesorul adaugă spaţiu ı̂ntre liniile tabelului (precum construieşte
liniile (boxurile) unui paragraf). De asemenea, procesorul poate
ı̂mpărţi sau rupe (\break) stiva ı̂ntre pagini, dacă acesta lucrează
ı̂n modul vertical ordinar.

7.2 Cazuri speciale de alinieri


7.2.1 Scurtarea preambulului
Presupunem că avem de prelucrat următorul text:
Values of n: 0 1 2 3 4 5 6 7 8 9
Values of n2 : 0 1 4 9 16 25 36 49 64 81
Observăm că coloanele tabelului de mai sus (mai puţin pri-
ma) sunt generate conform modelului \hfil #\quad. Pentru a
evita scrierea de 10 ori a aceleiaşi secvenţe, putem folosi o scriere
mai simplă a preambulului, şi anume:
\halign{#\hfil \quad & & \hfil #\quad\cr
Values of $n$: & 0& 1& 2& 3& 4& 5& 6& 7& 8& 9& \cr
Values of $n∧ 2$:& 0& 1& 4& 9& 16& 25& 36& 49& 64& 81&\cr}
În general, caracterele # şi & trebuie scrise alternativ ı̂n
preambul, caracterul # precedând primul caracter &. În definiţia
scurtă a preambulului, se scrie un caracter &, exact după un alt
caracter &, ceea ce implică repetarea părţii rămase din preambul,
ALINIERI (Tabele) 101

de câte ori este necesar (ı̂n vederea tratării tuturor coloanelor din
tabel). Un preambul de forma:
A & & B\cr (7.2)
unde, ı̂n mod normal, caracterele # şi & alternează ı̂n interiorul
lui A şi B, este echivalent cu următoarea ı̂nşiruire:
A & B & B & B ...\cr.
Similar stau lucrurile pentru un preambul de forma &B\cr.
Comparând cu exemplul de mai sus, elementele A şi B din relaţia
(7.2) corespund următoarelor asignări: A:=#\hfil\quad iar
B:=\hfil #\quad.

7.2.2 Intrări vide


Dacă ı̂ntr-un şir mai multe coloane sunt vide, atunci secvenţa
ce trebuie scrisă ı̂n “fişierul sursă” revine la o ı̂nşiruire de caractere
&, ı̂ncheiate cu secvenţa \cr. În această situaţie, se poate renunţa
la scrierea şirului de &, scriind pur şi simplu secvenţa \cr. De
exemplu, construcţia următoare:
\halign{ $#$&& \hfil\quad$#$ \cr
1 \cr
1 & 2 \cr
1 & 2 & 3 \cr
1 & 2 & 3 & 4 \cr
1 & 20 & 30 & 4 & 5 \cr}
conduce la următoarea aliniere:
1
1 2
1 2 3
1 2 3 4
1 20 30 4 5
102 Capitolul 7

7.2.3 Inserarea de text (material) ı̂ntre linii


Construcţia următoare ...\cr\noalign {...} (unde, ı̂ntre aco-
lade poate fi scris orice “material” permis ı̂n modul vertical de
lucru), inserează acest material dintre acolade, ı̂ntre liniile tabelu-
lui, fără aliniere. Putem avea câteva secvenţe de control \noalign,
una după alta, dar ele trebuie să ı̂nceapă imediat după secvenţa
\cr, care ı̂ncheie linia precedentă; altfel, secvenţa \noalign nu
este luată ı̂n seamă. Pentru exemplificare, reluăm tabelul din
§7.1, pe care ı̂l ı̂mbunătăţim astfel:
\halign{ \hfil$#$ \hfil& \quad \it # \quad \hfil &
\hfil\quad # \cr
\noalign{\hrule \smallskip}
\bf name & \bf type & \bf value \cr
\noalign {\smallskip \hrule\smallskip}
x & integer & 1998 \cr
y & real & 3.9988 \cr
z & boolean & false \cr
\noalign {\smallskip \hrule}}
Procesarea construcţiei de mai sus conduce la obţinerea următo-
rului tabel:
name type value
x integer 1998
y real 3.9988
z boolean false

Secvenţa \smallskip este necesară ı̂n construcţia de mai sus,


deoarece procesorul nu adaugă spaţiu ı̂nainte şi după o linie conti-
nuă. Secvenţa \hrule are lungimea egală cu lungimea tabelului,
deoarece nu am specificat explicit lungimea acesteia (vezi §6.6).
ALINIERI (Tabele) 103

7.3 Linii verticale


Continuăm cu ı̂mbunătăţirea tabelului obţinut ı̂n paragraful
§7.2.3. Următoarea construcţie:
\hskip 1in{ \vbox {\offinterlineskip
\halign{\strut #&\vrule#\quad&
\hfil$#$ \hfil&
\quad\vrule #\quad &
\it#\hfil &
\quad\vrule#\quad&
\hfil#&
\quad\vrule#\cr
\noalign{\hrule}
&&\bf name&&\bf type&&\bf value& \cr
\noalign{\hrule}
&& x && integer && 1998 &\cr
&& y && real && 3.9988 &\cr
&& z && boolean && false &\cr
\noalign{\hrule}}}}
conduce la tabelul:
name type value
x integer 1998
y real 3.9988
z boolean false
ı̂n care am folosit secvenţa \offinterlineskip (aceasta inhibă
adăugarea de spaţiu ı̂ntre linii) şi macroul \strut (este plasat ı̂n
locul preambulului şi produce o linie invizibilă). Parametrii liniei
invizibile (generată de macroul \strut) au următoarele valori:
width=0pt, height=85pt iar depth=3.5pt.
104 Capitolul 7

7.4 Alinieri verticale


Pentru a realiza o aliniere verticală, procesorul dispune de
secvenţa de control \valign. De exemplu, pentru a obţine urmă-
toarea aliniere verticală:
aur bar curea
argint bizar
aramă
s-a folosit secvenţa \valign următoare:
\valign{ & \hbox {\strut\quad #}\cr
aur & argint & aramă \cr
bar & bizar \cr
curea \cr}
În cazul comenzii \valign, caracterul & separă intrările ı̂ntr-
o coloană, iar secvenţa \cr separă coloanele. Preambulul lucrează
ı̂n acelaşi fel ca preambulul secvenţei \halign.
Trasarea unei linii verticale la ı̂nceput, ı̂ntre coloane şi la
sfârşitul alinierii de mai sus, se obţine dacă se adaugă (după fiecare
secvenţă de control \cr din construcţia precedentă) secvenţele
\noalign{\vrule}. Rezultatul procesării noii secvenţe \halign
va da următoarea aliniere verticală:
aur bar curea
argint bizar
aramă
CAPITOLUL 8. SCRIEREA MATEMATICĂ

Pentru obţinerea simbolurilor matematice trebuie ca proce-


sorul să fie ı̂n modul matematic de lucru (pentru amănunte asupra
modului matematic de lucru, vezi §1.5). Precizăm că numărul de
utilizări ale simbolului $ ı̂n cadrul unui “fişier sursă” trebuie să fie
par; altfel, cu toate că procesarea poate avea loc, documentul final
nu va avea aspectul dorit. În continuare, ne vom referi la perechi
de simboluri $, mai precis la construcţii de forma: $ material $ sau
$$ material $$.
La ı̂ntâlnirea primului simbol $ (sau a două simboluri $$)
al unei perechi, procesorul TEX comută modul curent de lucru
ı̂n modul matematic de lucru. Întâlnirea celui de-al doilea sim-
bol $ al perechii (sau al celei de-a doua perechi de $$) conduce
la ı̂ncheierea modului matematic de lucru şi revenirea la modul
precedent de lucru. Folosirea ı̂n “fişierul sursă” a unei secvenţe
de forma ...(text)...$ text matematic $...(text)... este echivalent cu a
spune că procesorul se află ı̂n modul text matematic, având drept
efect construirea unei formule matematice şi plasarea acesteia ı̂n
cadrul unei linii de text obişnuite. O secvenţă de forma ... (text)...
$$ text matematic $$ ... (text) ... ne spune că procesorul se află
ı̂n modul display matematic, situaţie ı̂n care va fi construită o
formulă matematică, scrisă pe o singură linie, centrată.
106 Capitolul 8

Exemplul 8.1. Orice expresie matematică, construită ı̂n mani-


era: $$ ... expresie matematică ... $$, are drept rezultat scrierea
ı̂n documentul final a materialului “expresie matematică” pe o sin-
gură linie, egal depărtat de marginea din stânga şi marginea din
dreapta, precum expresia de mai jos:

iv l +1, u>0
(8.1 ) H(u) = u + ϕ(u), ϕ(u) =
2 −1, u < 0.

După cum se poate vedea din exemplul de mai sus, o formulă


scrisă ı̂n modul display, pe lângă faptul că este scrisă centrat pe
o singură linie, este şi distanţată puţin faţă de linia precedentă
şi linia următoare. Această spaţiere este dată de următoarele
variabile ale plain TEX-ului:
\abovedisplayskip=12pt plus 3pt minus 9 pt,
\belowdisplayskip=12pt plus 3pt minus 9 pt.
Observaţia 8.1. (i) Nu trebuie lăsată o linie goală ı̂n “fişierul
sursă”, ı̂nainte de prima grupă de $$ sau după grupa a doua de $$,
dacă nu se doreşte ca materialul care urmează să constituie un nou
paragraf (ı̂n cazul ı̂n care există o asemenea linie, se obţine mai
mult spaţiu ı̂ntre formula matematică şi linia de deasupra acesteia,
iar următoarea linie de după formulă va fi scrisă cu alineat).
(ii) Procesorul TEX nu poate ı̂ncepe prelucrarea unui nou
paragraf, dacă se află ı̂n modul matematic de lucru aşa ı̂ncât, con-
fruntat eventual cu o astfel de tentativă, va bănui că ceva se pe-
trece ı̂n mod eronat şi va ı̂ncheia procesarea formulei ı̂n cauză.
Perechile $...$, respectiv $$...$$, delimitează un grup. În in-
teriorul unui asemenea grup procesorul ignoră toate spaţiile şi CR-
urile.
Exemplul 8.2. Secvenţele următoare:
$\int \Omega f(x)dx$
$\int \Omega f( x ) d x$
SCRIEREA MATEMATICĂ 107

au exact acelaşi efect. Desigur, un spaţiu ı̂ntre caracterele ”int”,


care definesc secvenţa \int, nu este permis.

8.1 Simboluri matematice


Procesorul TEX recunoaşte 8(opt) clase de simboluri şi carac-
tere, ı̂n modul matematic de lucru (vezi [2], p. 154).
1. caractere ordinare 5. delimitatori pentru deschidere
2. operatori unari 6. delimitatori pentru ı̂nchidere
3. operatori binari 7. simboluri de punctuaţie
4. operatori relaţionali 8. caractere ”familie-variabilă”

Clasa a 8-a conţine toate numerele şi literele, micşorate şi


mărite; poartă numele de caractere “familie-variabilă”, deoarece
schimbă fontul ı̂n funcţie de fontul \fam curent. Clasa a 6-a
constă din: ,(virgula), ;(punct şi virgulă) şi \colon (secvenţa
\colon produce ı̂n documentul final simbolul “:”, fără a fi prece-
dat sau urmat de spaţiu). Prezentăm pe larg aceste clase.

Caractere ordinare
Caracterele ordinare constau din: punctul zecimal, literele
greceşti, anumite caractere caligrafice şi o serie de simboluri ma-
tematice:

Literele greceşti mici


α \alpha ι \iota % \varrho
β \beta κ \kappa σ \sigma
γ \gamma λ \lambda ς \varsigma
δ \delta µ \mu τ \tau
 \epsilon ν \nu υ \upsilon
ε \varepsilon ξ \xi φ \phi
ζ \zeta ≤ \o ϕ \varphi
η \eta π \pi χ \chi
108 Capitolul 8

θ \theta $ \varpi ψ \psi


ϑ \vartheta ρ \rho ω \omega

Literele greceşti mari


Γ \Gamma Ξ \Xi Φ \Phi
∆ \Delta Π \Pi Ψ \Psi
Θ \Theta Σ \Sigma Ω \Omega
Λ \Lambda Υ \Upsilon

Alte caractere ordinare


ℵ \aleph 0 \prime ∀ \forall
h̄ \hbar ∅ \emptyset ∃ \exists
ı \imath ∇
√ \nabla ¬ \neg or \lnot
 \jmath \surd [ \flat
` \ell > \top \ \natural
℘ \wp ⊥ \bot ] \sharp
< \Re k \l or \Vert ♣ \clubsuit
Im \Im 6 \angle ♦ \diamondsuit
∂ \partial 4 \triangle ♥ \heartsuit
∞ \infty \ \backslash ♠ \spadesuit

Operatori mari
Operatorii mari se ı̂mpart ı̂n două subclase (ı̂n funcţie de mă-
rime): “mari” (pentru utilizare ı̂n modul matematic “display”), şi
“mai-puţin mari” (pentru utilizare ı̂n modul matematic “text”).

Operatori mari
P T
Σ Q \sum ∩ S \bigcap
Π ` \prod ∪ F \bigcup
q Z \coprod t \bigsqcup
R W
\int ∨ \bigvee
SCRIEREA MATEMATICĂ 109
I
H V
\oint ∧ \bigwedge
J N
L \bigodot ⊗ U \bigotimes
⊕ \bigoplus ] \biguplus

Operatori binari

S Anumiţi operatori binari au echivalent “mare”, cum ar fi ∪


şi . Forma binară este folosită ı̂ntre două litere sau expresii
(A∪B), ı̂n timp ce forma “mare” este folosită numai când există o
expresie,
S ı̂n general cu subscript, urmată de operator, de exemplu,
Ai .
Altă posibilă sursă de confuzie este secvenţa \setminus, care
reprezintă operatorul de scădere a două mulţimi; acelaşi simbol
se obţine cu secvenţa \backslash, dar mărimea spaţiului care le
ı̂nconjoară diferă (X\Y , X \ Y ).

Operatori binari
+ + − − ÷ \div
± \pm ∩ \cap ∨ \vee or \lor
∓ \mp ∪ \cup ∧ \wedge or \land
\ \setminus ] \uplus ⊕ \oplus
· \cdot u \sqcap \ominus
× \times t \sqcup ⊗ \otimes
∗ \ast or ∗ / \trianglelef \oslash
? \star . \triangleright \odot
 \diamond o \wr † \dagger
◦ \circ \bigcirc ‡ \ddagger
• \bullet 4 \bigtriangleup q \amalg
5 \bigtriangledown

Pentru a elimina spaţiul din jurul unui operator binar, tre-


buie utilizate acoladele (secvenţa $u{\circ v}$ generează: u◦v,
ı̂n timp ce secvenţa $u\circ v$ generează: u ◦ v).
110 Capitolul 8

Operatori relaţionali
Procesorul plain TEX dispune de un număr mare de asemenea
operatori. Trebuie remarcat că secvenţele \mid şi \parallel dau
acelaşi simbol cu secvenţele simple | şi \|, ı̂nsă generează mai mult
spaţiu ı̂n jurul lor.

Operatori relaţionali
< < > > = =
≤ \leq or \le ≥ \geq or \ge ≡ \equiv
≺ \prec  \succ ∼ \sim
 \preceq  \succeq ' \simeq
 \ll  \gg  \asymp
⊂ \subset ⊃ \supset ≈ \approx
⊆ \subseteq ⊇ \supseteq ∼
= \cong
v \sqsubseteq w \sqsupseteq ./ \bowtie
∈ \in 3 \ni ∝ \propto
` \vdash a \dashv |= \models
.
^ \smile | \mid = \doteq
_ \frown k \parallel ⊥ \perp

Mulţi dintre aceşti operatori pot fi negaţi, lucru care poate fi


realizat prin precederea secvenţei de control respective cu secvenţa
\not.

Negaţii
6< \not< 6 > \not>
6 ≤ \not\leq 6≥ \not\geq
6 ≺ \not\prec 6  \not\succ
6  \not\preceq 6  \not\succeq
6 ⊂ \not\subset 6 ⊃ \not\supset
6 ⊆ \not\subseteq 6 ⊇ \not\supseteq
6 v \not\sqsubseteq 6 w \not\sqsupseteq
SCRIEREA MATEMATICĂ 111

6= \not<=, \neq, \ne 6≡ \not\equiv


6 ∼ \not\sim 6 \not\simeq
'
6≈ \not\approx ∼
6= \not\cong
∈ / \notin

Săgeţile sunt tipuri speciale de operatori de relaţie. Multe


săgeţi orizontale sunt ı̂ntâlnite sub două mărimi (cele lungi ı̂ncep
cu grupul de litere “long”). Săgeţile verticale pot fi de asemenea
mărite (vezi §8.10).

Săgeţi
← \leftarrow, \gets ←− \longleftarrow
→ \rightarrow, \to −→ \longrightarrow
↔ \leftrightarrow ←→ \longleftrightarrow
⇐ \Leftarrow ⇐= \Longleftarrow
⇒ \Rightarrow =⇒ \Longrightarrow
⇔ \Leftrightarrow ⇐⇒ \Longleftrightarrow
7 → \mapsto 7−→ \longmapsto
←- \hookleftarrow ,→ \hookrightarrow
( \leftharpoonup * \rightharpoonup
) \leftharpoondown + \rightharpoondown
*
) \rightleftharpoons ↑ \uparrow
↓ \downarrow l \updownarrow
⇑ \Uparrow ⇓ \Downarrow
m \Updownarrow % \nearrow
& \searrow . \swarrow
- \nwarrow

Delimitatori la stânga şi la dreapta


Parantezele şi alte simboluri care sunt perechi sunt cunos-
cute sub denumirea de delimitatori şi TEX-ul ı̂i poate face utiliza-
bili ı̂n diferite mărimi (vezi §8.10). Sunt prezentate ı̂n continuare
112 Capitolul 8

secvenţele de control de bază ce pot fi folosite pentru a obţine


delimitatorii.

Delimitatori la stânga şi la dreapta


( ( [ [ or \lbrack b \lfloor
) ) ] ] or \rbrack c \rfloor
h \langle { \{ or \lbrace d \lceil
i \rangle } \} or \rbrace e \rceil

8.2 Fonturi ı̂n modul matematic de lucru


În general, literele din cadrul formulelor matematice sunt
tipărite ı̂n italic. cmmi este numit fontul principal, folosit de TEX
ı̂n modul matematic de lucru. Acesta produce caracterul puţin
mai larg decât ı̂n textul italic (comparaţi m cu m).
După cum am văzut ı̂n Capitolul 1, comenzile de schimbare
a tipului de font: \rm, \bf, \it, \sl şi \tt lucrează ı̂n modul
matematic, dar ultimele trei nu pot fi utilizate pentru scrierea
indicilor şi exponenţilor.
Exemplul 8.3. Modalităţi de utilizare a fonturilor, ı̂n moduri de
lucru diferite:
$Ax={\rm f}$, unde $ {\it x} \in {\bf B}$ . . . Ax = f , unde x ∈ B
Dacă utilizăm \hbox{...} ı̂n modul matematic de lucru, proce-
sarea acestei secvenţe conduce la trecerea ı̂n modul orizontal de
lucru ı̂n interiorul acoladelor şi, ı̂n consecinţă, revenirea la fontul
de dinaintea simbolului $.
Exemplul 8.4. Folosirea secvenţei \hbox ı̂n modul matematic de
lucru:
XXX {\bf YYY $xx+\hbox{yy}$} . . . . . . . . . . . XXX YYY xx + yy
Iată acum alte câteva secvenţe de control pentru fonturi. Ca
de obicei, acestea afectează toate literele până la sfârşitul grupului
SCRIEREA MATEMATICĂ 113

ı̂n care sunt utilizate. Astfel este indicat să se limiteze acţiunea
acestor secvenţe folosind grupul.
• \mit - această secvenţă poate fi utilizată pentru obţinerea
literelor greceşti mari:
${\mit\Gamma}, \Gamma$ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Γ , Γ
Pentru numere, are acelaşi efect cu secvenţa \oldstyle
• \cal - această secvenţă este utilizată pentru a obţine litere
caligrafice:
${\cal AXZ}$ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . AX Z
Numai literele mari sunt disponibile ı̂n cazul acestei secvenţe.

8.3 Indici şi exponenţi


Pentru a ataşa un exponent sau un indice unui caracter, se
folosesc simbolurile speciale ˆ şi , respectiv. Numai caracterul ce
urmează după simbolul este scris drept indice (sau caracterul ce
urmează dupa simbolul ˆ, ı̂n cazul exponentului). Pentru a ma-
nipula mai multe caractere ı̂n calitate de indici şi/sau exponenţi,
trebuie folosit grupul.
Exemplul 8.5. Comparaţi următoarele rezultate:
(k)
$x k$, $a {i,j}ˆ{(k)}$ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xk , ai,j ,
2
22
$xˆ{2ˆ{2ˆ{2ˆ2}}}$, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x2
Comparaţi ${x k} i$ cu $x {k i}$ (adică: xk i cu xki ).
Atenţie, nu contează ı̂n ce ordine se scriu indicele şi expo-
nentul.
Grupul vid. Este posibilă construirea unui grup vid (adică a
grupului {}), care să posede indici şi exponenţi. Iată două exemple
de astfel de construcţii:
• ı̂naintea unei litere:
114 Capitolul 8

${}ˆ{1998} {\hphantom{0}01}{\rmA}$ . . . . . . . . . . . . . . 1998


01 A

• alinierea indicelui cu exponentul:


$H{} 2ˆ2$ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . H 22
Semnul de derivare. Se obţine cu caracterul special ’. Analizaţi
următoarele două exemple simple de utilizare:
$x’=x+f, x”=x’ˆ2$ . . . . . . . . . . . . . . . . . . . . . . . x0 = x + f, x00 = x02

8.4 Accente ı̂n modul matematic de lucru


Câteva dintre accentele prezentate ı̂n § 1.3 (Accente) pot fi
obţinute ı̂n modul matematic de lucru. Acestea sunt:
â \hat a ǎ \check a ˜a \tilde a
ā \bar a á \acute a ä \ddot a
ȧ \dot a à \grave a ă \breve a
~a \vec a
Aceste accente sunt valabile doar pentru o literă. Pentru a
afecta mai multe litere, avem la dispoziţie secvenţele:
\widehat{.....}, \widetilde{.....}
$\ddot y+f(t)=aˆ7$ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ÿ + f (t) = a7
$\widehat {yxc}$ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . yd
xc

8.5 Spaţierea ı̂n modul matematic de lucru


Prezentăm secvenţele de control cele mai utilizate pentru a
genera spaţii ı̂n interiorul unei formule:
• \quad,\qquad, şi \ (acestea lucrează exact ca ı̂n modul
orizontal de lucru);
• \, este echivalentă cu comanda \thinspace şi produce un
spaţiu mic de lăţime ' 1.5pt (ı̂n mărimea corespunzătoare la
10pt);
SCRIEREA MATEMATICĂ 115

• \!, este echivalentă cu comanda \thinspace şi produce


un spaţiu negativ mic de ' 1.5pt.
Mai pot fi utilizate ı̂n acelaşi scop şi comenzile: \hskip,
\kern, \mskip şi \mkern.
Putem observa, din exemplele de mai sus, că toate carac-
terele sunt scrise automat mai mici, atunci când sunt utilizate
drept indici sau exponenţi. De asemenea, anumiţi operatori sunt
scrişi mai mici ı̂n modul “display matematic” decât ı̂n modul “text
matematic”.
Mărimea tuturor caracterelor este dată de stilul curent. Pro-
cesorul recunoaşte patru astfel de stiluri:
– când procesorul se află ı̂n modul “display matematic” (adică
ı̂ntre o pereche de $$), acesta construieşte materialul respec-
tiv ı̂n stilul “display”. In acest stil, toate caracterele au
mărimea lor maximă, care (exceptând operatorii largi) este,
ı̂n esenţă, mărimea textului ı̂nvecinat.
– când ı̂ntâlneşte simbolul sau ˆ, procesorul comută ı̂n stilul
“script” (pentru a genera caracterele de după şi ˆ); aceste
caractere sunt scrise cu fonturi de dimensiune mai mică.
– dacă procesorul ı̂ncă se află ı̂n stilul “script” şi are de ge-
nerat un indice sau un exponent, atunci ne aflăm ı̂n stilul
“scriptscript”, care va produce caractere şi mai mici.
Exemplul 8.6. Utilizarea celor trei stiluri descrise mai sus:
a) $\varepsilon {n k}$ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . εnk
Z
2
b) $$\int eˆ{−xˆ2}\,dx$$ . . . . . . . . . . . . . . . . . . . . . . . . . . e−x dx

Procesorul plain TEX nu cunoaşte stilul ”scriptscriptscript”.


Amintim că, atunci când procesorul prelucrează materialul din
interiorul unei perechi simple de dolari ($...$), acesta se află ı̂n
stilul “text”. În acest stil, caracterele sunt produse cu aceeaşi
116 Capitolul 8

mărime cu a textului ı̂nvecinat, ı̂nsă operatorii largi nu mai sunt


generaţi cu aceeaşi mărime ca ı̂n stilul “display”.

Exemplul 8.7. a) Comparaţi rezultatul din exemplul 8.6 b) cu


următorul:
R 2
$\int eˆ{−xˆ2}\,dx$ . . . . . . . . . . . . . . . . . . . . . . . . . . . e−x dx

b)
y
$x+{y\over 1+xˆn}$ . . . . . . . . . . . . . . . . . . . . . . . . . . . . x + 1+xn

y
$$x+{y\over 1+xˆn }$$ . . . . . . . . . . . . . . . . . . . . . . . x +
1 + xn
Să facem o scurtă analiză a modurilor de lucru folosite de
procesor ı̂n realizarea expresiilor de la punctul b) de mai sus:

• pentru prima expresie, după primul simbol $, procesorul


comută ı̂n modul “text matematic”, iar apoi ı̂n modul “script
matematic” (pentru a scrie numărătorul şi numitorul fracţiei).
Pe parcursul scrierii numitorului, comută ı̂n modul ”scriptscript”
pentru a scrie exponentul n;
• pentru a doua expresie, după simbolii $$, procesorul co-
mută ı̂n modul “display matematic”, iar apoi ı̂n modul “text
matematic” (pentru a scrie componentele fracţiei). Pe parcur-
sul scrierii numitorului, comută ı̂n modul “script” pentru a scrie
exponentul n.
Putem schimba stilul de lucru ı̂ntr-o formulă, ı̂n orice mo-
ment folosind una din secvenţele de control:
\displaystyle, \textstyle
\scriptstyle, \ scriptscriptstyle

Schimbarea stilului are efect până la sfârşitul grupului curent,


influenţând şi stilul de scriere al: fracţiilor, indicilor, exponenţilor
ş.a.m.d.
SCRIEREA MATEMATICĂ 117

Exemplul 8.8. Diferite moduri de scriere a unor expresii mate-


matice obişnuite. Procesaţi secvenţele din acoladă şi cele din faţa
acoladei şi comparaţi rezultatele.


 $eˆ{\scriptstyle x\over\scriptstyle n}$
$eˆ{x\over n}$ sau

$eˆ{\textstyle{x \over n}}$


 $\displaystyle{ab \over x+y}$
$ ab\over x+y $ sau

$\displaystyle ab\over x+y$

Lista abrevierilor numelor funcţiilor recunoscute de plain


TEX:
\arccos \cos \csc \exp \ker
\limsup \min \sinh \arcsin \cosh
\deg \gcd \lg \ln \pr
\sup \arctan \cot \det \hom
\lim \log \sec \tan \arg
\coth \dim \inf \liminf \max
\sin \tanh

8.6 Fracţii
Fracţiile sunt realizate cu ajutorul secvenţei de control \over
(vezi Exemplul 8.8). Acţiunea comenzii \over se extinde peste cel
mai mic grup care o conţine.
Exemplul 8.9. Grupuri şi acţiunea comenzii \over ı̂n cadrul
acestora. Analizaţi rezultatele procesării următoarelor secvenţe:
x+y
$$x+y \over A-B$$ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A−B
118 Capitolul 8

y
$$x+{y\over A-B}$$ . . . . . . . . . . . . . . . . . . . . . . . . . . x +
A−B
Vezi comentariul de la Exemplul 8.7 asupra modului ı̂n care
procesorul tratează componentele unei fracţii. Exemplul 3.8 din
§3.4 ilustrează diferitele aranjări ale numărătorului unei fracţii
utilizând secvenţa \hfil.
Exemplul 8.10. Fracţii multiple:
\def\dd {\displaystyle}
$$E(x)=a 0+{1\over\dd a 1+
{\mathstrut 1\over \dd a 2+
{\mathstrut 1\over \dd a 3}}}$$

1
E(x) = a0 +
1
a1 +
1
a2 +
a3

În exemplul de mai sus am folosit macroul \mathstrut, re-


cunoscut de plain TEX şi având sarcina de a uniformiza ı̂nălţimea
şi adâncimea expresiilor matematice. Aceşti parametri sunt iden-
tici cu ce ai simbolului “(” (paranteză rotundă), scris cu ajutorul
fontului matematic uzual.

8.7 Stivuirea mai multor obiecte


Comanda \atop este folosită de procesorul plain TEX pen-
tru a stivui mai multe expresii. Aceasta lucrează ı̂n acelaşi mod
precum secvenţa \over, cu deosebirea că nu mai trasează o bară
orizontală.
Exemplul 8.11. Procesarea secvenţei
$$\sum {\textstyle{ i,j\in k\atop i \ne j}} a i b j$$,
SCRIEREA MATEMATICĂ 119

revine la: X
ai bj
i,j∈k
i6=j

Alte stivuiri pot fi obţinute folosind macrourile: \choose,


\brack şi \brace.
Exemplul 8.12. Procesarea secvenţei din partea stângă conduce
la obţinerea vectorului afişat ı̂n marginea din dreapta paginii.

$2n \choose nˆ2$ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2n
n2

8.8 Comanda \mathop


Comandă \mathop este similară cu comanda \sum. Iată un
prim exemplu de utilizare.
Exemplul 8.13. Procesarea secvenţei din partea stângă conduce
la obţinerea stivuirii din marginea dreaptă a paginii:
$$\mathop{ess \, sup} {x\in I} F(x)$$. . . . . . . . . . . . .ess sup F (x)
x∈I

Cu ajutorul acestei comenzi pot fi măriţi operatorii definiţi


de utilizator. De exemplu, după ce s-au făcut noile definiţii:
\font\cmrxvii=cmr17
\def\suma{\ mathop{\hbox{\cmrxvii S}}}
atunci secvenţa următoare de control:
$$\dd\suma {i=0}ˆ{i=N}a i$$
va produce:
i=N
S
i=0
ai

Să remarcăm ı̂n definiţia noii secvenţe de control \suma uti-


lizarea noului font \cmrxvii ı̂n interiorul unui comenzi \hbox
(altfel, acesta nu ar avea efect).
120 Capitolul 8

În vederea economisirii spaţiului alocat de procesor operato-


rilor largi, se poate folosi secvenţa de control \limits, care tre-
buie plasată imediat după operator. Astfel, cantitatea destinată
a fi scrisă drept indice inferior sau/şi indice superior nu va mai fi
locată obişnuit.
Exemplul 8.14. Procesarea secvenţei:
$$\int\limits 0ˆ {f(x)} G(s) ds$$
va produce:
fZ(x) Z f (x)
G(s)ds şi nu! G(s)ds
0
0

8.9 Radicali
Scrierea radicalilor se face cu ajutorul secvenţei de control
\sqrt{... material ...}.
Exemplul 8.15. Procesarea secvenţei:
$\sqrt{x+\sqrt{2+4 \sqrt{x+\sqrt {y}}}}$
s r q

va produce: x+ 2+4 x+ y

Pentru scrierea radicalilor al căror indice este diferit de 2, se


foloseşte secvenţa \root n\of{ ... material ...}. De exemplu:
p
$\root 3\of {x+y+zˆ2}$ . . . . . . . . . . . . . . . . . . . . 3 x + y + z 2
Indicele radicalului este tipărit ı̂n stilul scriptscript. Exem-
plul de mai sus poate fi scris şi astfel:
$\root\scriptstyle 3 \of{x+y+zˆ2}$
sau
SCRIEREA MATEMATICĂ 121

$$\root\scriptstyle 3 \of{x+y+zˆ2}$$. Analizaţi rezul-


tatele procesării celor trei scrieri.

8.10 Simboluri orizontale extinse


Pentru a plasa o bară deasupra unei expresii se utilizează
secvenţa de control \overline{ ... material ...}. Cunoaştem deja
comanda \bar (vezi §8.4) care plasează o bară deasupra primului
caracter care urmează.
Exemplul 8.16. În secvenţa de mai jos s-au folosit secvenţele
\overline şi \bar:
$x=\overline{z+z0 }-\bar a$ . . . . . . . . . . . . . . . . . . . x = z + z 0 − ā
Opusul secvenţei \overline este secvenţa \underline{ ...
material ...}. De exemplu:

$\underline{1+2+\cdots +n}$ . . . . produce . . . . 1 + 2 + · · · + n


Simbolul săgeată se obţine cu ajutorul comenzii \overright-
arrow sau al comenzii \overleftarrow. Există diferenţă ı̂ntre
aceste două comenzi şi comanda \vec. De exemplu:
←−−− ~
$\overleftarrow{A-C}+\vec{XY}$ . . . . produce . . . . A−C+XY
Acolada deasupra, respectiv sub un şir de caractere, se obţine
cu ajutorul următoarelor secvenţe de control: \overbrace şi
\underbrace, respectiv.
Exemplul 8.17. În secvenţele de mai jos se poate observa un
nou tip de stivuire.
z }| {
$nx=\overbrace{x+\cdots +x}$ . . . produce . . . nx = x + · · · + x
$nx=\overbrace{x+\cdots +x}ˆ{n∼ ori}$
n ori
z }| {
produce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . nx = x + · · · + x
122 Capitolul 8

$$\underbrace{\sqrt {{xˆ2+x+1}}} {> 0}$$


p
produce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x2 + x + 1
| {z }
>0

$$\sqrt{\underbrace {xˆ2+x+1} {> 0}}=\sqrt{


\underbrace{(x+{1\over 2 })ˆ2} {> 0}+{3\over 4} > 0}$$
v
s u
u 1 3
produce . . . . . . . . . . . . . . . . . . . . . x2 + x + 1 = u(x + )2 + > 0.
| {z } t
>0 | {z2 } 4
>0

8.11 Simboluri verticale extinse


Toate tipurile de săgeţi verticale şi bare (barele pot fi de
asemenea folosite ca delimitatori), toate tipurile de delimitatori
precum şi câteva alte caractere (cum ar fi / (slash)) pot fi
mărite/măriţi (extinşi). Există două posibilităţi de a mări de-
limitatorii: folosind secvenţa de control \big (cu ajutorul căreia
alegerea mărimii delimitatorului este stabilită de utilizator) şi
folosind secvenţele \left şi \right (caz ı̂n care alegerea mărimii
delimitatorului este făcută de către procesorul TEX.
Adăugând literele l şi r la secvenţa \big, obţinem perechea
“deschis-ı̂nchis”: \bigl, \bigr. În locul secvenţei \big, putem
utiliza de asemenea secvenţele: \Big, \bigg şi \Bigg. De exemplu,
şirul următor de secvenţe:
\Biggl(\biggl( \Bigl(\bigl(() \bigr)\Bigr) \biggr)\Biggr)
 !

produce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ()

Spre deosebire de perechea \left şi \right (care trebuie


folosite ı̂mpreună), nu este obligatoriu ca secvenţa \bigl să fie
’ı̂nchisă’ cu perechea sa \bigr.
Următoarea construcţie:
SCRIEREA MATEMATICĂ 123

\left(... material ... \right)


este tratată de procesor ca un grup.
Exemplul 8.18. Folosirea barelor verticale drept delimitatori.
Şirul de secvenţe:
$$\left(1+{ 1\over x}\right)ˆ2
\left\|{a\over xˆ2-aˆ2}\right\|$$
 2
1 a
produce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 + =
x2 − a2
x
Să remarcăm din exemplul de mai sus că procesorul TEX
măreşte (extinde) delimitatorul după necesităţi (aşa ı̂ncât să cu-
prindă ı̂ntreg materialul de delimitat).
Observaţie. Deoarece secvenţa \left şi perechea sa \right lu-
crează ca un grup, scrierile:
\left(... & ... \right) şi \left(... { ... \right) ... }
sunt ilegale. Este corectă ı̂nsă următoarea combinaţie:
\left( ... \right]
Mai mult, se poate ’ı̂ncheia’ o pereche chiar cu secvenţa \right.
Exemplul 8.19. Rolul secvenţei \right.:
$$P(x)=\left{x\hfill \hbox{for $x<0$}
\atop 2-x\quad \hbox{for $x\ge 0$} \right.$$

x for x < 0
produce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . P (x) =
2 − x for x ≥ 0
Exemplul 8.19 poate fi obţinut mai simplu folosind macroul
\cases, anume:
$$P(x)=\cases{x & for $x<0$\cr
2-x & for $x\ge 0$\cr}$$
124 Capitolul 8

De fapt macroul \cases realizează o aliniere (vezi utilizarea


simbolului &) care poate să conţină oricâte linii, fiecare ı̂ncheiată
cu secvenţa \cr.
Exemplul 8.20. Efectul utilizării delimitatorilor \left[ ...
\right] şi \biggl[ ... \biggr]. Mulţimea de secvenţe:
$$\left[\sum {i=1}ˆn {1\over m+1}\right]
\biggl[\sum {i=1}ˆn 1\over n+1}\biggr]$$
" n # X
n 
X 1 1
produce . . . . . . . . . . . . . . . . . . . . . . . . . . . .
i=1
m+1 i=1
n+1

Dacă la secvenţa \big se adaugă litera m, atunci noua sec-


venţă de control \bigm (precum şi secvenţele: \Bigm, \biggm,
\Biggm) poate fi folosită la mărirea (extinderea) săgeţilor verti-
cale, a barelor şi a simbolului \ (’backslash’).
Exemplul 8.21. Mulţimea de secvenţe:
$$M=\left{x+y\bigm | x \in X, y \in Y \right}$$
$${1\over 1+xˆ2}\biggm/\left(n\over m \right)$$

produce M = x + y x ∈ X, y ∈ Y
 
1 n
1+x 2 m

8.12 Stivuirea simbolurilor


Acest lucru poate fi făcut cu următoarea construcţie:
\buildrel ... material ... \over{ ... }
Dacă secvenţa \over este urmată de un singur caracter sau sec-
venţă de control, atunci acoladele pot lipsi. De exemplu, şirul de
secvenţe:
$$P(x)\buildrel\hbox {def}\over={x\over xˆ2+yˆ2}$$
SCRIEREA MATEMATICĂ 125

produce
def x
P (x) =
x2 + y 2
Macroul \buildrel are următoarea definiţie:
\def\buildrel#1\over#2{
\mathrel{\mathop{\kern 0pt #2}\limitsˆ{#1}}}
Acest macrou poate fi rescris astfel ı̂ncât noua definiţie să
cuprindă o subscripţie şi o superscripţie, anume:
\def\bbuildrel#1 #2ˆ#3{
\mathrel{\mathop{\kern 0pt#1}\limits {#2}ˆ{#3}}}
Şirul următor de secvenţe:
$$u n\bbuildrel\hbox to .5in {\rightarrowfill}
{n\rightarrow \infty}
ˆ{\hbox{\it weak}} 0$$
weak
produce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . un −−−−−→ 0
n→∞
Comanda \mathrel transformă { ... } ı̂ntr-o relaţie astfel
ı̂ncât conţinutul ’...’ va fi spaţiat la dreapta.
Pentru operaţiile matematice ı̂n care apare limita, procesorul
TEX dispune de secvenţele de control: \lim, \limsup şi \liminf.
Următoarele secvenţe
$\lim {x\rightarrow 0 }{f(x)\over x+f(x)}$
$$\lim {x\rightarrow 0 }{f(x)\over x+f(x)}$$
f (x)
produc limx→0 x+f (x)
f (x)
lim
x→0 x + f (x)
126 Capitolul 8

8.13 Generarea mai multor formule matematice


După cum am văzut ı̂n §1.5, pentru a obţine o formulă ma-
tematică centrată ı̂n linie, trebuie să folosim perechea $$ ... $$.
Dacă este nevoie de mai multe formule, una după alta, centrate,
atunci ar trebui să folosim de atâtea ori secvenţa $$ ... $$. Putem
realiza ı̂nsă acelaşi lucru cu ajutorul secvenţei de control \dis-
playlines.
Exemplul 8.22. Secvenţa următoare va genera trei linii centrate
ı̂n documentul final:
$$\displaylines{1+2+3+\cdots+n\cr
1+3+\cdots+2n+1\cr
0+2+\cdots+2n\cr}$$
Se poate utiliza secvenţa \displaylines şi pentru generarea
formulelor matematice care nu ı̂ncap pe o singură linie. Iată un
exemplu ı̂n acest sens.
Exemplul 8.23. Secvenţa următoare:
$$\displaylines {1+x+xˆ2+\cdots+xˆn+
y+yˆ2+\cdots+yˆm+\hfill\cr
\hfill c 1+c 2+\cdots+c m+
\smash{\int 0ˆa {f(x)\over1+xˆ2}dx}\cr}$$
produce

1 + x + x2 + · · · + xn + y + y 2 + · · · + y m + Z a
f (x)
c1 + c2 + · · · + cm + dx
0 1 + x2
Secvenţa de control \smash din Exemplul 8.23 face ca pro-
cesorul plain TEX să ignore valorile implicite ale unei linii pentru
ı̂nălţime şi adâncime şi să aloce spaţiu ı̂n funcţie de dimensiunile
materialului dintre acolade.
SCRIEREA MATEMATICĂ 127

După cum vom vedea puţin mai târziu, distanţa dintre linii
poate fi gestionată de utilizator.

8.14 Alinierea mai multor formule


Aceasta se poate realiza cu ajutorul macroului \egalign. Un
simbol ampersan (&) separă partea stângă şi cea dreaptă a fiecărei
linii iar secvenţa \cr anunţă sfârşitul unei linii. Partea stângă a
uneia sau a mai multor linii din cadrul macroului \eqalign poate
fi vidă. Dacă toate liniile au conţinutul vid ı̂nainte de simbolul &,
atunci toate formulele vor fi aliniate la stânga. Alinierea tuturor
formulelor la dreapta se poate realiza ı̂ntr-un mod similar.
Exemplul 8.24. Secvenţa următoare aliniază cele trei linii după
simbolul ’=’
$$\eqalign{a 1&=1+2+3\cr
a 1+a 2 &=1+2+3+4\cr
a 1+a 2+a 3 &=1+2+3+4+5\cr}$$
după cum se poate constata mai jos.

a1 = 1 + 2 + 3
a1 + a2 = 1 + 2 + 3 + 4
a1 + a2 + a3 = 1 + 2 + 3 + 4 + 5

8.15 Numerotarea formulelor


Numerotarea unei formule matematice se poate realiza cu
ajutorul secvenţei de control \eqno, urmată de o etichetă care
va reprezenta numărul acesteia. Dacă se doreşte ca eticheta să
apară ı̂n stânga formulei, atunci trebuie folosită secvenţa de con-
trol \leqno. Este dat ı̂n continuare câte un exemplu pentru fiecare
situaţie.
128 Capitolul 8

1+a
x1 = (1)
a−b

ex
(2) x2 = α + β −
1−x

Pentru a eticheta mai multe formule, putem combina sec-


venţele de control \eqalign şi \eqno (sau \leqno). De exemplu,
următoarea construcţie:

s1 + s2 = 0
(∗)
xs1 − ys2 = −2
este generată de secvenţa:
$$\left.\eqalign {s 1+s 2 & =0\cr
xs 1-ys 2 &=-2\cr}\right\}\eqno(*)$$
Pentru a eticheta individual una sau mai multe formule, pu-
tem folosi secvenţele \eqalignno sau \leqalignno (pentru scrie-
rea etichetelor ı̂n stânga formulei).
Exemplul 8.25. Secvenţa următoare nu aliniază liniile la stânga
şi etichetează fiecare linie ı̂n dreapta:
$$\eqalignno{s 1+a 1-b 1=0 && (1)\cr
s 1+s 2+a 2-b 2=0 && (2)\cr
s 1+s 2+s 3+a 3-b 3=0 && (3)\cr
\hbox to 2in{\dotfill}&\cr
s 1+s 2+\cdots+s n+a n-b n=0 && (n) \cr}$$
adică

s1 + a1 − b1 = 0 (1)
s1 + s2 + a2 − b2 = 0 (2)
SCRIEREA MATEMATICĂ 129

s1 + s2 + s3 + a3 − b3 = 0 (3)
................................................
s1 + s2 + · · · + sn + an − bn = 0 (n)

Înlocuind ı̂n exemplul de mai sus secvenţa \eqalign cu sec-


venţa \leqalign, toate etichetele vor fi scrise ı̂n partea stângă a
fiecărei ecuaţii.

8.16 Matrici
Macroul \matrix este acela care face posibilă construirea
unei matrici. Simbolul & este utilizat pentru a separa intrările
din fiecare linie iar sfârşitul unei linii este specificat procesorului
de secvenţa \cr. Dacă numărul de simboluri & nu este acelaşi
pentru fiecare linie, atunci numărul de coloane al matricii respec-
tive va fi dat de linia cu cel mai mare număr de simboluri &; acolo
unde este nevoie, matricea va fi completată cu elemente vide.
Matricile sunt un caz particular de alinieri (vezi Capitolul 7).
Tabloul următor reprezintă o matrice cu trei linii şi trei coloane.

x1 x2 x3
x01 x02 x03
x001 x002 x003

Deoarece centrarea intrărilor (elementelor) este realizată prin


adăugarea unui spaţiu mic de către procesor, poate fi utilizată
secvenţa \hfill pentru alinierea la stânga sau la dreapta a coloa-
nelor.
Exemplul 8.26. Matricea următoare:

x1 x2 x3
(∗) x01 x02 x03
x001 x002 x003
130 Capitolul 8

a fost obţinută cu secvenţa:

$$\matrix{\hfill x 1 & x 2\hfill & x 3\cr


\hfill x’ 1 & x’ 2\hfill & x’ 3\cr
\hfill x” 1 & x” 2\hfill & x” 3\cr}\leqno (*)$$

În timp ce secvenţa \matrix creează o matrice fără delimi-


tatori la stânga şi la dreapta, macroul \pmatrix scrie ı̂ntreg ma-
terialul ı̂ntre paranteze rotunde (implicit).

Exemplul 8.27. Dacă ı̂n ”fişierul sursă” introducem următoarea


secvenţă de instrucţiuni:

$$A=\pmatrix{\pmatrix { a & b\cr


c & d \cr} & \bf 0 \cr
\bf 0 & \pmatrix {1 & 2 & 3\cr
0 & 1 & 0\cr
0 & 0 & \mu\cr}\cr}$$
atunci ı̂n documentul final se obţine matricea:
  
a b
 0 
 c d  
A=
 1 2 3 
 0 0 1 0
0 0 µ

Operaţia de centrare a submatricilor se face automat. Tot


automat se centrează şi grupul de caractere “A=”, ı̂n raport cu
mărimea verticală a matricii.
Determinantul unei matrici se obţine prin delimitarea ma-
tricei cu bare verticale; deci cu ajutorul grupului de secvenţe de
control \left| ... \right|.

Exemplul 8.28. Construcţia următoare:


SCRIEREA MATEMATICĂ 131


a11 − λ a12 a13

det(A − λI) = a21 a22 − λ a23

a31 a32 a33 − λ

se obţine cu ajutorul procesorului TEX dacă ı̂n “fişierul sursă” se


scrie secvenţa de control
$$\det(A-\lambda I)=
\left|\matrix{
a {11}-\lambda & a {12}\hfill & a {13}\hfill\cr
a {21}\hfill & a {22}-\lambda & a {23}\hfill\cr
a {31}\hfill & a {32}\hfill & a {33}-\lambda\cr}
\right|$$
Scrierea unui sistem de ecuaţii constituie o altă posibilă uti-
lizare a macroului \matrix. De exemplu, şirul de secvenţe de
control
$$\left{\matrix
{\hfill x &+& 3.002y &-& 45z &=& d 1\cr
-102x &-& \hfill y &+& \hfill z &=& d 2\cr
\hfill -x &+& \hfill 2y &-& \hfill 3z &=& d 3\cr}
\right.\leqno (S)$$
are drept rezultat al procesării următorul sistem de trei ecuaţii cu
trei necunoscute, numerotat la stânga cu (S)


 x + 3.002y − 45z = d1
(S) −102x − y + z = d2

−x + 2y − 3z = d3
132 Capitolul 8

8.17 Ajustarea spaţiului dintre linii


Uneori este nevoie de a mări sau micşora spaţiul dintre lini-
ile unui “display” (o matrice, un sistem etc.) faţă de cel gene-
rat implicit de către procesor. Procesorul TEX dispune ı̂n acest
sens de macrourile: \openup (pentru ’display’-urile generate de
macrourile: \displaylines, \eqalign, \eqalignno şi \leqalig-
nno), \normalbaselineskip, \normallineskip, \normalline-
skiplimit (pentru ’display’-urile generate de \matrix, \pmatrix,
\cases şi alte macrouri). Cât priveşte macroul \openup, amintim
că această secvenţă nu trebuie utilizată ı̂naintea macroului care
realizează alinierea, adică secvenţa următoare este eronată
\openup 4pt \displaylines { ... material ... }
Poate fi utilizată şi o valoare negativă (de exemplu -4pt)
pentru a apropia (restrânge) liniile cât mai mult posibil.
Să urmărim efectul la nivel de grup al acestor variabile ce
ţin de mărimea spaţiului dintre linii. De exemplu, pentru a scrie
ı̂ntr-o matrice liniile separate de un spaţiu egal cu 15pt, atunci
secvenţa de control trebuie să cuprindă (printre altele)
{\normalbaselineskip=15pt \matrix { ... material ... }}

8.18 Separarea a două linii


În vederea generării unui spaţiu ı̂ntre două linii oarecare, a
cărui dimensiune să difere de cea normală (cea generată implicit
de procesor), trebuie introdusă (inserată) ı̂ntre liniile cu pricina
secvenţa de control \noalign{ ... }, secvenţă ce nu trebuie urmată
de \cr; de exemplu, construcţia următoare
$$\eqalign{ ... & ... \cr
\noalign{\medskip}
... & ... \cr}
$$
SCRIEREA MATEMATICĂ 133

face ca două linii (cele vecine secvenţei de control \noalign{ ...


}) să fie distanţate cu 6pt≡\medskip. Pot fi utilizate şi valori
negative.

8.19 Scrierea unei matrici generale


Pentru această scriere este ştiut că trebuie folosit grupul de
trei puncte “...”. Dacă sunt folosite direct, atunci procesorul va
genera aceste puncte foarte apropiate. Se cunosc, de către proce-
sorul TEX, mai multe secvenţe de control care construiesc diferite
tipuri de aranjare a celor trei puncte:
•\dots – scrie cele trei puncte astfel: ...
•\cdots – scrie cele trei puncte astfel: ···
•\vdots şi \ddots – scrie cele trei puncte pe verticală şi pe dia-
gonală, respectiv. De exemplu
$x=(x 1,\dots,x n)$ . . . . . . . . . . produce . . . . . . . . . . x = (x1 , . . . , xm )
$S=x 1+\cdots+x n$ . . . . . . . . produce . . . . . . . . S = x1 + · · · + xn
Exemplul 8.29. Grupul de secvenţe de control
$$A=\pmatrix{
a {11} & a {12} & \cdots & a {1n}\cr
a {21} & a {22} & \cdots & a {2n}\cr
\vdots & \vdots & \ddots & \vdots\cr
a {n1} & a {n2} & \cdots & a {nn}\cr}$$
au drept efect generarea următoarei matrici generale
 
a11 a12 ··· a1n
 a21 a22 ··· a2n 
A=
 ... .. .. .. 
. . . 
an1 an2 · · · ann
.
Aranjarea celor trei puncte sub forma: . . (ascendent, deci)
se poate obţine de utilizator cu ajutorul noii secvenţe
134 Capitolul 8

\defadots{\mathinner{\mkern 2mu\raise 1pt


\hbox{.} \mkern 2mu\raise 4pt \hbox{.}\mkern 2mu
\raise 7pt\hbox {.}\mkern 1mu}}
Şirul de secvenţe
. .. . ..
$\adots\ddots\dots\adots\ddots$ produce .. . . . . .. .

8.20 Diagrame
O diagramă poate fi obţinută prin utilizarea macroului
\diagram, macrou care reprezintă ı̂n fond o variantă a macroului
\matrix. Pentru a simplifica scrierea unei diagrame, procesorul
TEX dispune de macrourile \harr şi \varr. Macroul \harr pro-
duce o săgeată orizontală, orientată spre dreapta, cu lungimea de
1in. Acesta mai dispune de două argumente: primul este plasat
deasupra săgeţii iar celălalt sub săgeată. Prezenţa perechilor de
acolade este obligatorie, chiar dacă conţinutul materialului de pre-
lucrat este vid. Macroul \varr trasează o săgeată verticală, ori-
entată ı̂n jos, şi are aceeaşi sintaxă cu macroul \harr. Diagrama

x⊗yX
H ⊗R −−−−−→ P
 
 
 
u  ṽ 
 
y y

(A0 + B)y −−−−−→ y

este generată de următorul grup de secvenţe


$$\diagram{H\otimes R &
\harr{x\otimes y X} {} & {\cal P}\cr
\varr{u}{\tilde v} && \varr{}{}\cr
SCRIEREA MATEMATICĂ 135

(A’+B)y & \harr{}{} & y \cr}$$


unde macrourile: \diagram, \harr şi \varr au următoarele defi-
niţii:
\def\diagram#1{{\normallineskip=8pt
\normalbaselineskip=0pt \matrix{#1}}}
\def\harr#1#2{\smash{\mathop{
\hbox to .5in{\rightarrowfill}}
\limitsˆ{\scriptstyle#1} {\scriptstyle#2}}}
\def\varr#1#2{\llap{$\scruiptstyle #1$}
\left\downarrow\vcenter to .5in{}
\right. \rlap{$\scriptstyle #2$}}
CAPITOLUL 9. CE ESTE LATEX ?

LATEX (se poate scrie şi LaTEX) este dezvoltat de către Leslie
Lamport pe baza procesorului TEX, definind aşa numitele layout-
uri (LAyout for TEX) standard pentru: cărţi, articole, rapoarte,
scrisori. LaTeX-ul permite ca utilizatorul să se concentreze asupra
organizării logice a unei lucrări lăsând ı̂n seama acestuia operaţia
de formatare a textului (aranjarea ı̂n pagină). Folosind LaTEX-ul
este foarte greu să modificăm aspectul general al documentului,
ı̂n raport cu formatul standard.
Paşii necesari a fi parcurşi pentru a obţine un document pe
hârtie utilizând versiunea LaTEX sunt:
a. Editarea fişierului sursă şi salvarea acestuia pe disc cu una
din extensiile: tex sau ltx;
b. Procesarea fişierului sursă - se face cu următoarea comandă:
latex nume-fişier.tex
Efectul primei procesări constă ı̂n scrierea (generarea) pe disc
a mai multor fişiere:
• nume-fis.aux - este un fişier cu informaţii auxiliare despre en-
tităţile logice din fişierul sursă şi etichetele: \label,
\bibitem. Este folosit de LaTEX la a doua procesare pentru
rezolvarea referinţelor ı̂ncrucişate: \cite, \ref, etc.);
138 Capitolul 9

• nume-fis.toc - conţine toate informaţiile necesare alcătuirii


cuprinsului lucrării. Este generat numai dacă ı̂n fişierul sursă
apare comanda \tableofcontents. Cuprinsul va apărea
efectiv abia la a doua procesare.
• nume-fis.log - conţine eventualele erori ı̂ntâlnite ı̂n proce-
sarea textului precum şi informaţii statistice despre folosirea
resurselor calculatorului.
• nume-fis.dvi - este fişierul ce conţine rezultatul procesării
ı̂ntr-un cod independent de perifericul pe care va fi tipărit
(DeVice Independent).

Pentru documente mai complexe este posibil generarea ı̂n


plus şi a altor fişiere, precum:

• *.log - este asemănător cu .toc şi apare dacă este prezentă


comanda \listoffigures. Când se cere lista figurilor, este
obligatoriu procesarea de două ori a fişierului sursă;
• *.lot - conţine informaţii necesare generării listei de tabele
şi apare ı̂n prezenţa comenzii \listoftables. Ca şi mai
ı̂nainte, este nevoie reprocesarea fişierului sursă pentru a
obţine ı̂n .dvi lista de tabele;
• *.idx - este produs ı̂n prezenţa comenzii \makeindex ı̂n com-
binaţie cu comenzile: \index, \indexentry. Paşii nece-
sari obţinerii efective a indexului ı̂n documentul final vor fi
prezentaţi mai târziu (realizarea indexului).
• *.glo - este produs de comanda \makeglossary. Amănunte
ı̂n realizarea glosarelor.

c. Vizualizarea documentului - se face cu aceeaşi comandă ca şi


ı̂n cazul procesorului TEX. Această comandă foloseşte utili-
tarul dviscr care este capabil să transpună informaţia din
fişierul *.dvi pe ecran.
d. Tipărirea documentului - folosind aceleaşi valori precum ı̂n
cazul procesorului TEX.
CE ESTE LATEX ? 139

Observaţie. Reţinem până acum că dacă apar referinţe


ı̂ncrucişate sau se doreşte scrierea automată a: cuprisului, listei
de figuri sau tabele, a unui index şi a unui glosar, atunci fişierul
sursă trebuie procesat de două ori ı̂ntrucât pentru aceste operaţii
procesorul LaTEX are nevoie de fişiere care la prima procesare nu
existau ı̂ncă şi deci nu pot fi rezolvate referinţele.

9.1 Organizarea logică a documentului


9.1.1 Structura generală a fişierului sursă
Un fişier sursă ce urmează a fi supus procesării cu LaTEX
trebuie să ı̂nceapă cu comanda \documentstyle a cărei sintaxă
este:
\documentstyle[opt1,opt2,...]{doc style}
unde: opt1, opt2, ... reprezintă lista de opţiuni, doc style este
stilul (tipul) documentului. Obligatoriu de utilizat este doar pa-
rametrul doc style, lista de opţiuni putând aşadar lipsi. Valorile
parametrului doc style sunt:
 book - in situaţia aceasta procesorul va organiza documen-
tul sub forma unei cărţi. În acest contex, apar o serie de
caracteristici, cum ar fi:
- procesarea textului se face diferenţiat pentru pagini pare
şi impare;
- ı̂ntreg materialul de prelucrat este organizat pe bucăţi:
capitole, secţiuni, subsecţiuni, subsubsecţiuni;
- antetul fiecarei pagini pare conţine titlul capitolului cu-
rent iar cel al fiecărei pagini impare, titlul secţiunii cu-
rente (aceasta numai dacă prin comanda \pagestyle nu
s-a specificat altfel). Fiecare capitol ı̂ncepe la o pagină
nouă impară.
 report - va organiza documentul sub forma unui raport.
Este asemănător cu book dar procesarea textului nu se face
140 Capitolul 9

diferenţiat, funcţie de paritatea paginii; capitolele pot ı̂ncepe


şi pe pagini pare.
 article - va organiza documentul sub forma unui articol.
Implicit, antetele sunt lăsate goale iar procesarea textului se
face nediferenţiat ı̂n raport cu paritatea paginilor.
 letter - permite organizarea documentului sub forma unei
scrisori oficiale. Opţiunile disponibile sunt:
11pt/12pt - setează mărimea caracterelor normale la 11 sau 12
puncte tipografice. Implicit, aceasta mărime este de 10
puncte. Celelalte dimensiuni vor fi raportate la dimensi-
unea normală a caracterelor (vom vedea mai târziu care
este raportul);
fleqn - determină alinierea la stânga a formulei matematice.
Implicit, acestea sunt centrate pe pagină;
leqno - determina plasarea la stânga a etichetelor folosite pen-
tru numerotarea ecuaţiilor. Implicit, acestea sunt aşe-
zate ı̂n dreapta ecuaţiilor;
makeidx - este util la documentele ı̂n care se doreşte obţinerea
(semi)automată a unui index;
showidx - permite aşezarea ca note marginale a cuvintelor cheie
care sunt trecute ı̂n index;
twocolum - determină procesarea textului pe doua coloane;
twoside - determină aşezarea diferenţiată ı̂n pagină pentru pa-
ginile pare şi impare. Este implicit pentru stilul book;
titlepage - se foloseşte numai ı̂mpreună cu stilul article ı̂n vederea
obţinerii unei pagini de titlu. Implicit, titlul este aşezat la
ı̂nceputul primei pagini de text.
Comanda \begin{document}. Este comanda de ı̂nceput a docu-
mentului. Între comenzile \documentstyle şi \begin{document}
nu se poate ı̂nsera text. Pot să apară ı̂nsă alte comenzi TEX sau
LATEX care nu au ca efect generarea de text. Această zonă se mai
numeşte preambul-ul fişierului sursă. De exemplu, ı̂ntre cele două
comenzi de mai sus poate să apară comanda \title (care setează
CE ESTE LATEX ? 141

titlul documentului) dar nu poate să apară comanda \maketitle


(care fixează titlul ı̂n pagină).
Comanda \end{document}. Marchează sfârşitul documentului.
Toate caracterele ce urmează după aceasta vor fi ignorate când
are loc procesarea. Aşadar, tot textul ce urmează a fi cules ı̂n
vederea supunerii procesării trebuie să fie plasat ı̂ntre comenzile
\begin{document} şi \end{document}. Comenzile care urmează
nu au ı̂n vedere stilul letter ( acesta va fi tratat separat mai târziu).
La ı̂nceputul unui document apare, ı̂n mod firesc, titlul documen-
tului urmat de numele autorului (eventual cu adresa acestuia) şi
data elaborării acestui document, informaţii utilizate de proce-
sorul LATEX pentru a atribui valori variabilelor corespunzătoare:
titlul documentului, autorul, data.
Comanda \title{text}. Această comandă setează titlul docu-
mentului. Dacă titlul nu ı̂ncape ı̂ntr-un singur rând, procesorul
LATEX nu va rupe rândul, aceasta trebuind făcută de către autor
prin introducerea comenzii \\ acolo unde se doreşte trecerea la
rând nou.
Observaţie. Această comandă trebuie să apară ı̂nainte de
comanda \maketitle. Dacă \title lipseşte, nu poate fi folosită
nici \maketitle.
Comanda \author{text}. Setează autorul documentului. Dacă
este nevoie de mai multe râduri, se poate uza din nou \\, de câte
ori este nevoie. Dacă sunt mai mulţi autori, ei vor fi separaţi pe
rânduri cu ajutorul comenzii \and. Această comandă poate lipsi,
caz ı̂n care nu poate fi folosită comanda \maketitle. Dacă este
folosită, atunci ea trebuie să apară ı̂nainte de \maketitle.
Comanda \date{text}. Setează dată prin conţinutul dintre
paranteze {...}. În lipsa acesteia, comanda \maketitle va folosi
drept dată, data curentă a calculatorului pe care se face proce-
sarea.
142 Capitolul 9

Comanda \maketitle. Asigură punerea ı̂n pagină titlului, au-


torului şi datei documentului. Aceasta trebuie să apară ı̂n mod
obligatoriu după comanda \begin{document} şi după \author şi
opţional \date. Efectele comenzii sunt ı̂n funcţie de stilul docu-
mentului:
• pentru book şi report, titlul, autorul şi data vor ocupa o pa-
gină ı̂ntreagă (pagina 0);
• pentru article, aceste informaţii vor apare la începutul primei
pagini.
Fontul cu care se generează titlul, autorul(rii) şi data este ales
de LATEX, diferit pentru fiecare dintre acestea. Toate rândurile
titlului vor fi centrate pe pagină.
Note de subsol. Cu ajutorul comenzii \thanks{text} se pot
ı̂nsera trimiteri la note de subsol, oriunde ı̂n textul cuprins de
\title, \author, \date şi unităţile secţionale. Este posibilă trim-
iterea la o notă de subsol(simbol) deja folosită cu ajutorul comen-
zii \footnotemark[numărul notei] unde numărul notei este nu-
mărul de ordine al comenzii \thanks la al cărei text de ’notă de
subsol’ se face trimiterea.
Observaţie. Pentru note de subsol obişnuite, LATEX-ul dis-
pune de comanda \footnote. Comanda \thanks, spre deosebire
de \footnote, foloseşte alt set de simboli pentru notele de subsol.
Exemplul 9.1.
\documentstyle[11pt]{article}
\title{Istoria creşterii şi descreşterii \\
Imperiului Otoman}\thanks{nota de titlu}}
\author{Autorul nr.1}\thanks{adresa-1} \\
{Autorul nr.2}\footnotemark[2]
\date{9.03.98}
\begin{document}
\maketitle
Începutul efectiv al textului
CE ESTE LATEX ? 143

*nota de titlu
+adresa-1
.
.
.
\end{document}

9.2 Capitole şi secţiuni


Aproape toate lucrările elaborate cu LaTEX: cărţi, articole,
etc. sunt organizate pe subcomponente: capitole, secţiuni, sub-
secţiuni, subsubsecţiuni. Unele documente au chiar şi un rezumat
(abstract). Procesorul LaTEX ştie să gestioneze toate aceste en-
tităţi şi să facă aranjarea lor ı̂n pagină, prin intermediul unor
comenzi, numite ı̂n continuare comenzi secţionale. Acestea sunt:
\part,\chapter,\section, \subsection, \subsubsection.
Tot aici este cuprinsă şi comanda \appendix. Prin aceste
instrucţiuni se realizează structura ierarhică a secţiunilor textu-
lui. Nivelele ierarhiei trebuie obligatoriu respectate; de exemplu
\section trebuie să se ı̂mpartă (dacă e cazul) ı̂n \subsection,
etc.
Fiecare din comenzile enumerate mai sus are trei forme. În
forma simplă, comanda are un singur parametru, delimitat de
acolade. Acesta (parametrul) va fi un text care reprezintă titlul
unităţii secţionale. Numerotarea părţilor se face automat. To-
todată, dacă se generează un cuprins automat, acest text, care
alcătuieşte parametrul, este folosit şi pentru cuprins. Mai mult,
dacă stilul paginii este heading (vezi comanda \pagestyle{stil}
ı̂n cele ce urmează), atunci acelaşi text este folosit pentru antetul
paginilor (dacă este cazul).
Dacă nu se doreşte numerotarea unei unităţi secţionale atunci
se va folosi forma cu ”*” a comenzii, adică: \part*, \chapter*,
\section*, \subsection*, \subsubsection*. În această situ-
aţie unitatea secţinală respectivă nu va fi trecută ı̂n cuprins şi nici
nu se va folosi pentru antetele paginilor.
144 Capitolul 9

Cea de-a treia formă este o ı̂mbunătăţire a primei forme


obţinută prin adăugarea unui parametru opţinal, plasat ı̂naintea
celui principal; de exemplu pentru \part o să avem:
\part[parametru-opţional]{parametru-principal}
parametru-principal este folosit ı̂n textul documentului ı̂n timp ce
cel opţional apare ı̂n cuprins şi antet, dacă este cazul.
În cele ce urmează vom face o scurtă prezentare a fiecărei
comenzi din cele enumerate mai sus.
Comanda \part. Permite ı̂mpărţirea unei cărţi sau a unui raport
pe bucăţi (module), aceasta fiind definită numai pentru stilurile
book şi report. Cele trei forme ale comenzii sunt:
\part{titlul parte}
\part*{titlul parte}
\part[titlu-mic]{titlul parte}
Efectul comenzii depinde de stilul documentului ı̂n care este
folosită. La book are ca efect trecerea la o pagină nouă, cu număr
impar, pe care se imprimă cuvântul Part urmat de numărul părţii
şi titlul ei, centrate vertical pe pagină după care face saltul la
următoare pagină nouă cu număr impar.
La report are drept efect trecerea la o pagină nouă, necontând
dacă este una pară sau impară, urmat de imprimarea numărului
părţii şi a titlului ei, centrate vertical şi ı̂n final saltul la pagină
nouă.
Comanda \chapter. Si acestă comandă este definită numai
pentru stilurile book şi report de document. Cele trei forme ale
comenzii sunt:
• \chapter{titlul capitolului}
• \chapter∗ {titlul capitolului}
• \chapter[titlul-mic]{titlul capitolului}
CE ESTE LATEX ? 145

Numerotarea capitolelor nu este afectată de comanda \part.


Efectul comenzii \chapter este trecerea la pagină nouă (ı̂n cazul
stilului book, noua pagină va fi una impară) şi imprimarea la
ı̂nceputul paginii a cuvântului chapter urmat de numărul şi titlul
capitolului.
Comenzile \section,\subsection, \subsubsection. Aceste
trei comenzi au drept efect trecerea la o secţiune, sub- sau subsub-
secţiune nouă. Prezentăm cele trei forme doar pentru comanda
\section:
• \section{titlul secţiunii}
• \section∗ {titlul secţiunii}
• \section[titlu-mic]{titlul secţiunii}
Remarcăm că numerotarea acestor unităţi secţionale este a-
fectată de comenzile \chapter, \section, \subsection şi
\subsubsection utilizate anterior ı̂n cadrul documentului. Aceste
trei comenzi pot fi folosite ı̂n stilul book, report şi article. Nu-
merotarea diferă ı̂nsă; pentru stilurile book şi report, secţiunile
sunt numerotate cu două numere separate prin . (primul număr
reprezintă capitolul iar al doilea secţiunea din cadrul capitolu-
lui). Cât priveşte stilul article, numerotarea se face cu un sin-
gur număr. Pentru toate stilurile acum, notarea subsecţiunilor
şi subsubsecţiunilor se face prin adăugarea a câte un (respectiv
două) număr (numere). Exemplu: Şirul de numere: 3.1.2.4 reprezintă
subsubsecţiunea 4 a subsecţiunii 2 din cadrul secţiunii 1 a capitolului 3.

Comanda \appendix. Rolul acesteia este de a modifica modul


de numerotare a capitolelor şi secţiunilor. Astfel, ı̂n stilul arti-
cle, secţiunile ce vor fi declarate după comanda \appendix vor
fi numerotate cu ”A”, ”B” etc. În stilul book, după o comandă
\appendix, capitolele vor fi notate cu ”Appendix A”, ”Appendix
B”, etc.
Comanda \abstract. După cum am precizat la ı̂nceputul aces-
tei secţiuni, unele documente pot conţine chiar şi un rezumat.
146 Capitolul 9

Acesta se realizează cu comanda \abstract şi comanda


\endabstract. Exemplu:
\abstract
.....................
(textul rezumatului)
.....................
\endabstract
Această pereche de comenzi poate fi ı̂nlocuită cu cadrul ab-
stract Printr-un cadru ı̂ntelegem o entitate (o ecuaţie, un tabel, o
figură etc.) care-i folosit pentru a aşeza ı̂n pagină un anumit mate-
rial (text, de exemplu), după un format specific cadrului (entităţii)
respective. Un cadru este delimitat de \begin şi \end. Deci cadrul
abstract este cel care permite aşezarea ı̂n pagină a rezumatului
unei lucrări (articol). Comanda este valabilă numai pentru stil-
urile report şi article (pentru primul stil având drept efect aȩzarea
rezumatului pe o pagină separată), dar nu este definit pentru stil-
urile book şi letter. Se recomandă introducerea acestor comenzi
ı̂n textul sursă imediat după comanda \maketitle.

9.3. Etichete şi referinţe


Întrucât numerotarea părţilor unui document se face automat
de către procesorul LaTEX, autorul, ı̂n perioada culegerii textului,
nu poate cunoaşte numerotarea atribuită capitolelor, secţiunilor,
etc. de către acesta. Devine ı̂nsă necesară referirea la unele en-
tităţi ı̂nsă, ı̂n timpul editării fişierului sursă, nu putem şti numărul
la care să ne referim.
LaTEX-ul dă posibilitatea de a referi anumite părţi, fără a şti
numerotarea lor reală, folosind comenzile \label şi \ref. Sintaxa
acestora este:
\label{etichetă}
\ref{etichetă},
CE ESTE LATEX ? 147

respectiv, unde etichetă este un nume simbolic pentru acea enti-


tate (parte) şi poate conţine ı̂n structura sa nu numai litere ci şi
alte caractere speciale (coduri ASCII, ı̂n afară de spaţiu).
Deosebit de utilă este şi comanda \pageref{eticheta} care
permite referirea la numărul paginii pe care apare o entitate
eticheta.
Observaţie. Dacă, ı̂n cadrul unui document, se fac referiri la
etichete, atunci este nevoie de procesarea de două ori, una după
alta, a fişierului sursă, ı̂n vederea rezolvării de către procesor a
referinţelor ı̂ncrucişate, ı̂ntrucât, la prima procesare, aceste en-
tităţi etichetate abia se scriu ı̂n fişierul *.aux iar la a doua proce-
sare informaţiile sunt preluate de aici pentru a fi folosite de comen-
zile \ref şi \pageref.
Exemplu de etichetare:
\section{Introduce}
.................................
...............(text)............
.................................
\subsection{Etichetare} \label{s E}
.................................
...............(text)............

Comanda \label{eticheta} are drept efect scrierea ı̂n fişi-


erul *.aux a unei linii cu următorul conţinut:
\newlabel{eticheta} {{simbol}{pagină}}
unde simbol este numărul atribuit de către procesor entităţii eti-
chetate iar pagină este numărul paginii de imprimat (.dvi) ı̂n care
va apare secvenţa ce conţine entitatea (secţiunea) etichetată. În
exemplul de mai sus, ı̂n fişierul *.aux, se va scrie:
\newlabel{s E}{{nr1}{nr2}}
unde nr1 şi nr2 depind de numărătoarea automată făcută de pro-
cesor şi de volumul textului procesat.
148 Capitolul 9

9.4. Variabile LaTEX


9.4.1 Lungimi
LaTEX lucrează cu lungimi atunci când trebuie să dimen-
sioneze un obiect. De exemplu, primul parametru al comenzii
\parbox trebuie să fie o lungime. Putem folosi aici o constucţie
de genul:
<parte ı̂ntreagă>< parte zecimală >< unitate de măsură>
ı̂nsă putem utiliza şi o variabilă de tip lungime. O astfel de vari-
abilă poate fi una din cele predefinite ı̂n LTEX (vezi şi secţiunile
următoare) sau una definită de utilizator. Putem folosi urmă-
toarele comenzi pentru modificarea valorilor variabilelor de tip
lungime:
• \setlength{\cda}{ val} - setează comanda \cda la valoarea
val;
• \addolength{\cda}{ val} - adaugă comenzii \cda valoare val;
• \settowidth{\cda}{ text} - setează comanda \cda la val-
oarea lăţimii textului text;
• \stretch{număr} - o lungime naturală egală cu de număr
de ori ı̂ntinderea lui \fill;
• \newlength{\cda} - defineşte \cda ca fiind o nouă variabilă
de tip lungime;
Unităţile de măsură valide ale lungimilor sunt:
1in (inch) = 25.4mm
1in(inch) = 72.27pt
1em = aproximativ lăţimea ı̂n pt a literei m
1ex = aproximativ lăţimea ı̂n pt a literei x
1cm = 10mm
1mm = 2.845276pt
1pc(Picas) = 12pt
1
1pt(Point) = inches
72.27
CE ESTE LATEX ? 149

1
1bpt(Big point) = inches
72
\fill = spaţiul de lungime variabilă (0→∞)
Unele din cele mai importante varibile de tip lungime ale
căror valori sunt dependente de stilul documentului sunt:
• \parident - lungimea alineatului la ı̂nceputul unui paragraf;
• \textwidth - lăţimea textului pe pagină;
• \textheight - lungimea textului pe pagină;
• \parskip - spaţiul vertical suplimentar dintre ultima linie a
paragrafului şi prima linie a paragrafului următor;
• \baselineskip - spaţiul dintre sfârşitul unui rând şi sfârşitul
rândului următor;
Exemplu: Dacă nu dorim aliniere la ı̂nceput de paragraf,
putem introduce ı̂n fişierul sursă, la ı̂nceputul documentului, co-
manda:
\setlength{\parindent}{0cm}
9.4.2. Lungimi pentru controlul layout-ului
A. Stilurile article şi report, fără opţiunea twoside. O pagină
se va compune de sus ı̂n jos, respectiv, de la stânga la dreapta,
din:
Verticală: 1 inch,\topmargin,\headheight, \headsep,
\textheight,\footskip, restul paginii.
Orizontală: 1 inch,\oddsidemartgink\ evensidemargin,
\textwidth,\marginhparsep, \marginparwidth, restul paginii.
Singura diferenţă dintre paginile pare şi impare o constituie
lungimea numită \oddsidemargin respectiv \evensidemargin,
dar care au aceeaşi valoare. Pentru toate paginile, notele mar-
ginale sunt puse ı̂n marginea dreaptă a paginii.
B. Stilul book sau, orice stil cu opţiunea twoside. Dacă se face
aranjare diferenţiată a textului pe pagini pare şi impare (ceea ce
150 Capitolul 9

este implicit la stilul book sau opţiunea twoside), paginile pare au


o componenţă diferită de cele impare pentru care rămâne valabilă
schema anterioară. Notele marginale sunt puse ı̂n partea stângă.
Putem utiliza comenzile:
\addolength {\textheight }{2cm}
\addolength {\topmargin}{-1cm}
pentru a ajusta lungimea textului de pe pagină.
Comanda \baselinestretch este singura dintre toate sec-
venţele de control dintre cele doua figuri care nu reprezintă o
lungime. Modificarea ei se va face cu comanda \renewcommand.
Implicit ea are valoarea 1. Pentru ca textul să fie cules la un rând
şi jumătate, se foloseşte comanda:
\renewcommand{\baselinestretch}{1.3}
respectiv, pentru culegere la două rânduri:
\renewcommand{\baselinestretch}{1.6}
9.4.3. Designul unei pagini
Fiecare stil de document are predefinit un design specific pen-
tru pagini. Putem opta ı̂nsă pentru altul dacă acesta nu ne con-
vine.
Fiecare pagină este compusă din antet, corp şi subsol. Di-
mensiunile acestor trei elemente sunt determinate de stilul docu-
mentului iar conţinutul antetului şi al subsolului este determinat
de stilul paginii. Stilul paginii poate fi modificat cu comanda:
\pagestyle{stil}
pentru toate paginile, sau cu comanda:
\thispagestyle{stil}
pentru pagina curenta. Parametrul stil poate lua unul din urmă-
toarele valori:
CE ESTE LATEX ? 151

plain - este stilul implicit. Antetul va fi vid, iar ı̂n subsol va apărea
doar numă rul paginii;
empty - antetul şi subsolul sunt vide;
myheadings - antetul va conţine informaţii stabilite de utilizator şi numă-
rul paginii. Subsolul este vid;
Dacă se foloseşte stilul myheadings, informaţiile pentru an-
tete sunt stabilite cu ajutorul comenzilor:
\markboth{antet stânga }{antet dreapta}
\markright{antet dreapta}
unde antet stânga nu se va folosi decât dacă s-a optat pentru
twoside ı̂n lista de opţiuni ai comenzii \documentstyle, caz ı̂n
care se va folosi antetele paginilor pare.
Modul ı̂n care se face numerotarea paginilor se poate stabili
cu comanda:
\pagenumbering{stil}
unde stil poate lua una din următoarele valori:
arabic - numere arabe: 1,2,3, . . .;
roman - numere romane mici: i,ii,iii, . . .;
Roman - numere romane mari: I,II,III, . . .;
alph - litere mici: a,b,c, . . .;
Alph - litere mari: A,B,C, . . ..
Avem posibilitatea tipăririi pe două coloane a ı̂ntregului do-
cument specificănd twocolumn ı̂n lista de opţiuni a comenzii
\documentstyle, dar ne stau la dispoziţie şi comenzile:
\twocolumn[text]
care determină trecerea la pagină nouă, tipărirea lui text ( dacă
[text] este prezent ) pe toată lăţimea paginii şi culegerea textului
ce urmează după comandă pe două coloane, precum şi comanda:
\onecolumn
152 Capitolul 9

care determină trecerea la pagină nouă şi culegerea textului ce


urmează pe toată lăţimea paginii.

9.4.4. Variabile ı̂ntregi


Pentru o serie de operaţii cum ar fi: numerotarea paginilor,
ecuatiilor, sectiunilor etc., LaTEX foloseşte contoare. Contoarele
predefinite sunt următoarele:
• part - se foloseşte la numerotarea părţilor ı̂n cazul stilului
book şi report;
• chapter - se foloseşte la numerotarea capitolelor ı̂n cazul
stilului book şi report;
• section, subsection, subsubsection - folosite la nume-
rotarea secţ iunilor, subsecţiunilor şi subsubsecţiunilor;
• paragraph, subparagraph - folosite la numerotarea para-
grafelor şi a subgrafelor;
• page - folosit la numerotarea paginilor;
• equation - folosit la numerotarea ecuaţiilor;
• figure, table - folosite la numerotarea figurilor respectiv
numerotarea tabelelor;
• footnote, mpfootnote - folosite la numerotarea notelor de
subsol şi a notelor de subsol dintr-un cadru minipage;
• enumi, enumii, enumiii, enumiv folosite la numerotarea
intrărilor ı̂ntr-un cadru enumerate pentru diferite niveluri de
imbricare(maximum 4);
Asupra contoarelor se poate acţiona cu ajutorul următoarelor
comenzi:
• \setcounter{contor}{val} setează contorulcontor la valoa-
rea val;
• \addtocounter{contor}{val} adaugă la valoarea curentă a
contorului contor valoarea val;
• \value {contor} reprezintă valoarea contorului contor pentru
a fi folosită ca parametru ı̂n alte comenzi;
CE ESTE LATEX ? 153

• \thecontor tipăreşte valoarea contorului contor (de exemplu


comanda \thepage tipăreşte valoarea curentă a numărului
de pagină;
Valorile contoarelor pot fi ı̂n cinci stiluri diferite. În contin-
uare furnizăm comenzile folosite pentru aceasta:
• \arabic{contor} tipăreşte cifra arabă asociată contorului
contor;
• \roman{contor} tipăreşte cifra romană asociată valorii con-
torului contor;
• \Roman{contor} ca mai sus dar cifra romană este scrisă cu
majuscule;
• \alph{contor} tipăreşte litera mică din alfabet a cărei poziţie
corespunde cu valoarea contorului (maximum 26 corespunză-
tor literei z);
• \Alph{contor} tipăreşte majuscula din alfabet a cărei poziţie
corespude cu valoarea contorului (maximum 26 corespunză-
tor literei Z); H
• \fnsymbol{contor} produce caracterele ∗, †, ‡, , k, ∗∗, ††,
‡‡. Poate fi folosit doar ı̂n mod matematic iar valoarea con-
torului contor trebuie să fie ı̂n intervalul 1 ÷ 9.
Definirea de contoare noi se face cu comanda:
\newcounter{contornou}[contorextern]
care defineşte un nou contor contornou. Forma opţionala are ca
efect definirea contorului ı̂n interiorul lui contorextern. Aceasta
are ca efect aducerea la zero a lui contornou de fiecare dată când
valoarea lui contorextern se modifică.
Comenzile:
\stepcounter{contor} şi
\refstepcounter{contor}
au ca efect incrementarea cu 1 a valorii contorului contor şi po-
ziţionarea pe 0 a tuturor contoarelor definite ı̂n interiorul aces-
154 Capitolul 9

tui contor (vezi comanda \ newcounter). În plus, comanda


\refstepcounter declară valoarea curentă atribuită cu label ca
fiind textul generat de \thecontor.

9.4.5. Parametri de stil


Uneori, atunci când se doreşte modificarea stilului ı̂n care
sunt scrise anumite obiecte, trebuie modificaţi anumţi parametri
specifici stilului, aşa numiţii parametri de stil. Modificarea aces-
tor parametri specifici să se facă cu grijă şi ı̂n general nu este
o acţiune ı̂ncurajatoare deoarece valorile acestor parametri au
fost stabilite respectând anumite reguli tipografice (ı̂n vigoare ı̂n
SUA). Parametri de stil pot fi lungimi, contoare sau secvenţe de
control.
Ecuaţii matematice. Următoarele lungimi controlează formatul
ecuţiilor matematice:
• \mathindent - reprezintă spaţiul de la marginea unui para-
graf până la ı̂nceputul unei formule (numai când s-a ales
opţiunea fleqn;
• \jot - reprezintă spaţiul vertical adăugat ı̂ntre două linii din
cadrul eqnarray şi eqnarray∗ ;
• \abovedisplayskip - reprezintă spaţiul adăugat deasupra
unei formule mai lungi ı̂n cazul ı̂n care nu s-a optat pentru
fleqn (caz ı̂n care se foloseşte ca spaţiu valoarea lui \topsep;
• \belowdisplayskip - reprezintă spaţiul adăugat sub o for-
mulă mai lungă cu excepţia stilului fleqn (caz ı̂n care se
foloseşte ca spaţiu valoarea lui \topsep);
• \abovedisplayshortskip - reprezintă spaţiul adăugat dea-
supra unei formule mai scurte dacă comenzii
\documentstyle nu i s-a transmis opţiunea fleqn (caz ı̂n
care se foloseşte ca spaţiu valoarea lui topsep;
• \belowdisplayshortskip - reprezintă spaţiul adăugat sub
o formulă mai scurtă cu except̆ia stilului fleqn (caz ı̂n care
se foloseşte ca spaţiu valoarea lui topsep).
CE ESTE LATEX ? 155

Formatul numărului ecuaţiei este controlat de sevenţa de con-


trol \theeqution, ce poate fi eventual redefinită. De exemplu,
pentru stilul book \theequation este predefinit ca
{\ thechapter.\arabic{equation}}.
Index de concepte şi comenzi TEX (plain TEX)

\ (backslash), 22-135 ^, 18,113-135


\!, 115 , 18,113-135
\,, 114 \# (#), 18,98-104
\{, \} ({, }), 18,112 \$ ($), 18,57,85,105-137
{, } -- delimitatori $$, 18,85,105-135
de grup, 59-67
{, } -- delimitatori
de parametri, 61-68
\% (%), 18,59 ‘ (apostrof deschis), 17-18
- (cratima), 20 ’ (apostrof ^
ınchis), 17-18
-- (liniuţa ”en-dash”), 20 \‘, \’, 21
--- (liniuţa ”em-dash”), 20 \=, 21
− (semnul minus) \^, 21
\& (&), 18 \., 21
&, 18,98-104 \~, 21,42
& -- ^ın cadrul halign, 98 \", 21
& -- ^ın cadrul eqalign, 127 \^\i, 22
& -- ^ın cadrul matrix, 130 ~, 18
5pt, 34-37 10pt, 33,36
7pt, 34-37 11pt, 35
8pt, 35-36 12pt, 36-37
+, 109,114,116,118-135 − (minus), 20,109,131-135
158 Index de concepte şi comenzi TEX (plain TEX)

* (\ast), 109 <, 110


>, 110 =, 110
(, 112 ), 112
[ (\lbrack), 112 ] (\rbrack), 112
{ (\lbrace), 112 } (\rbrace), 112

\aa (å), 20 \AA (Å), 20


\abovedisplayskip, 106 accente, 21
accente ^ın \acute ( ´ ), 114
modul matematic, 114 adâncime (depth), 82
\advance, 66,79 \advancepageno, 79
\ae (æ), 20 \AE (Æ), 20
aliniat, aliniere, 19,45,58 \aleph (ℵ), 108
\alpha (α), 107 \amalg (q), 109
\angle (6 ), 108 \approx (≈), 110
\arccos, 117 \arcsin, 117
\arctan, 117 \arg, 117
arg-secv, 62 \asymp, 110
\ast (*), 109 \atop, 119

\b, 21 \backslash, 108


\bar ( ¯ ), 114,121 \baselineskip, 91,93-95
\bbuildrel, 125 \begin, 24
\begingroup, 24 \begin{document}, 24
\begin{theorem}, 24 \belowdisplayskip, 106
\beta (β), 107 \bf, 22,35,99-103
\bgroup, 24 \big, \Big,
T 122
\bigbreak, 58 \bigcap (S), 108
\bigcirc ( ), 109 \bigcup "
( ), 108

\biggl ( ), 122,124 \Biggl ( ), 122,124
Index de concepte şi comenzi TEX (plain TEX) 159



\biggm ( ), 124 \Biggm ( ), 124

 #
\biggr ( ), 122,124 \Biggr ( ), 122,124
 h
\bigl ( ), 122 \Bigl ( ), 122


\bigm ( ), 124 \Bigm ( ), 124
J L
\bigodot ( N ), 109 \bigoplus ( ), 109
\bigotimes ( ), 109 i

\bigr ( ), 122 \Bigr ( ), 122
F
\bigskip, 44,58 \bigsqcup ( ), 108
\bigtriangledown
U (5), 109 \bigtriangleup
W (4), 109
\biguplus (V), 109 \bigvee ( ), 108
\bigwedge ( ), 109 \bot (⊥), 108
\box, 82-83,88 box, 23,27,46,81-96
box explicit, 81,84 box implicit, 81
box orizontal, 83,92 box vertical, 48,82,92
\boxit, 90-91
\bowtie, 110 \brace, 119
\brack, 119 \break, 64-65,77
\breve (˘), 114 \buildrel, 124-125
\bullet (•), 109 \bye, 31

\c ¸, 21 \cal, 113
caractere, 17,84 caractere ordinare, 107
caractere speciale, 17-18 caractere unite, 19
\cap (∩), 109 \cases, 123
\cdot (·), 109 \cdots (· · ·), 133
\centerline, 55,61,78,91 \check ( ˇ ), 114
\chi (χ), 107 \choose, 119
\circ (◦), 109 \clubsuit (♣), 108
160 Index de concepte şi comenzi TEX (plain TEX)

cm, 42 cmmi, 112


\cmr17, 119 \cmrxvii, 119
\colon (:),
` 107 \cong (∼
=), 110
\coprod ( ), 108 comprimare, 44,49
comenzi, 14,22 \copy, 87
\cornerbox, 65 \cos, 117
\cosh, 117 \cot, 117
\coth, 117 \cr, 98-104,127-135
CR (linie nouă), 19,29,41,58,106 \csc, 117
\cup (∪), 109

\d, 21 \dagger (†), 109


\dashv (a), 110 \dd, 118-119
\ddagger (‡), 109 \ddot ( ¨ ), 114
.
\ddots ( . . ), 133 \def, 26
\defadots, 134 \deg, 117
\delta (δ), 107 \Delta (∆), 108
depth (adâncime), 82,95-96,103 \det, 117
\diagram, 134-135 \diamond (), 109
\diamondsuit (♦), 108 \dim, 117
dimensiune, 79 \displaylines, 126,132
\displaystyle, 116 \div (÷), 109
.
\dot, 114 \doteq (=), 110
\dotfill, 52-54 \dots, 133
\downarrow (↓), 111,135 \Downarrow (⇓), 111
\downbracefill ( z }| { ), 52 \dp, 92
dvi, 16,19 dvi2ps, 17
dvidot, 17 dvihplj, 17

editare computerizată, 14 egroup, 24


\eightrm, 35-36,39,91 \eightit, 76
Index de concepte şi comenzi TEX (plain TEX) 161

\eject, 77-78 \ell (`), 108


\else, 74 em, 43,51,99
\emptyset (∅), 108 \end, 31
\end{document}, 24 endgroup, 24
\endinsert, 78-79 \enskip, 43
\enspace, 51,64,68 \epsilon (), 107
\eqalign, 127-129,132 \eqalignno, 128
\eqno, 127-128 \equiv (≡), 110
\eta (η), 107 \evenpagehead, 73-76
\evenpagefoot, 73-76 ex, 43
\exists (∃), 108 \exp, 117
extensie, 44,47-49

factor de \fam, 38,107


scalare global, 38
\fem, 88 \fi, 74,79
\fil, 54 fişier sursă, 14-131
fişier tfm, 16 \five, 38
\fiverm, 34 \flat ([), 108
flotare, 79 \folio, 72
\font, 119 fonturi, 33
fonturi preı̂ncărcate, 33
fontul roman, 33-35 fontul italic, 33,35
fontul boldface, 33-34 fontul ı̂nclinat, 33
fontul maşină de scris, 33 fonturi TEX, 33
\footnote, 66-67 \footline, 71-75
\forall (∀), 108 formatare, 15
formule matematice, 84 \frown (_), 110

\gamma (γ), 107 \Gamma (Γ), 108


\gcd, 117 \gdef, 79
162 Index de concepte şi comenzi TEX (plain TEX)

\ge (≥), 110 \geq (≥), 110


\gets (←), 111 \gg (), 110
\global, 23,26,66,79,87
glue, 44 \grave ( ` ), 114
grup, 22-28,83,106 grupul vid, 113

H,h, 29 \H ( } ), 21
\halign, 97 \hangindent, 65-67
\hangafter, 65-66 \harr, 134-135
\hat, 114 \hbar, 108
\hbox, 23,38,54,64,76, \headline, 71-75
83-84,89,95-96,119
height (ı̂nălţime), 82,95-96,103
\heartsuit (♥), 108 \hfq, 100
\hfil, \hfill, 48,50, \hglue, 51
64-65,72,99-104,118
\hoffset, 79 \hom, 117
\hookleftarrow (←-), 111 \hookrightarrow (,→), 111
\hrule, 58,85,95 \hrulefill, 52
\hskip, 42,45,57,84,99,115 \hsize, 45,47,71-72,84,92-93
\hss, 54-55 \ht, 92-93

I,i, 29 \i, 21
\ifnum, 72,79 \ifodd, 74,80
\iftitlepage, 73-74,80 \ignorespace, 68-69
\Im (Im ), 108 \imath (ı), 108
imprimare document, 16 in, 38,42
\in (∈), 110,118 inch, 37,42
\indent, 58,67-68 \inf, 117
\infty (∞), 108,125 \input, 73,75
instrucţiuni, 22 instrucţiuni cuvânt, 22
Index de concepte şi comenzi TEX (plain TEX) 163

instrucţiuni
R simbol, 22 instrucţiuni primitive, 14
\int ( ), 106-108,120 \iota (ι), 107
\it, 22,35,99-103 italic, 33
\item, 61-63,68 \itemitem, 63,68
\itemitemitem, 63,67

ı̂nălţime, (height), 82

\jmath (), 108

\kappa (κ), 107, \ker, 117


\kern, 51-52,84,115,125 Knuth Donald E, 13

\l ( l), 20 \L (L), 20
\lambda (λ), 107 \Lambda (Λ), 108
\land (∧), 109 \langle (h), 112
\largdotfill, 53 layout, 18
lăţimea (width), 82 \lbrace ({), 112
\lbrack ([), 112 \lceil (d), 112
leaders, 52 \leaders, 53
\left, 122-124,128,130-131,135 \le (≤), 110
\leftarrowfill, 52 \leftarrow (←), 111
\Leftarrow (⇐), 111 \leftrightarrow (↔), 111
\Leftrightarrow (⇔), 111 \leftharpoonup ((), 111
\leftharpoondown ()), 111 \leftitem, 63-65
\leftskip, 60-62 \leq (≤), 110
\leqalignno, 128 \leqno, 127-128,131
\lfloor (b), 112 \lg, 117
\lim, 117,125 \liminf, 117,125
164 Index de concepte şi comenzi TEX (plain TEX)

\limits, 119,125,135 \limsup, 117,125


\line, 46-50,55,95 \lineskip, 93-94
\lineskiplimit, 93-94 linia de bază, 81
linia de jos, 80 linia de sus, 80
linia de lucru, 45 listă de lucru orizontală, 27
litere greceşti mari (\meti), 113 litere caligrafice (\cal), 113
\ll (), 110 \llap, 54,68-69,82,135
\log, 117 \longleftarrow (←−), 111
\Longleftarrow (⇐=), 111 \longrightarrow (−→), 111
\Longrightarrow (=⇒), 111 \longleftrightarrow (←→), 111
\Longleftrightarrow (⇐⇒), 111 \longmapsto (7−→), 111
\lor (∨), 109 \lower, 89-90
\ln, 117 \lnot (¬), 108

macro-comenzi definite, 15 macro-definiţii utilizator, 15


macro-comenzi predefinite, 14 \magnification, 37,43
\mapsto (7→), 111 \mathinner, 134
\mathop, 119,125,135 \mathrel, 125
\mathstrut, 118 \matrix, 129-132,135
\max, 117 \medbreak, 58
\medskip, 44,58-59,132-133 \medskip1, 37
\medskip2, 37 \medskip3, 37
\medskip4, 37 \medskip5, 37
\meti, 68-69 \mid (|), 110
\midinsert, 78-79 \min, 117
minus (−), 44-45,106 \mit, 113
\mkern, 115,134 mm, 42,89,94
modul matematic:
(text, dysplay), 27,105-116
modul orizontal:
(obişnuit, restrâns), 27-28,
57-58,77,83-84
Index de concepte şi comenzi TEX (plain TEX) 165

modul vertical:
(obişnuit, intern), 18,26,
38,57-58,78,82,100
\models (|=), 108 \moveleft, 90
\moveright, 90 \mp (∓), 109
\mskip, 115 \mu (µ), 107
\myfootnote, 66-67

\nabla (∇), 108 \narrower, 60-61


\natural (\), 108 \ne (6=), 111,118
\nearrow (%), 110 \neg (¬), 108
\negsalt, 53 \negtinspace, 51
\neq (6=), 111 \newbox, 87-88
\newcount, 66 \newif, 73
\newtoks, 73 \ni (3), 110
\noalign, 103-104,132-133 \noindent, 58,61
\nointerlineskip, 95 \nopagenumbers, 72
\normalbaselineskip, 132,135
\notenumber, 66 \notin (∈),/ 111
\not< (6<), 110 \not<= (6<=), 111
\not>= (6>=), 111 \not> (6>), 110
\not\approx (6≈), 111 \not\cong (6∼ =), 111
\not\equiv (6≡), 111 \not\geq (6≥), 110
\not\leq (6≤), 110 \not\prec (6≺), 110
\not\preceq (6), 110 \not\sim (6∼), 111
\not\simeq (6'), 111 \not\subset (6⊂), 110
\not\subseteq (6⊆), 110 \not\succ (6), 110
\not\succeq (6), 110 \not\supset (6⊃), 110
\not\supseteq (6⊇), 110 \not\sqsubseteq (6v), 110
\not\sqsupseteq (6w), 110 \nu (ν), 107
\null, 76-77,79 nume-fişier.tex, 16
nume-fişier.dvi, 16 nume-fişier.log, 28
166 Index de concepte şi comenzi TEX (plain TEX)

\nwarrow (-), 111

\o, \O (ø,Ø), 20,107 \oe, \OE (œ,Œ), 20


\obeylines, 59-61,64-65,67-68
\oddpagehead, 73-76 \oddpagefoot, 73-76
\odot ( ), 109 \of, 120-121
H
\offinterlineskip, 95,103 \oint ( ), 109
\oldstyle, 113 \ominus ( ), 109
\omega (ω), 108 \Omega (Ω), 108
\openup, 132 \oplus (⊕), 109
\oslash ( ), 109 \otimes (⊗), 109
\over, 117,122,124-125 \overbrace, 121
Overfull, 30,46 overfull box, 93
\overleft, 111 \overleftarrow, 121
\overline, 121 \overrightarrow, 121

\page, 54 \pageno, 72-75,79


pagină, 71 pagină pară, 74-76
pagină impară, 74-76 \par, 19,57-58
\parallel (k), 110 \parindent, 24-26,58,62-65
paragraf, 19,45,58 \parfillskip, 61,77
\parskip, 52 pc, 42
\partial (∂), 108 \perp (⊥), 110
\phi (φ), 107 \Phi (Φ), 108
\pi (π), 107 \Pi (Π), 108
plain TEX, 13,19 plus, 106
\pm (±), 109 \pmatrix, 130
\pr, 117 preambul, 98
\prec (≺), 110 \preceq (), 110
\prime (0), 108 procesare,
Q 15
procesorul TEX, 14-134 \prod ( ), 108
Index de concepte şi comenzi TEX (plain TEX) 167

\propto (∝), 110 prtfx, 17


prthplj, 17 pt, 42-135
\psi (ψ), 108 \Psi (Ψ), 108
punctul tipografic (pt), 42

Q,q, 30 \quad, 43,76,96,99,114


\qquad, 43,114

R,r, 30 \raise, 89-90,134


\rangle (i), 112 \rbrace (}), 112
\rbrack (]), 112 \rceil (e), 112
regulă – procesare grup, 23
\Re (<), 108 \rfloor (c), 112
\rho (ρ), 108 \right, 122-124,128,130-131,135
\rightarrow (→), 111,125 \Rightarrow (⇒), 111
\rightarrowfill, 52,125 \rightharpoondown (+), 111
\rightharpoonup (*), 111 \rightleftharpoons (*
)), 111
\rightskip, 60-62 \rlap, 54,76,82,135
\rm, 22,35 roman (fontul), 33
\romannumeral, 72 \Romannumeral, 72
\root, 120-121 \runningauthor, 73,75-76
\runningtitle, 73,75-76

S,s, 30 salt slab, 50-51


salt tare, 50-51 scaled, 36
\scriptstyle, 116-117,121,135 \scriptscriptstyle, 116
secvenţă de control, 16-135
secvenţă elastică, 45,47 semnul minus, 20-21
\searrow (&), 111 \sec, 117
semnul de derivare, 114 \setboxi, 85,91
168 Index de concepte şi comenzi TEX (plain TEX)

\setminus (\), 109 \sevenrm, 32


\sharp (]), 108 \showthe, 92
\sigma (σ), 107 \Sigma (Σ), 108
\sim (∼), 110 simboluri verticale extinse, 122
\simeq ('), 110 \sin, 117
\sinh, 117 sistemul TEX, 13-14
\sl, 35 \smallbreak, 58
\smallskip, 43,58,102 \smash, 64,126,135
\smile (^), 110 \spadesuit (♠), 108
SP, 19,41 spaţiere (glue), 84
spaţiere orizontală, 41-43 spaţiere verticală, 43-44
spaţiu elastic (glue), 45 spaţiu de legătură, 18,42
spaţiu matematic, 79,114 spaţiu normal, 42
\sqcap (u), 109 \sqcup (t), 109
\sqrt, 120,122 \sqsubseteq (v), 110
\sqsupseteq (w), 110 \ss (ß), 20
\star (?), 109 stilul "script", 115-116
stilul "scriptscript", 115-116
stilul "scriptscriptscript", 115
\strut, 103-104 \subset (⊂), 110
\subseteq (⊆), 110 \succ P
(), 110
\succeq (), 110 \sum ( ), 108,118
\suma, 119 \sup, 117
\supset√(⊃), 110 \supseteq (⊇), 110
\surd ( ), 108 \swarrow (.), 111

\tan, 117 \tanh, 117


\tau (τ ), 107 tex, 16
TEX, 13 \textindent, 67
TEXsimplu, 13 \tenrm, 33,72,75
\tenbf, 76 \textstyle, 116-118
the, 66,73-76 \theta (θ), 108
Index de concepte şi comenzi TEX (plain TEX) 169

\Theta (Θ), 108 \thinskip, 51


\thinspace, 114-115 \tilde ( ˜ ), 114
\times (×), 109 \titlepagefalse, 73,80
\titlepagefoot, 73-74,80 \titlepagehead, 73-74,80
\titlepagetrue, 73,80 \to (→), 111
\top (>), 108 \topglue, 52,77
\topinsert, 79 \triangle (4), 108
\triangleleft (/), 109 \triangleright (.), 109
true, 34,39 \tt, 21,35
\twelverm, 36

\u, 21 Underfull, 30,45


underfull box, 93 \underbrace, 121-122
\underline, 121 \unhbox, 87-88,93
\unhcopy, 87 \unskip, 66,69
\unvbox, 87-88,93 \unvcopy, 87-88
\uparrow (↑), 111 \Uparrow (⇑), 111
\upbracefill (| {z }), 53 \updownarrow (l), 111
\Updownarrow (m), 111 \uplus (]), 109
\upsilon (υ), 107 \Upsilon (Υ), 108

v, 14 \v, 21
\valign, 104 \varepsilon (ε), 107
\varphi (ϕ), 107 \varpi ($), 108
\varr, 134-135 \varrho (%), 107
\varsigma (ς), 107 \vartheta (ϑ), 108
\vbox, 49,82-83,91 \vcenter, 23,82-83,135
.
\vdash (`), 110 \vdots (.
.), 135
\vec ( ~ ), 114,121 \vee (∨), 109
\vert (|), 108 \vfil, 48,50,77
\vfill, 48,50,77 \vglue, 52,78
170 Index de concepte şi comenzi TEX (plain TEX)

\vrule, 57,85,95-96 \vsize, 71-73


\vskip, 38,43-44,58,76,78,84 \vsplit, 91
\vss, 54-55 \vtop, 23,64-66,82-83,85-86

\wedge (∧), 109 \wd, 92


width (lăţime), 82,95-96,103 \widehat ( d ), 114
\widetilde ( g ), 114 \wp (℘), 108
\wr (o), 109

X,x, 30 \xi (ξ), 107


\Xi (Ξ), 108

\zeta (ζ), 107


Index de concepte şi comenzi TEX (plain TEX) 171

Rezumatul accentelor şi simbolurilor

Accente − modul text

\‘r −→ r̀ \^r −→ ^
r
\= r −→ r̄ \b r −→ r
¯
\H r −→ }
r \’r −→ ŕ
\u r −→ r̆ \.r −→ _
r
\v r −→ ř \c r −→ ŗ

\~ r −→ r
~
\t r −→ 
r
\"r −→ r̈
\d r −→ r
.

Accente − modul matematic

â \hat a ǎ \check a ˜a \tilde a


ā \bar a á \acute a ä \ddot a
ȧ \dot a à \grave a ă \breve a
~a \vec a
\widehat{.....}, \widetilde{.....}

Literele greceşti mici - modul matematic

α \alpha ι \iota % \varrho


β \beta κ \kappa σ \sigma
172 Index de concepte şi comenzi TEX (plain TEX)

γ \gamma λ \lambda ς \varsigma


δ \delta µ \mu τ \tau
 \epsilon ν \nu υ \upsilon
ε \varepsilon ξ \xi φ \phi
ζ \zeta ≤ \o ϕ \varphi
η \eta π \pi χ \chi
θ \theta $ \varpi ψ \psi
ϑ \vartheta ρ \rho ω \omega

Literele greceşti mari - modul matematic

Γ \Gamma Ξ \Xi Φ \Phi


∆ \Delta Π \Pi Ψ \Psi
Θ \Theta Σ \Sigma Ω \Omega
Λ \Lambda Υ \Upsilon

Operatori mari − modul matematic


P T
Σ Q \sum ∩ S \bigcap
Π ` \prod ∪ F \bigcup
q Z \coprod t \bigsqcup
R W
\int ∨ \bigvee
I
H V
\oint ∧ \bigwedge
J N
L \bigodot ⊗ U \bigotimes
⊕ \bigoplus ] \biguplus

Operatori binari − modul matematic

+ + − − ÷ \div
± \pm ∩ \cap ∨ \vee or \lor
∓ \mp ∪ \cup ∧ \wedge or \land
\ \setminus ] \uplus ⊕ \oplus
Index de concepte şi comenzi TEX (plain TEX) 173

· \cdot u \sqcap \ominus


× \times t \sqcup ⊗ \otimes
∗ \ast or ∗ / \trianglelef \oslash
? \star . \triangleright \odot
 \diamond o \wr † \dagger
◦ \circ \bigcirc ‡ \ddagger
• \bullet 4 \bigtriangleup q \amalg
5 \bigtriangledown

Operatori relaţionali - modul matematic

< < > > = =


≤ \leq or \le ≥ \geq or \ge ≡ \equiv
≺ \prec  \succ ∼ \sim
 \preceq  \succeq ' \simeq
 \ll  \gg  \asymp
⊂ \subset ⊃ \supset ≈ \approx
⊆ \subseteq ⊇ \supseteq ∼
= \cong
v \sqsubseteq w \sqsupseteq ./ \bowtie
∈ \in 3 \ni ∝ \propto
` \vdash a \dashv |= \models
.
^ \smile | \mid = \doteq
_ \frown k \parallel ⊥ \perp

Negaţii - modul matematic

6 < \not< 6 > \not>


6≤ \not\leq 6≥ \not\geq
6 ≺ \not\prec 6  \not\succ
6  \not\preceq 6  \not\succeq
6 ⊂ \not\subset 6 ⊃ \not\supset
6 ⊆ \not\subseteq 6 ⊇ \not\supseteq
6 v \not\sqsubseteq 6 w \not\sqsupseteq
174 Index de concepte şi comenzi TEX (plain TEX)

6= \not<=, \neq, \ne 6≡ \not\equiv


6 ∼ \not\sim 6 ' \not\simeq
6≈ \not\approx ∼
6= \not\cong
∈ / \notin

Săgeţi - modul matematic

← \leftarrow, \gets ←− \longleftarrow


→ \rightarrow, \to −→ \longrightarrow
↔ \leftrightarrow ←→ \longleftrightarrow
⇐ \Leftarrow ⇐= \Longleftarrow
⇒ \Rightarrow =⇒ \Longrightarrow
⇔ \Leftrightarrow ⇐⇒ \Longleftrightarrow
7 → \mapsto 7−→ \longmapsto
←- \hookleftarrow ,→ \hookrightarrow
( \leftharpoonup * \rightharpoonup
) \leftharpoondown + \rightharpoondown
*
) \rightleftharpoons ↑ \uparrow
↓ \downarrow l \updownarrow
⇑ \Uparrow ⇓ \Downarrow
m \Updownarrow % \nearrow
& \searrow . \swarrow
- \nwarrow

Delimitatori la stânga şi la dreapta - modul matematic

( ( [ [ or \lbrack b \lfloor
) ) ] ] or \rbrack c \rfloor
h \langle { \{ or \lbrace d \lceil
i \rangle } \} or \rbrace e \rceil
Index de concepte şi comenzi TEX (plain TEX) 175

Alte caractere − modul matematic

ℵ \aleph 0 \prime ∀ \forall


h̄ \hbar ∅ \emptyset ∃ \exists
ı \imath ∇
√ \nabla ¬ \neg or \lnot
 \jmath \surd [ \flat
` \ell > \top \ \natural
℘ \wp ⊥ \bot ] \sharp
< \Re k \l or \Vert ♣ \clubsuit
Im \Im 6 \angle ♦ \diamondsuit
∂ \partial 4 \triangle ♥ \heartsuit
∞ \infty \ \backslash ♠ \spadesuit

Simboluri internaţionale (caractere unite) - modul text

ff −→ ff fi −→ fi
ffi −→ ffi ffl −→ ffl
‘‘ −→ ‘‘ !‘ −→ ¡
\oe, \OE−→ œ, Œ \aa, \AA−→ å, Å
\ae, \AE−→ æ, Æ \o, \O −→ ø, Ø

fl −→ fl
’’ −→ ’’
?‘ −→ ¿
\l, \L −→ l, L
\ss −→ ß
cratima: -, liniuţa “en-dash”: --,
liniuţa “em-dash”: ---, semnul minus: −.
BIBLIOGRAFIE

[1] P.A. Blaga, H.F. Pop, LATEX 2ε , Editura Tehnică,


Bucureşti, (1999).
[2] M. Goossens, F. Mittelback & A. Samarin, The LA-
TEX Companion, Addison-Wesley Publishing Company,
Inc., (1994).
[3] D.E. Knuth, The TEXbook, Volume A of Computers and
Typesetting, Addison-Wesley Publishing Company,
(1984).
[4] L. Lamport, LATEX: A Document Preparation System,
Addison-Wesley Publishing Company, Inc., (1985).
[5] L. Lamport, LATEX: A Document Preparation System,
2nd ed., Addison-Wesley Publishing Company, Inc.,
(1994).
[6] C. Moroşanu, Elemente de bază ale sistemului TEXşi plain
TEX, Editura Univ. "Al.I. Cuza" Iaşi, ISBN
973-9312-99-3, Ediţia I, (2001);
[7] A. Pusztai, Gh. Ardelean, LATEX, Ghid de utilizare,
Editura Tehnică, Bucureşti, (1994).
[8] R. Seroul, S. Levy, A Beginner’s Book of TEX,
Springer-Verlag, New York Inc. (1991).
178 BIBLIOGRAFIE

[9] M. Spivak, The Joy of TEX, 2nd ed., American Mathe-


matical Society, Providence, R.I., (1990).

S-ar putea să vă placă și