CUPRINS
Prefa¸t˘ a .......................................................................................... 11 Capitolul 1: CE ESTE TEX ? ...................................................... 13 1.1 Originea TEX–ului........................................................... 13 1.2 Cum lucreaz˘ a TEX–ul ?................................................... 14 1.3 Caracterele TEX–ului ...................................................... 17 Caractere unite ................................................................ 19 Accente ............................................................................ 21 1.4 Secven¸te de control (comenzi sau instruc¸tiuni) ............... 22 1.5 Grupuri ¸si 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˘ arcate ........................................................ 33 2.2 Definirea de noi fonturi (fonturi TEX) ............................ 35 2.3 Scalarea unui font ........................................................... 36 2.4 Scalarea global˘ a .............................................................. 37 2.5 Fonturi ˆın modul matematic de lucru .............................. 38 ˘ Capitolul 3: SPATIERI, ¸ CONCATENARI S ¸ I SALTURI............. 41
8
Cuprins
3.1 Spa¸tieri orizontale ........................................................... Spa¸tii neˆıntrerupte ........................................................... Spa¸tierea orizontal˘ a arbitrar˘ a .......................................... 3.2 Spa¸tierea vertical˘ a ........................................................... 3.3 Spa¸tii care se extind ¸si care se comprim˘ a (glue) .............
41 42 42 43 44
3.4 3.5 3.6 3.7
48 51 52 52
Salturi ............................................................................. Spa¸tierea ¸si ˆıntreruperea ................................................. Spa¸tierea ˆıntre paragrafe ................................................. Alte tipuri de salturi .......................................................
3.8 Salturi negative ............................................................... 54 Capitolul 4: PARAGRAFE .......................................................... 57 4.1 ˆInceputul ¸si sfˆ ar¸situl unui paragraf ................................. 57 4.2 Alinierea implicit˘ a a paragrafelor.................................... 58 4.3 Generarea secven¸tial˘ a a liniilor ....................................... 58 4.4 Margini la stˆ anga ¸si la dreapta ....................................... 60 4.5 Centrarea textului ........................................................... 61 4.6 Itemiz˘ ari.......................................................................... 61 4.7 Prelucrarea mai multor alineate...................................... 65 4.8 Note de subsol................................................................. 66 4.9 Macroul item triplu ......................................................... 67 4.10 O alternativ˘ a pentru item ............................................. 68 Capitolul 5: ORGANIZAREA S¸ I PROIECTAREA PAGINILOR ............................................................ 71 5.1 Generarea implicit˘ a a unei pagini ................................... 71 5.2 Realizarea manual˘ a a ˆıntreruperii liniilor ¸si paginilor ...................................................................... 77 Capitolul 6: BOXURI................................................................... 81
Cuprins
9
6.1 Scrierea boxurilor ............................................................ 82 Stivuirea boxurilor (scrierea pe vertical˘ a) ........................ 82 Scrierea boxurilor pe orizontal˘ a ....................................... 83 6.2 Tipuri de boxuri.............................................................. 84 6.3 Opera¸tii cu boxuri........................................................... Asignarea unui box .......................................................... Utilizarea con¸tinutului unui box ...................................... Translarea pe vertical˘ a ¸si pe orizontal˘ a ............................ ˆIncadrarea ¸si divizarea unui box ......................................
86 86 87 89 90
6.4 Dimensiunile unui box..................................................... 92 6.5 Spa¸tii ˆı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˘ ari 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 MATEMATICA.................................... 105 8.1 Simboluri matematice ..................................................... 107 8.2 Fonturi ˆın modul matematic de lucru .............................. 112 8.3 Indici ¸si exponen¸ti........................................................... 113 8.4 Accente ˆın modul matematic de lucru ............................. 114 8.5 Spa¸tierea ˆın modul matematic de lucru ........................... 116 8.6 Frac¸tii.............................................................................. 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¸tiului dintre linii ...................................... 132 8.18 Separarea a dou˘ a linii.................................................... 132 8.19 Scrierea unei matrici generale ....................................... 133 8.20 Diagrame ....................................................................... 134 Capitolul 9: CE ESTE LATEX ..................................................... 137 9.1 Organizarea logic˘ a a documentului ................................. 139 9.1.1 Structura general˘ a a fi¸sierului surs˘a ............................. 139 9.2 Capitole ¸si sec¸tiuni .......................................................... 143 9.3. Etichete ¸si referin¸te........................................................ 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 ¸si comenzi TEX (plain TEX) ............................ 157 Bibliografie.................................................................................... 177
Prefa¸t˘ a
”Capul tˆ an˘ arului nu e un vas pe care s˘ a–l umpli, ci o f˘ aclie pe care s–o aprinzi, astfel ˆıncˆ at mai tˆ arziu s˘ a lumineze cu o lumin˘ a proprie.” Plutarh TEX este un produs program conceput pentru realizarea unor documente standard (articole, rapoarte, scrisori, c˘ ar¸ ti), ˆın special a acelor documente care con¸tin multe elemente de matematic˘ a (ecua¸tii, matrici etc.). Aceast˘ a carte este destinat˘a atˆ at ˆıncep˘ atorilor, cˆ at ¸si celor care au deja experien¸t˘ a ˆın utilizarea diferitelor versiuni ale sistemului TEX (LATEX, AMSTEX, AMSLATEX). Expunerea de fa¸t˘ a familiarizeaz˘ a cititorii cu cel mai performant sistem de formatat texte, conceput ˆın conformitate cu cele mai exigente standarde de tehnoredactare. Prin con¸tinutul ei se pune la dispozi¸tia utilizatorului atˆ at setul de comenzi de baz˘ a (TEX-ul virtual), cˆ at ¸si sistemul de macrouri (plain TEX); cartea este prima de acest fel ˆın limba romˆ an˘ a. Dac˘ a sunte¸ti ˆıncep˘ ator ˆın acest domeniu, citi¸ti fiecare capitol ¸si ˆıncerca¸ti s˘ a executa¸ti toate exemplele prezentate. Concentra-
12
Prefa¸t˘ a
¸ti-v˘ a aten¸tia asupra capitolelor 1-5 ¸si 8, dac˘ a dori¸ti scrierea textelor matematice. Cum cea mai bun˘ a metod˘ a de a ˆınv˘ a¸ta un limbaj de programare (sistemul TEX are asemenea caracteristici) este prin exemple, materialul de fa¸t˘ a con¸tine cel pu¸tin un exemplu de utilizare pentru fiecare concept sau comand˘ a TEX prezentat˘ a. Textul din exemplele prezentului material, atˆ at cel presupus c˘ a apare ˆın “fi¸sierul surs˘ a” cˆ at ¸si cel al documentului final (*.dvi), este scris (ˆın general) cu caractere de m˘ arime 8pt. Pentru scrierea comenzilor, am folosit fontul de tip ”ma¸sin˘ a de scris” (\tt). Cartea se bazeaz˘ a pe experien¸ta acumulat˘ a de autor ˆın perioada ˆın care a activat ca tehnoredactor la ”Analele S ¸ tiin¸tifice ale Univ. Al.I. Cuza” din Ia¸si, Sec¸tia Matematic˘ a (1992-1999), precum ¸si pe cursul ”Sisteme de texte” predat studen¸tilor din anul IV ai Universit˘ a¸tii ”Al.I. Cuza” din Ia¸si, Facultatea de Matematic˘ a, Sec¸tia Matematici Aplicate. Textul acestei c˘ ar¸ti a fost scris cu ajutorul procesorului plain TEX, folosind caractere de m˘ arime 12pt. ˆIntreg materialul rezultat a fost supus aten¸tiei urm˘ atorilor speciali¸sti: domnul Prof. Dr. V. Oproiu de la Facultatea de Matematic˘ a a Universit˘ a¸tii “Al.I. Cuza” din Ia¸si, domnul Conf. Dr. H.F. Pop de la Facultatea de Matematic˘ a ¸si Informatic˘ a a Universit˘ a¸tii “Babe¸sBolyai” din Cluj ¸si domnul Dr. C. Trenchea de la Institutul de Matematic˘ a ”O. Mayer” al Academiei Romˆ ane, Filiala Ia¸si. Pentru observa¸tiile pertinente ¸si pentru tot efortul depus, autorul dore¸ste s˘ a le adreseze tuturor mul¸tumirile cuvenite.
august 2000 Autorul
CAPITOLUL 1. CE ESTE TEX ?
1.1 Originea TEX–ului Sistemul TEX (se pronun¸t˘ a teh, ¸si nu tex!) a fost creat de renumitul matematician ¸si informatician american Donald E. Knuth, profesor la Universitatea Stanford din SUA. Descrierea acestui sistem este f˘ acut˘ a ˆın cartea The TEXbook, publicat˘ a de Compania Addison Wesley ˆın 1984 (vezi [2]). Produsul TEX este strˆ ans legat de c˘ ar¸tile lui Knuth “The Art of Computer Programming”. Cea de–a patra carte din aceast˘ a serie este dedicat˘ a dactilografierii computerizate (computer typesetting). Aici pot fi g˘ asite, dup˘ a propriile cuvinte ale lui Knuth, elementele de baz˘ a ale originii sistemului TEX. Dup˘ a cum este ¸si natural, prima versiune a sistemului TEX (denumit˘ a TEX simplu) a fost dezvoltat˘ a ˆın urm˘ atorii ani chiar de D.E. Knuth. Noul sistem astfel rezultat (denumit plainTEX), a fost extins de c˘ atre Michael D. Spivak ˆın 1990 (vezi [8]), ob¸tinˆ and versiunea AMS–TEX, versiune recunoscut˘ a de Societatea American˘ a de Matematic˘ a drept instrument oficial de preg˘ atire ¸si prezentare a manuscriselor ˆın vederea public˘ arii. O alt˘ a versiune de TEX a fost creat˘ a de c˘ atre Leslie Lamport, denumit˘ a LATEX (vezi [3]). Bazˆ andu–se pe colaborarea cu cei mai experimenta¸ti tehnoredactori din SUA, aceast˘ a versiune
14
Capitolul 1
respect˘ a conven¸tiile valabile ˆın SUA, multe dintre ele nefiind valabile ˆın Europa. Actualmente este cunoscut˘ a o versiune ¸si mai nou˘ a, denumit˘ a LATEX2ε (vezi [4], [5]). ˆIn limba romˆ an˘ a exist˘ a cartea semnat˘ a de Artur Pusztai & Gheorghe Ardelean (vezi [6]) care descrie versiunea LATEX 2.09, corespunz˘ atoare edi¸tiei ˆıntˆ ai a c˘ ar¸tii [3], precum ¸si o apari¸tie mai recent˘ a, cartea semnat˘ a de P.A. Blaga & H.F. Pop (vezi [1]). Facem precizarea c˘ a ˆın toate versiunile amintite mai sus este utilizat acela¸si set de macrouri TEX , anume TEX–ul simplu. Deosebirea dintre variante const˘ a ˆın apari¸tia de concepte ¸si defini¸tii specifice. A¸sadar, TEX–ul este un produs program destinat culegerii ¸si tip˘ aririi de texte cu ajutorul calculatorului (editare computerizat˘ a), texte ˆın care abund˘ a simboluri mai pu¸tin uzitate ˆın scrierea obi¸snuit˘ a (simboluri matematice, formule chimice etc.) ¸si care pot constitui un document: carte, articol, revist˘ a ¸stiin¸tific˘ a, scrisoare. ˆIn cele ce urmeaz˘ a vom referi produsul program TEX spunˆ and: sistemul TEX, procesorul TEX sau, pur ¸si simplu, TEX–ul. 1.2 Cum lucreaz˘ a TEX–ul ? TEX–ul nu este un sistem de tipul “what you see is what you get”, adic˘ a utilizatorul de TEX nu vede imediat forma final˘ a a textului (materialului) tocmai cules. Procesul de preg˘ atire 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˘ a este compilat (generˆ andu-se fi¸sierul de coduri obiect) ¸si ˆın urma edit˘ arii de leg˘ aturi se ob¸tine fi¸sierul executabil. Analog se petrec lucrurile ¸si ˆın cazul sistemului TEX. Se preg˘ ate¸ste “fi¸sierul surs˘ a” (cel ce con¸tine textul documentului), editat ˆın spiritul normelor ¸si conven¸tiilor recunoscute de sistemul TEX (vezi Pasul 1). A¸sa cum vom vedea mai tˆ arziu, acest “fi¸sier surs˘ a” con¸tine (printre altele) instruc¸tiuni primitive (numite ¸si
CE ESTE
TEX ?
15
comenzi sau secven¸te de control), macro–comenzi predefinite ale TEX-ului, macro–comenzi definite ˆın fi¸siere de stil (acestea vor fi apelate numai ˆın caz de necesitate), precum ¸si macro–defini¸tii dezvoltate de utilizator-ul de TEX. Fi¸sierul surs˘a astfel preg˘ atit este compilat (ˆın urma supunerii acestuia prelucr˘ arii procesorului TEX) ¸si linkeditat (dac˘ a a fost nevoie), ob¸tinˆ andu-se ˆın final fi¸sierul executabil (vezi Pasul 2). Etapa final˘ a const˘ a ˆın lansarea ˆın execu¸tie a fi¸sierului executabil (vezi Pasul 3, Pasul 4). TEX-ul lucreaz˘ a, ˆın esen¸t˘ a, sub sistemul de operare DOS. Versiunile adaptate la Windows recurg adeseori la prelucrarea “fi¸sierului surs˘ a” sub DOS. Procesorul TEX de baz˘ a (TEX–ul simplu) execut˘ a circa 300 de instruc¸tiuni primitive, destinate prelucr˘ arii (format˘ arii) textului propriu-zis, putˆ and interpreta macrolimbajul construit cu ajutorul acestor instruc¸tiuni primitive. La apelul procesorului este ˆınc˘ arcat ¸si fi¸sierul de formate (tfm), care con¸tine macrodefini¸tii suplimentare. ˆIn continuare, prezent˘ am mai ˆın detaliu pa¸sii necesari ob¸tinerii unui document imprimabil, folosindu-se procesorul TEX. Pasul 1. Preg˘ atirea “fi¸sierului surs˘ a”. Cu ajutorul unui editor oarecare de texte (de exemplu, vi sub sistemul de operare UNIX sau ne sub sistemul de operare MS–DOS) se construie¸ste un fi¸sier al c˘ arui sufix este tex. Vom apela ˆın cele ce urmeaz˘ a acest fi¸sier prin “fi¸sierul surs˘ a”. Sufixul tex nu este obligatoriu, dar folosirea lui simplific˘ a lucrul (ˆın cele ce urmeaz˘ a). Trebuie f˘ acut˘ a distinc¸tie ˆıntre editorul de texte folosit ˆın acest pas ¸si procesorul TEX. Odat˘ a editat, “fi¸sierul surs˘ a” este salvat pe unitatea de disc (sau un alt periferic preferat de utilizator) sub un nume stabilit de utilizator. ˆIn expunerile urm˘ atoare, vom utiliza denumirea generic˘ a nume–fi¸sier.tex. Pasul 2. Procesarea “fi¸sierului surs˘ a”. Presupunem c˘ a produsul
16
Capitolul 1
program TEX este instalat corect pe echipamentul de calcul al utilizatorului iar fi¸sierul (fi¸sierele) de prelucrat se afl˘ a ˆın subdirectorul curent. Procesarea unui “fi¸sier surs˘ a” are loc dac˘ a utilizatorul introduce de la tastatur˘a urm˘ atoarea comand˘ a: tex
nume–fi¸sier.tex
ˆıncheiat˘ a prin ap˘ asarea tastei Enter (CR). Schematic, acest pas poate fi reprezentat astfel:
nume-fi¸sier.tex
tex −−−−−−−−−−−→ ↑
nume-fi¸sier.dvi
fi¸siere tfm
Pasul 3. Vizualizarea documentului. Cu ajutorul comenzii (introdus˘ a de la tastatur˘ a ¸si ˆıncheiat˘ a prin ap˘ asarea tastei Enter): v
nume–fi¸sier.dvi
se poate vedea pe ecranul monitorului imaginea final˘ a a documentului ob¸tinut cu ajutorul procesorului TEX. Aceast˘ a comand˘ a folose¸ste utilitarul dviscr al produsului program TEX, care are rolul de a transpune informa¸tiile din fi¸sierul nume– fi¸sier.dvi pe ecran. Procesul de vizualizare permite identificarea unor erori ˆın document (de sintax˘ a sau de formatare), ˆınaintea tip˘ aririi (imprim˘ arii) acestuia pe hˆ artie.
CE ESTE
TEX ?
17
Pasul 4. Imprimarea documentului. Exist˘ a diferite utilitare (ˆın func¸tie de tipul imprimantei) cu ajutorul c˘ arora se poate ob¸tine documentul pe hˆ artie. Amintim aici doar pe cele mai utilizate, ¸si 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¸tionale sub sistemul de operare MS–DOS. 1.3 Caracterele TEX –ului ˆInainte de a trece la prezentarea instruc¸tiunilor procesorului TEX, s˘ a arunc˘ am o privire asupra tastaturii echipamentului de calcul. Procesorul recunoa¸ste 256 de caractere. Toate acestea se reg˘ asesc pe tastatur˘ a ¸si sunt reproduse ˆıntocmai ˆın textul tip˘ arit (cu pu¸tine excep¸tii, care vor fi precizate mai jos). Ele sunt ˆımp˘ ar¸tite (func¸tie de modul ˆın care un caracter este tratat de c˘ atre procesor) ˆın mai multe clase: Caractere A,...,Z ¸si a,...,z 0,...,9 $,#,%,&,\, {, },ˆ, , ˜ . ,;: ! ? ’ ‘” + = <> | ( ) [ ] /(slash) * -
Semnifica¸ t ie literele mari ¸si mici; cifrele; caractere speciale; semne de punctua¸tie; simboluri matematice; alte caractere.
Pe lˆ ang˘ a aceste caractere, procesorul TEX mai recunoa¸ste caracterele SP (bara spa¸tiu) ¸si CR (tasta inscrip¸tionat˘ a cu En-
18
Capitolul 1
ter la unele tastaturi). Toate aceste caractere pot fi ˆıntˆ alnite ˆıntr-un “fi¸sier surs˘ a”, fiind introduse prin intermediul tastaturii. Prezent˘ am ˆın continuare o descriere succint˘ a a celor mai semnificative caractere. Caracterele $,#,%,&,\, {, },ˆ, , ˜ (caractere cu rol de comenzi de control) sunt utilizate pentru a comunica cu procesorul TEX ˆıntr–un mod distinct (dup˘ a cum vom vedea imediat). Acestea nu sunt imprimabile dac˘ a apar ˆın “fi¸sierul surs˘ a” ca simple caractere. Pot fi imprimate dac˘ a ˆın “fi¸sierul surs˘ a” se scrie \$, \#, \%, \&, \backslash, \{, \}, \ˆ, \ , \˜, respectiv. Dintre acestea distingen ˆın primul rˆ and caracterul \ care are un rol fundamental ˆın procesarea textului. Un text ˆıncadrat la stˆ anga ¸si la dreapta de semnul $ anun¸t˘ a c˘ a acesta va fi tratat de procesor ˆıntr–un mod special (modul matematic de lucru, dup˘ a cum vom vedea mai tˆ arziu). Este esen¸tial de a “spune” TEX–ului c˘ a suntem ˆın modul matematic, deoarece o serie de reguli ¸si conven¸tii cap˘ at˘ a alt sens ˆın acest mod de lucru. Cˆ and TEX–ul ˆıntˆ alne¸ste caracterul %, atunci textul care urmeaz˘ a pe linia respectiv˘ a a “fi¸sierului surs˘ a” este ignorat de procesor ˆın opera¸tia de prelucrare. Astfel, cu ajutorul caracterului %, se pot introduce comentarii ˆıntr–un “fi¸sier surs˘ a”. Caracterele & ¸si # sunt utilizate drept parametri ˆın construc¸tiile mai complexe pe care le vom prezenta mai tˆ arziu (tabele, alinieri de formule matematice etc.). Caracterele {, } au ¸si ele o ˆıntrebuin¸tare special˘ a. Re¸tinem pentru moment doar c˘ a o pereche de acolade {...} define¸ste un grup (prin “...” am eviden¸tiat con¸tinutul grupului), iar dac˘ a delimiteaz˘ a un parametru al TEX-ului, atunci nu mai este considerat de procesor c˘ a perechea de acolade define¸ste un grup. Caracterele ˆ (superscript) ¸si (subscript) sunt utilizate numai ˆın modul matematic de lucru, iar caracterul ˜ este folosit pentru a defini un spa¸tiu de leg˘ atur˘ a (un spa¸tiu ˆıntre dou˘ a 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˘ atire a paginii de ie¸sire (layout)). Caracterele ‘ (apostrof deschis) ¸si ’ (apostrof ˆınchis) sunt utilizate pentru realizarea cit˘ arilor, ˆın timp ce caracterul ” are acela¸si efect cu dou˘ a ghilimele ˆınchise ”. Caracterul SP (spa¸tiu) nu este interpretat ˆıntotdeauna de c˘ atre procesor ca atare, adic˘ a o succesiune de mai multe spa¸tii are acela¸si efect cu unul singur. Ac¸tionarea tastei CR (Enter) o singur˘ a dat˘ a are drept consecin¸t˘ a trecerea cursorului pe linia urm˘ atoare (linie nou˘ a), iar procesorul interpreteaz˘ a aceasta ca un spa¸tiu. Ac¸tionarea tastei CR de dou˘ a ori conduce la introducerea unei linii goale ˆın “fi¸sierul surs˘ a”, ceea ce anun¸t˘ a procesorul c˘ a textul ce urmeaz˘ a dup˘ a linia vid˘ a este un nou alineat (paragraf). ˆIn fine, ac¸tionarea tastei CR de mai mult de dou˘ a ori antreneaz˘ a generarea a mai multor linii goale ˆın “fi¸sierul surs˘ a” dar, ˆın viziunea procesorului TEX, aceast˘ a situa¸tie este tratat˘ a ca mai sus (vezi “mai multe caractere SP”). A¸sadar, procesorul TEX este informat de ˆınceperea unui nou paragraf prin introducerea ˆın “fi¸sierul surs˘ a” a cel pu¸tin unei linii goale. Dup˘ a cum vom vedea mai tˆ arziu, tratarea unui text drept un paragraf nou poate fi anun¸tat˘ a procesorului folosind secven¸ta de control \par. Pornind de la caracterele de baz˘ a, plain TEX–ul genereaz˘ a o serie nou˘ a de caractere proprii. Prezent˘ am ˆın cele ce urmeaz˘ a dou˘ a tipuri de astfel de caractere: Caractere unite. O serie de combina¸tii de dou˘ a caractere (ˆın unele cazuri, precedate de \) determin˘ a procesorul s˘ a produc˘ a ˆın locul lor un caracter nou (de cele mai multe ori, prin concatenarea caracterelor ˆın cauz˘ a). De exemplu, dac˘ a “fi¸sierul surs˘ a” con¸tine secven¸ta de caractere fi (nu neap˘ arat sub form˘ a de cuvˆ ant), atunci, corespunz˘ ator acestora, procesorul va genera ˆın fi¸sierul de ie¸sire (cel cu extensia .dvi) caracterul unit fi. Iat˘ a lista celor mai multe astfel de caractere:
20
Capitolul 1
ff
−→
ff
fi
−→
fi
ffi
−→
ffi
ffl
−→
ffl
‘‘
−→
“
!‘
−→
¡
\oe, \OE −→
œ, Œ
\aa, \AA −→ ˚ a, ˚ A
\ae, \AE −→
æ, Æ
\o, \O
fl
−→
fl
’’
−→
”
?‘
−→
¿
\l, \L
−→
l, L
\ss
−→
ß
−→
ø, Ø
Un ultim caracter de tip unit este liniu¸ta. Procesorul TEX opereaz˘ a cu patru tipuri de astfel de liniu¸te, anume: • cratima: este utilizat˘ a pentru scrierea cuvintelor unite. Se ob¸tine prin scrierea ˆın “fi¸sierul surs˘ a” a unui singur caracter -. Facem observa¸tia c˘ a procesorul TEX este programat s˘ a insereze automat o cratim˘ a, la trecerea de pe un rˆ and pe altul, dup˘ a prima parte a cuvˆ antului divizat de el, ˆın vederea scrierii acestuia pe dou˘ a linii (corespunz˘ ator desp˘ ar¸tirii ˆın silabe ˆın englez˘ a). Pentru a realiza desp˘ ar¸tirea ˆın silabe ˆın limba romˆ an˘ a, trebuie inserat grupul de caractere “\−” ˆıntre silabele cuvˆ antului. • liniu¸ta “en-dash”: este dublul lungimii unei cratime; se ob¸tine prin scrierea ˆın “fi¸sierul surs˘ a” a dou˘ a caractere - -, consecutive. • liniu¸ta “em-dash”: este triplul lungimii unei cratime, se ob¸tine prin scrierea ˆın “fi¸sierul surs˘ a” a trei caractere - - -, consecutive.
CE ESTE
TEX ?
21
• semnul minus: este operatorul matematic de sc˘ adere ¸si este utilizat ˆın modul matematic de lucru. Exemplul 1.1. Urm˘ atoarea secven¸t˘ a din “fi¸sierul surs˘ a” sierul de ie¸sire secven¸ta: - - -, 1+2-3, $1+2-3$, va produce ˆın fi¸
-, - -,
-, –, —, 1+2-3, 1 + 2 − 3. S˘ a remarc˘ am c˘ a semnul minus difer˘ a de primele trei tipuri de liniu¸te, atˆ at prin lungime, cˆ at ¸si prin grosime. Accente. Pentru a ob¸tine un accent peste o liter˘ a, trebuie scris˘ a secven¸t˘ a de control corespunz˘ atoare accentului dorit, urmat˘ a de liter˘ a. Orice liter˘ a sau simbol poate seconda o secven¸ta de control de tip accent. Prezent˘ am ˆın continuare lista accentelor disponibile ˆın cadrul plain TEX–ului, folosind litera r drept argument:
\‘r
−→ `r
\ˆr
−→
ˆr
\= r
−→ ¯r
\b r
−→
\H r
−→ ˝r
\’r
−→
r ¯ ´r
\u r
−→ ˘r
\.r
−→
r˙
\v r
−→ ˇr
\c r
−→
¸r
\˜ r
−→
˜r
\t r
−→
r
\”r
−→
¨r
\d r
−→
r.
S˘ a observ˘ am c˘ a, pentru accentele ob¸tinute prin folosirea unei litere dup˘ a \, argumentul trebuie separat de aceasta printr–un spa¸tiu.
22
Capitolul 1
Pentru a pune un accent pe litera i, acest caracter trebuie mai ˆıntˆ ai degrevat de punct, lucru care se realizeaz˘ a dac˘ a se scrie “\i”. Aceea¸ si opera¸tie trebuie f˘ acut˘ a ¸si cu j. Exemplul 1.2. La ˆıntˆ alnirea secven¸tei de control \ˆ\i, procesorul plain TEX va produce caracterul ˆı. 1.4 Secven¸te de control (comenzi sau instruc¸tiuni) Secven¸tele de control sunt comenzi (instruc¸tiuni) ale procesorului plain TEX, menite s˘ a ajute utilizatorul, angajat ˆıntr–un proces de tehnoredactare computerizat˘ a. ˆIn continuare, principalul nostru scop ˆıl constituie descrierea comenzilor ¸si modul de utilizare a acestora. O instruc¸tiune ˆıncepe cu caracterul \ (backslash) (cu mici excep¸tii; vezi, de exemplu, caracterele unite) ¸si este urmat˘ a de o succesiune de caractere, nu neap˘ arat litere (vezi accentele). A¸sadar, mul¸timea secven¸telor de control recunoscute de procesorul plain TEX se ˆımparte ˆın dou˘ a clase: instruc¸tiuni cuvˆ ant: sunt acele comenzi care necesit˘ a un spa¸tiu ˆıntre denumirea secven¸tei ¸si urm˘ atorul caracter (diferit de caracterul \); instruc¸tiuni simbol: sunt acele comenzi care nu necesit˘ a spa¸tiu de separare fa¸t˘ a de materialul ce urmeaz˘ a dup˘ a acestea. Am folosit deja cˆ ateva secven¸te de control, de exemplu: \$, \%, \&, \par, \ˆ. 1.5 Grupuri ¸si moduri de lucru ˆın plain TEX. Dup˘ a cum se poate constata din paragraful §1.3, procesorul plain TEX recunoa¸ste drept grup acea parte a unui “fi¸sier surs˘ a” care nu reprezint˘ a un parametru al procesorului, delimitat de perechea de acolade {, }. Acolada deschis˘ a “{” marcheaz˘ a ˆınceputul grupului, iar acolada ˆınchis˘ a ”}” marcheaz˘ a sfˆ ar¸situl acestuia. Perechile $ ... $ ¸si $$ ... $$ definesc de asemenea grupuri.
CE ESTE
TEX ?
23
Exemplul 1.3. ˆIn urma proces˘ arii secven¸telor urm˘ atoare: 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, ¸si din nou text normal.
Observ˘ am c˘ a modificarea formei caracterelor are loc numai la nivelul grupului (local deci) a¸sa ˆıncˆ at, la p˘ ar˘ asirea grupului (adic˘ a dup˘ a simbolul ”}”), procesorul plain TEX reface automat forma curent˘ a a caracterelor (cea avut˘ a ˆınainte de a intra ˆın grup). Modalitatea cea mai elocvent˘ a de definire a unui grup este ˆıntˆ alnit˘ a la instruc¸tiunile care opereaz˘ a cu box–uri, anume: \hbox{ ... }, \vbox{ ... }, \vtop{ ... } ¸si \vcenter{ ... } (vezi Capitolul 6), precum ¸si la o serie de instruc¸tiuni de aliniere (vezi Capitolul 7). Defini¸tia 1.1. (regula de procesare a unui grup) Valorile asignate variabilelor din interiorul unui grup au caracter local (adic˘ a aceste valori sunt valabile numai ˆın interiorul grupului); la ie¸sirea din grup, valorile variabilelor locale sunt reasignate automat la valorile avute ˆınaintea intr˘ arii ˆın grup (sunt exceptate de la aceast˘ a regul˘ a acele variabile care, ˆın propria linie de defini¸tie, con¸tin secven¸ta \global ). Grupurile nu se pot suprapune. ˆIn dou˘ a grupuri suprapuse, unul trebuie s˘ a fie complet inclus ˆın cel˘ alalt. Exemplul 1.4. a) Urm˘ atoarea secven¸t˘ a constituie o definire corect˘ a de grupuri suprapuse: {XXX .... {YYY ... {ZZZ ....
zzz} ... yyy} ... xxx}.
ˆIntr-adev˘ ar, grupul {XXX .... xxx} con¸tine grupul {YYY ... yyy}, care, la rˆ andul s˘ au, con¸tine grupul {ZZZ .... zzz}. b) Urm˘ atoarea secven¸t˘ a constituie o definire de grupuri suprapuse: {XXX .... {YYY ...
$ ZZZ .... yyy} ... zzz$ ... xxx}.
24
Capitolul 1
ˆIn ultimul caz procesorul plain TEX va semnala un mesaj de eroare, deoarece utilizatorul ˆıncearc˘ a s˘ a ˆınchid˘ a grupul {YYY ... yyy} ˆınainte de a ˆınchide grupul $ ZZZ .... zzz$, care a ˆınceput ˆın interiorul s˘ au. Se pot defini grupuri ¸si folosind una dintre urm˘ atoarele perechi de secven¸te de control: \bgroup ...
\egroup
sau \begingroup ...
\endgroup.
Perechea de secven¸te \bgroup, \egroup constituie noua denumire pentru perechea de acolade {, }. Asta ˆınseamn˘ a c˘ a putem ˆınlocui o acolad˘ a deschis˘ a prin \bgroup, iar o acolad˘ a ˆınchis˘ a prin \egroup. Perechea de secven¸te \begingroup ... \endgroup nu este sinonim˘ a cu perechea de acolade; altfel spus, un grup ˆınceput cu \begingroup trebuie s˘ a se sfˆ ar¸seasc˘ a neap˘ arat cu \endgroup (ˆın timp ce un grup ˆınceput cu \bgroup poate fi ˆıncheiat cu ”}”). De ce aceast˘ a deosebire? Deoarece ultima modalitate de a defini un grup ne permite s˘ a construim mecanisme de verificare a erorilor mult mai complete decˆ at cele din cazul plain TEX–ului. De exemplu, sistemul LATEX–ul utilizeaz˘ a secven¸tele \begingroup, \endgroup pentru a defini un domeniu m˘ arginit de acestea. Mai precis, dac˘ a “fi¸sierul surs˘ a” con¸tine: \begin{document} ... \begin{theorem} ... \end{document}, atunci procesorul LATEX va semnala un mesaj de eroare prin care informeaz˘ a utilizatorul c˘ a secven¸ta \begin{theorem} nu are ˆın coresponden¸t˘ a secven¸ta \end{theorem}. La nivelul procesorului plain TEX asemenea tipuri de erori sunt greu de detectat.
CE ESTE
TEX ?
25
TEX–ul memoreaz˘ a valorile unui num˘ ar mare de variabile legate de: fonturi, dimensiunile unei pagini, spa¸tiul dintre linii ˆıntr–o pagin˘ a etc. De exemplu, parametrul \parindent (care furnizeaz˘ a procesorului m˘ arimea alineatului pentru prima linie a unui paragraf) are implicit valoarea 20pt. Presupunem c˘ a, temporar, aceast˘ a variabil˘ a trebuie setat˘ a cu 0 (zero), ˆın vederea scrierii cˆ atorva paragrafe f˘ ar˘ a alineat. Pentru a realiza acest lucru, putem proceda astfel: ˆın “fi¸sierul surs˘ a”, ˆınainte de primul paragraf ˆın cauz˘ a, introducem secven¸ta \parindent=0pt, iar dup˘ a ultimul, introducem secven¸ta \parindent=20pt. Acest mod de lucru este incomod, din simplul motiv c˘ a utilizatorul trebuie s˘ a cunoasc˘ a valoarea variabilei pe toat˘ a perioada edit˘ arii “fi¸sierului surs˘ a”. O metod˘ a simpl˘ a de rezolvare a unei asemenea probleme este de a utiliza grup–ul. Deci, ˆın “fi¸sierul surs˘ a” ar trebui scris˘ a o secven¸t˘ a de forma: {\parindent=0pt
... (material) ...
}
Aplicˆ and “regula de procesare a grupului” (vezi Defini¸tia 1.1) pentru situa¸tia de mai sus, avem: ˆın interiorul grupului valoarea parametrului \parindent este 0pt, iar la ie¸sirea din grup valoarea sa este automat adus˘ a la cea avut˘ a ˆın prealabil. ˆIn general, valorile atribuite unor variabile din interiorul unui grup (diferite de cele avute ˆın exteriorul grupului) sunt automat uitate de procesor dup˘ a p˘ ar˘ asirea grupului. Spunem c˘ a valorile lor au fost locale pentru acel grup, scutind astfel utilizatorul de a memora valorile pe toat˘ a perioada procesului de editare a “fi¸sierului surs˘ a”. Constat˘ am astfel c˘ a grupurile sunt mˆ anuite printr–un mecanism de tip stiv˘ a. Pentru a exemplifica acest lucru, s˘ a analiz˘ am urm˘ atoarele secven¸te ale unui “fi¸sier surs˘ a”:
26
Capitolul 1
Exemplul 1.5. \def\salut{Servus!} \parindent=12pt ........... material .......... {\def\salut{Ciao!} \parindent=2pt ............... } ........... material .......... ˆIn exemplul de mai sus, ˆın prima linie, am utilizat secven¸ta de control \def, prin care s–a atribuit parametrului \salut valoarea ‘Servus!’ (aceasta va fi valoarea global˘ a a parametrului), iar ˆın cadrul grupului i s–a atribuit valoarea ‘Ciao!’ (care reprezint˘ a valoarea local˘ a). Dac˘ a se dore¸ste ca dup˘ a procesarea grupului parametrul \salut s˘ a ˆı¸si p˘ astreze valoarea ‘Ciao!’, aceasta se poate realiza ˆınlocuind secven¸ta de control \def\salut{Ciao!} cu secven¸ta de control \global\def\salut{Ciao!} (vezi Defini¸tia 1.1). Pentru a discuta despre moduri de lucru ale TEX–ului, anticip˘ am faptul c˘ a entitatea de baz˘ a cu care opereaz˘ a procesorul, ˆın activitatea sa de generare a liniilor, ¸si, ˆın consecin¸t˘ a, a paginilor din fi¸sierul de ie¸sire nume–fi¸sier.dvi, este box–ul (pentru am˘ anunte, vezi Capitolul 6). ˆIn general vorbind, procesorul TEX plaseaz˘ a box–urile generate ˆıntr–o pagin˘ a, ˆın unul din urm˘ atoarele trei moduri de lucru (fiecare avˆ and cˆ ate dou˘ a submoduri de lucru): • modul vertical (cu submodurile: vertical obi¸snuit ¸si vertical intern);
CE ESTE
TEX ?
27
• modul orizontal (cu submodurile: orizontal obi¸snuit ¸si orizontal restrˆ ans); • modul matematic (cu submodurile: text matematic ¸si display matematic). Cˆ and este ˆınceput˘ a procesarea unui “fi¸sier surs˘ a”, procesorul TEX se g˘ ase¸ste ˆın submodul vertical obi¸snuit (recunoscut ca mod implicit de lucru). Procesorul TEX se afl˘ a ˆın unul din submodurile vertical de lucru atunci cˆ and preg˘ ate¸ste o stiv˘ a de box– uri, box–uri care vor fi aranjate pe vertical˘ a, de sus ˆın jos, unul peste altul, ˆın pagina de ie¸sire pe care acesta tocmai o genereaz˘ a. Cˆ and mul¸timea (stiva) de box–uri umple lungimea unei pagini, procesorul le ¸sterge din stiv˘ a pe cele tocmai prelucrate (dup˘ a ce au fost salvate ˆın documentul final) ¸si ˆıncepe generarea unei noi pagini (prin prelucrarea box–urilor r˘ amase ˆın stiv˘ a). Procesorul TEX se afl˘ a ˆın submodul orizontal obi¸snuit de lucru atunci cˆ and ˆıncepe prelucrarea unui paragraf. Toate box– urile ¸si caracterele ce alc˘ atuiesc paragraful sunt scrise ˆıntr–o list˘ a de lucru orizontal˘ a (o zon˘ a de memorie continu˘ a, ˆın care procesorul stocheaz˘ a temporar box–urile), de lungime egal˘ a cu suma lungimilor tuturor box–urilor ¸si caracterelor din cadrul paragrafului respectiv. Aceast˘ a list˘ a este divizat˘ a apoi ˆın linii mai mici, de lungime egal˘ a cu l˘ a¸timea unei pagini (\hsize), pe care le a¸seaz˘ a apoi una dup˘ a alta, ˆın pagina curent˘ a. Procesorul TEX se afl˘ a ˆın submodul orizontal restrˆ ans atunci cˆ and prelucreaz˘ a textul (materialul) din interiorul secven¸telor de control \hbox sau \halign. Comportarea procesorului ˆın acest caz este asem˘ an˘ atoare cu cea descris˘ a mai sus, doar c˘ a lista de lucru pe care o creeaz˘ a nu mai este divizat˘ a, ci doar este inclus˘ a ˆın pagina curent˘ a, ˆın locul ¸si cu lungimea ei real˘ a. Sfˆ ar¸situl prelucr˘ arii unui paragraf implic˘ a revenirea la modul implicit de lucru (modul vertical obi¸snuit). ˆIntˆ alnirea de c˘ atre Procesorul TEX a simbolului $ face ca modul implicit de lucru s˘ a fie comutat ˆın modul text matematic. ˆIn acest mod este construit˘ a o expresie matematic˘ a, care va fi
28
Capitolul 1
inclus˘ a ˆın lista orizontal˘ a de lucru. Modul display matematic este considerat atunci cˆ and materialul este delimitat, atˆ at la stˆ anga, cˆ at ¸si la dreapta, de dou˘ a semne $, adic˘ a $$ ... (material) ... $$. ˆIn aceast˘ a situa¸tie, procesorul construie¸ste o expresie matematic˘ a care va fi apoi plasat˘ a ˆın pagina curent˘ a, centrat, pe o singur˘ a linie. 1.6 Mesaje de eroare Firesc c˘ a este de dorit ca “fi¸sierul surs˘ a”, creat ˆın vederea ob¸tinerii unui document, s˘ a fie editat corect (atˆ at din punct de vedere al utilizatorului cˆ at ¸si al procesorului TEX), ˆınc˘ a de la introducerea lui pentru prima dat˘ a. Aceast˘ a situa¸tie este ˆıns˘ a destul de rar ˆıntˆ alnit˘ a, ˆıncˆ at activitatea de ob¸tinere a unui document final, corect din toate punctele de vedere, presupune eliminarea erorilor semnalate de procesor precum ¸si a celor de sintax˘ a sau semantic˘ a. ˆIn timpul proces˘ arii unui “fi¸sier surs˘ a”, la ˆıntˆ alnirea unei secven¸te de control eronate, procesorului TEX ˆıl informeaz˘ a pe utilizator printr–un mesaj de eroare afi¸sat pe monitor. Acest mesaj este stocat ˆıntr–un fi¸sier cu numele nume–fi¸sier.log, creat automat de procesor, astfel ˆıncˆ at nu este necesar˘ a memorarea acestuia (uneori, asemenea mesaje pot fi ˆın num˘ ar destul de mare). Fi¸sierul nume–fi¸sier.log poate fi folosit de utilizator atunci cˆ and reia procesul de editare a “fi¸sierului surs˘ a”, ˆın vederea elimin˘ arii erorilor tocmai depistate de procesor. O modalitate de a realiza acest lucru este de a folosi utilitarul ne, cu ajutorul c˘ aruia se pot deschide pe monitor dou˘ a subferestre, una pentru “fi¸sierul surs˘ a” ¸si alta pentru nume–fi¸sier.log. ˆIn continuare, sunt parcurse cele dou˘ a fi¸siere ˆın modul urm˘ ator: printr–un proces repetitiv, se cite¸ste mesajul de eroare din ....log, dup˘ a care se revine ˆın “fi¸sierul surs˘ a” ....tex pentru localizarea ¸si corectarea acesteia. Iat˘ a un mesaj de eroare, adesea ˆıntˆ alnit la ˆıncep˘ atori:
CE ESTE
TEX ?
29
! Undefined control sequence l.27 xxxxxx \hvill yyyyyy ? S¸ irurile xxxxxx ¸si yyyyyy reprezint˘ a textul din “fi¸sierul surs˘ a”, aflat ˆınainte ¸si dup˘ a eroare. Prin acest mesaj, procesorul TEX spune c˘ a ˆın linia 27 a “fi¸sierului surs˘ a”, secven¸ta de control \hvill nu ˆıi este cunoscut˘ a. Semnul ˆıntreb˘ arii este afi¸sat de procesor pentru a sugera utilizatorului c˘ a a¸steapt˘ a de la acesta un r˘ aspuns. Iat˘ a cˆ ateva r˘ aspunsuri posibile ale utilizatorului: • Ac¸tionarea tastei CR (Enter). Aceasta spune procesorului TEX c˘ a utilizatorul nu are nimic de spus. La acest r˘ aspuns, procesorul TEX va ˆıncerca s˘ a rezolve singur eroarea respectiv˘ a, dup˘ a care va continua procesarea textului ce urmeaz˘ a. ˆIn general, procesorul delimiteaz˘ a destul de bine zona unei erori, ˆıncˆ at paragrafele urm˘ atoare celui ˆın care s-a depistat eroarea nu sunt afectate de eroarea depistat˘ a ˆıntr–un paragraf precedent. Anumite erori sunt totu¸si dificil de dep˘ a¸sit, ceea ce va necesita afi¸sarea de c˘ atre procesor a mai multor mesaje de eroare pentru aceea¸si linie a “fi¸sierului surs˘ a”, ¸si implicit, necesitatea de a ac¸tiona de mai multe ori tasta CR de c˘ atre utilizator. • Tip˘ arirea literei H sau h, urmat˘ a de CR. La acest r˘ aspuns, procesorului TEX va oferi utilizatorului un mesaj prin care ˆıi comunic˘ a informa¸tii suplimentare ˆın leg˘ atur˘ a cu eroarea depistat˘ a. • Tip˘ arirea literei I sau i, urmat˘ a de textul dorit de utilizator va ˆınlocui pe cel de dinaintea ¸sirului yyyyyy, ˆıncheiat cu un CR. Pentru exemplul de mai sus, dac˘ a utilizatorul va r˘ aspunde prin a tip˘ ari i\hfill, atunci procesorul TEX va ˆınlocui secven¸ta \hvill cu secven¸ta \hfill, dup˘ a care va continua procesarea. Aten¸tie! ˆInlocuirea este f˘ acut˘ a doar temporar.
30
Capitolul 1
• Tip˘ arirea literei X sau x, urmat˘ a de CR. La acest r˘ aspuns, procesorul TEX va ˆıncheia activitatea de procesare a “fi¸sierului surs˘ a” respectiv, stocˆ and ˆın fi¸sierul de ie¸sire (nume– fi¸sier.dvi) paginile generate pˆ an˘ a ˆın acest punct. • Tip˘ arirea literei S sau s, urmat˘ a de CR. ˆIn aceast˘ a situa¸tie, TEX–ul va procesa tot materialul care urmeaz˘ a liniei ˆın care tocmai a depistat o eroare, f˘ ar˘ a a mai informa utilizatorul despre noile erori (dac˘ a acestea vor mai ap˘ area). Acest r˘ aspuns scute¸ste utilizatorul de a tasta CR la fiecare mesaj de eroare. • Tip˘ arirea literei R sau r, urmat˘ a de CR. Acest r˘ aspuns este asem˘ an˘ ator cu S, chiar mai puternic, deoarece ˆıi comunic˘ a TEX–ului s˘ a nu opreasc˘ a procesarea, chiar dac˘ a acesta nu g˘ ase¸ste un fi¸sier anume. • Tip˘ arirea literei Q sau q, urmat˘ a de CR. Acest r˘ aspuns este asem˘ an˘ ator cu R, ˆın plus, anuleaz˘ a toate mesajele destinate s˘ a apar˘ a pe monitor. ˆIn cel mai r˘ au caz, se poate ˆıntrerupe sau reseta sistemul de calcul, pentru a abandona procesarea unui anume “fi¸sier surs˘ a”. Alte mesaje de eroare obi¸snuite sunt: a)
! Overfull
\hbox
(urmat de un num˘ ar)
Acest mesaj de eroare nu este foarte grav; procesorul TEX chiar nu opre¸ste prelucrarea “fi¸sierului surs˘ a” curent. Eroarea este produs˘ a de faptul c˘ a procesorul este pus ˆın situa¸tia de a scrie anumite box–uri ˆın afara spa¸tiului de drept alocat aranj˘ arii ˆın pagin˘ a a liniei pe care tocmai a procesat–o (vezi secven¸ta \hbox din Capitolul 6). Dac˘ a dep˘ a¸sirea este foarte mare (≥ 100pt), atunci se recomand˘ a verificarea folosirii secven¸telor \line sau \centerline ˆın cadrul unui paragraf. b)
! Underfull \hbox
(sau Underfull
\vbox)
Procesorul TEX ignor˘ a ¸si acest mesaj, continuˆ and prelucrarea “fi¸sierului surs˘ a” curent.
CE ESTE
TEX ?
31
Un ultim mesaj de eroare pe care ˆıl prezent˘ am, se datoreaz˘ a lipsei din “fi¸sierul surs˘ a” a secven¸tei \end sau \bye. ˆIn aceast˘ a situa¸tie, procesorul TEX afi¸seaz˘ a pe ecranul monitorului caracterul ’*’, dˆ and posibilitatea utilizatorului s˘ a adauge text nou ˆın “fi¸sierul surs˘ a”. Dac˘ a nu dore¸ste acest lucru, atunci trebuie s˘ a tip˘ areasc˘ a neap˘ arat una din secven¸tele de mai sus, ¸si atunci va fi ˆıncheiat˘ a procesarea “fi¸sierului surs˘ a” curent. Ac¸tionarea tastei CR imediat dup˘ a caracterul ’*’ va produce afi¸sarea mesajului: (Please type a command or say ’\end’), obligˆ and–ul pe utilizator s˘ a tasteze secven¸ta \end. ˆIntr–o astfel de situa¸tie, imediat dup˘ a ˆıncheierea proces˘ arii, utilizatorul trebuie s˘ a adauge, ˆın “fi¸sierul surs˘ a” tocmai procesat, secven¸ta 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, boldface, ˆınclinat ¸si ma¸sin˘ a de scris (typewriter). Toate aceste fonturi apar¸tin unei familii mai largi, numit˘ a “Calcul Modern”. Fonturile de tip italic ¸si ˆınclinat sunt diferite. Cele mai multe sisteme care lucreaz˘ a cu TEX-ul ofer˘ a toate fonturile familiei “Calcul Modern” care, pe lˆ ang˘ a stilurile enumerate mai sus, includ ¸si alte stiluri (bold neextins, italic neˆınclinat, de exemplu). Se pot ob¸tine fonturi pentru alfabetele altor limbi decˆ at cea englez˘ a, precum ¸si o gam˘ a larg˘ a de caractere speciale. Fonturile utilizabile ˆın TEX se ˆımpart ˆın dou˘ a categorii: fonturi preˆınc˘ arcate (cele cunoscute de procesorul TEX ˆın momentul cˆ and acesta este lansat ˆın execu¸tie) ¸si fonturi TEX ¸(fonturi definite de utilizator). S˘ a le analiz˘ am pe rˆ and. 2.1 Fonturi preˆınc˘ arcate La lansarea ˆın execu¸tie a procesorului plain-TEX, fontul implicit al familiei “Calcul Modern”, cu care aceasta opereaz˘ a asupra materialului con¸tinut ˆın “fi¸sierul surs˘ a”, este fontul roman, de dimensiune 10 puncte tipografice (10pt). Procesorul TEX cunoa¸ste acest font sub numele (secven¸ta de control) \tenrm, iar fontul roman, corespunz˘ ator m˘ arimilor 7 respectiv 5 puncte tipografice,
34
Capitolul 2
este cunoscut de TEX sub numele \sevenrm ¸si \fiverm, respectiv. Exemplele urm˘ atoare ilustreaz˘ a modul de utilizare a acestor tipuri de fonturi. Remarc˘ a. Textul din exemplul urm˘ ator, precum ¸si din altele de acela¸si tip, trebuie ˆın¸teles astfel: textul din stˆ anga reprezint˘ a ”materialul” pe care utilizatorul ˆıl introduce ˆın ”fi¸sierul surs˘ a”, iar textul din dreapta reprezint˘ a ceea ce se ob¸tine ˆın urma proces˘ arii 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
Caract. de dim. 7pt} . . . . . . . . . . . . Caract. de dim. 7pt Caract. de dim. 10pt . . . . . . . . . . . . . . . . . Caract. de dim. 10pt
{\sevenrm
S˘ a remarc˘ am ˆın exemplul de mai sus utilizarea no¸tiunii de grup, ceea ce a permis procesorului s˘ a revin˘ a automat la stilul precedent de font (fontul roman 10pt, cel de dinaintea intr˘ arii ˆın grup). Iat˘ a lista complet˘ a a fonturilor nematematice preˆınc˘ arcate ale plain-TEX–ului: numele fi¸sierului-font cmr10 cmr7 cmr5
comanda-font \tenrm \sevenrm \fiverm
dimensiunea ¸si tipul caracterului roman, 10 puncte roman, 7 puncte roman, 5 puncte
cmbx10 cmbx7 cmbx5
\tenbf \sevenbf \fivebf
bold, 10 puncte bold, 7 puncte bold, 5 puncte
FONTURI UTILIZATE DE
cmti10 cmsl10 cmtt10
\tenit \tensl \tentt
plain TEX
35
italic, 10 puncte ˆınclinat, 10 puncte ma¸sin˘ a de scris, 10 puncte
ˆIn plus, pentru comenzile-font care reprezint˘ a fonturile corespunz˘ atore dimensiunii 10pt, plain-TEX-ul ofer˘ a abrevierile: \rm, \bf, \it, \sl, \tt. Exemplul 2.2. S¸ irul de secven¸te din Exemplul 1.3 pot fi scrise, f˘ ar˘ a a utiliza grupul, ˆın felul urm˘ ator: Text normal, \it text italic, \bf text boldface, \rm din nou text normal. Rezultatul proces˘ arii va fi acela¸si 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˘ a dorim s˘ a utiliz˘ am fontul roman, de dimensiune 8pt, care nu este preˆınc˘ arcat ˆın plain-TEX. Pentru aceasta, trebuie definit un nume care s˘ a fie asociat acestui nou font, iar apoi, acest nume s˘ a fie utilizat drept nume de font (secven¸t˘ a de control). Informa¸tia despre fiecare font nou definit este p˘ astrat˘ a ˆıntr-un fi¸sier special, stocat undeva ˆın memoria sistemului de calcul; ˆın cazul de fa¸t˘ a, pentru fontul roman de 8pt, familia “Calcul Modern” nume¸ste acest fi¸sier cmr8, ¸si ˆıi este furnizat procesorului TEX prin urm˘ atoarea secven¸t˘ a (ce trebuie inclus˘ a ˆın “fi¸sierul surs˘ a”, dac˘ a se dore¸ste utilizarea sa): \font\eightrm=cmr8 Odat˘ a ce definirea noii comenzi este ˆıncheiat˘ a, TEX-ul va trata recenta defini¸tie (\eightrm ˆın cazul de mai sus) exact ca pe o secven¸t˘ a de control predefinit˘ a (vezi sec¸tiunea §1.4). Exemplul 2.1 (prima parte) poate fi modificat astfel:
36
Capitolul 2
Exemplul 2.3. 10pt . . . . . . . . . . . . . . . . . . Caract. de dim. 10pt \eightrm Caract. de dim. 8pt . . . . . . . . . . . . Caract. de dim. 8pt \fiverm Caract. de dim. 5pt . . . . . . . . . . . . . . . . . Caract. de dim. 5pt Caract. de dim.
O serie de alte fonturi pot fi ob¸tinute prin combinarea celor cunoscute, ¸si anume: cmbxti10, cmbxsl10, cmitt10, cmsltt10, cmcsc10, cmss10 (fontul “sans-serif”), cmssdc10 (fontul “dc”; demibold condensed), cmssi10, cmdunh10 (fontul “Dunhill”) ¸si cmff10 (fontul “funny”). 2.3 Scalarea unui font Presupunem c˘ a avem nevoie de fontul roman de dimensiune 12pt, dar plain-TEX-ul instalat pe calculatorul pe care lucr˘ am are numai fontul roman, de dimensiune 10pt (cmr10). Se poate adapta fontul existent acestei necesit˘ a¸ti, prin scrierea ˆın “fi¸sierul surs˘ a” a urm˘ atoarei secven¸te: \font\twelverm=cmr10 at 12pt ceea ce va spune procesorului TEX s˘ a ˆınmul¸teasc˘ a dimensiunea fontului cmr10 cu factorul 12/10=1.2, ob¸tinˆ and astfel fontul roman, de dimensiune 12pt. Construc¸tia urm˘ atoare are exact acela¸si rezultat: \font\twelverm=cmr10 scaled 1200
(2.1)
Scalarea cu 1000 este ˆın¸teleas˘ a ca fiind echivalent˘ a cu un factor de scalare egal cu 1, scalarea cu 1200 este echivalent˘ a cu factorul de scalare egal cu 1.2 (adic˘ a cre¸sterea cu 20% a dimensiunii caracterelor, fa¸t˘ a de dimensiunile recunoscute implicit), scalarea cu 500 corespunde factorului 0.5 (adic˘ a o reducere cu 50% a dimensiunii caracterelor, fa¸t˘ a de dimensiunile implicite) ¸s.a.m.d. Plain TEX-ul dispune ¸si de urm˘ atoarele secven¸te de control, destinate urm˘ aririi scal˘ arilor:
FONTURI UTILIZATE DE
\magstep1 \magstep2
plain TEX
echivalent cu echivalent cu
37
1000pt*1.2=1200pt 1000pt*1.2*1.2=1440pt
.. . \magstep5
echivalent cu
1000pt*5*1.2=2488pt.
Folosind aceast˘ a conven¸tie, construc¸tia (2.1) poate fi scris˘ a, ˆın mod echivalent, astfel: \font\twelverm=cmr10 scaled 1200 Exist˘ a de asemenea secven¸ta√de control \magstephalf, care corespunde factorului de scalare 1.2=1.09545≈11pt. 2.4 Scalarea global˘ a Scriind, la ˆınceputul “fi¸sierului surs˘ a”, urm˘ atoarea secven¸t˘ a de control: \magnification=1200, ˆıntregul document va fi m˘ arit cu 20%. Exist˘ a o restric¸tie important˘ a ˆın ce prive¸ste utilizarea acestei secven¸te de control, anume: scalarea global˘ a poate fi setat˘ a o singur˘ a dat˘ a. Este ilegal˘ a modificarea acestei scal˘ ari ˆın timpul proces˘ arii unui “fi¸sier surs˘ a”. Totu¸si, se pot face scal˘ ari numai asupra anumitor fonturi. Efectele secven¸tei \magnification sunt astfel combinate cu cele ale defini¸tiilor de fonturi noi. De exemplu, dac˘ a se utilizeaz˘ a fontul \twelverm, definit mai sus, ˆımpreun˘ a cu factorul de scalare \magstep1, ˆıntr-un text surs˘ a care ˆıncepe cu secven¸ta de control: \magnification=\magstep1, rezultatul va fi un font m˘ arit cu factorul 1.2*1.2, adic˘ a cu 44% (efectul produs de \magstep2). Prin utilizarea secven¸tei \magnification, toate dimensiunile sunt crescute cu 20%. Dac˘ a ˆıntr-un anumit loc al documentului final se dore¸ste o spa¸tiere de 1in (1 inch=1.27cm) ˆıntre linii,
38
Capitolul 2
atunci ˆın “fi¸sierul surs˘ a” trebuie scris˘ a secven¸ta \vskip .833in deoarece: 1/1.2 = 0.833 (deci 0.833in m˘ arit cu 20% ne d˘ a 1in). Pentru a evita aceast˘ a opera¸tie, se poate folosi secven¸ta de control urm˘ atoare: \hskip 1truein Cˆ and procesorul TEX ˆıntˆ alne¸ste grupul de litere true, acesta divide valoarea care ˆıi urmeaz˘ a (adic˘ a 1 ˆın exemplul de mai sus) prin factorul de scalare global curent, ˆınainte de a procesa secven¸ta de control \hskip, ob¸tinˆ andu-se a¸sa numitul salt adev˘ arat. 2.5 Fonturi ˆın modul matematic de lucru Procesorul TEX are un mecanism destul de sofisticat de a mˆ anui fonturile ˆın modul matematic de lucru. Acesta alege automat o dimensiune mai mic˘ a pentru un caracter care este subscris sau superscris altui caracter (exponent inferior sau superior, respectiv) ¸s.a.m.d. Exemplul 2.4. Analiza¸ti rezultatul proces˘ arii (textul din dreapta) secven¸telor urm˘ atoare (textul din stˆ anga): $S-Bˆ{R S }$ $S-B {R S}$ . . . . . . . . . . . . . . . S − B RS S − BRS ˆIn exteriorul modului matematic de lucru, TEX-ul utilizeaz˘ a fontul \tenrm iar ˆın cadrul modului matematic, acesta utilizeaz˘ a: \tenrm, pentru caracterele ”normale”, \sevenrm, pentru primul subscript ¸si primul superscript ¸si \five, pentru al doilea subscript ¸si superscript (vezi Exemplul 2.4). S˘ a remarc˘ am c˘ a defini¸tiile de fonturi, realizate cu secven¸ta de control \font, nu au efect ˆın modul matematic de lucru. Schimbarea fonturilor ˆın modul matematic se poate face utilizˆ and secven¸ta de control \hbox (care transform˘a, temporar, modul de lucru matematic ˆın cel orizontal) sau prin utilizarea unei secven¸te mai speciale (secven¸ta \fam).
FONTURI UTILIZATE DE
plain TEX
39
Exemplul 2.5. Rezultatul proces˘ arii secven¸tei: $B$, $ \eightrm A$, { \eightrm$ A$, $ \ hbox{A}$ } este:
B,A,A,A
˘ CAPITOLUL 3. SPATIERI, ¸ CONCATENARI S ¸I SALTURI
3.1 Spa¸tieri orizontale Am v˘ azut deja c˘ a procesorul TEX trateaz˘ a ˆın mod special spa¸tiile ¸si caracterele SP ¸si CR, ˆın sensul c˘ a acestea nu apar ˆın mod explicit ˆın documentul final. Pentru completitudine, amintim din nou regulile pe care le folose¸ste procesorul TEX atunci cˆ and ˆıntˆ alne¸ste caracterele SP ¸si (sau) CR ˆıntr-un “fi¸sier surs˘ a” (vezi ¸si §1.3): • cˆ ateva spa¸tii consecutive ˆın “fi¸sierul surs˘ a” genereaz˘ a un singur spa¸tiu ˆın documentul final, • un singur CR este echivalent cu un spa¸tiu, generˆ and un singur spa¸tiu ˆın documentul final; ˆın particular, CR absoarbe spa¸tiile de la sfˆ ar¸situl liniei precedente ¸si de la ˆınceputul liniei urm˘ atoare, • dou˘ a sau mai multe CR-uri ˆınl˘ an¸tuite (ceea ce, ˆın “fi¸sierul surs˘ a”, este echivalent cu una sau mai multe linii goale) anun¸t˘ a un nou paragraf pentru procesor, • unul (sau mai multe spa¸tii) (sau un singur CR) dup˘ a o secven¸t˘ a de control, urmat de alte caractere recunoscute de TEX, nu produce spa¸tii ˆın documentul final; acestea doar indic˘ a sfˆ ar¸situl secven¸tei de control.
42
Capitolul 3
Exemplul 3.1. Analiza¸ti rezultatul proces˘ arii secven¸tei: \TeX book, care este: TEXbook. (S˘ a observ˘ am c˘ a spa¸tiul ce urmeaz˘ a secven¸tei \TeX nu va mai ap˘ area ˆın documentul final.) Ultima regul˘ a (din cele enumerate mai sus) poate fi ˆımbun˘ at˘ a¸tit˘ a prin introducerea secven¸tei de control \ (un “backslash”, urmat de unul sau mai multe spa¸tii, desemnate aici prin ’ ’), care for¸teaz˘ a procesorul TEX s˘ a produc˘ a un spa¸tiu ˆın documentul final. Aceast˘ a secven¸t˘ a opereaz˘ a atˆ at ˆın modul de lucru orizontal, cˆ at ¸si ˆın cel matematic. Exemplul 3.2. {\TeX} book ¸si \TeX\
Procesarea secven¸telor de control: book are acela¸ si efect, anume: TEX book.
Spa¸tii neˆıntrerupte. Am v˘ azut c˘ a simbolul ˜ (tilda) are un ˆın¸teles special ˆın plain TEX; acesta reprezint˘ a o leg˘ atur˘ a, adic˘ a un spa¸tiu unde procesorului nu ˆıi este permis˘ a divizarea liniei de lucru ˆın procesul de construire a acesteia. Vom vedea mai tˆ arziu cum putem ob¸tine spa¸tii neˆıntrerupte de orice lungime. Caracterul ˜ mai are ¸si o alt˘ a func¸tie important˘ a: aceea de definire a unui spa¸tiu normal; acest spa¸tiu “normal” se comport˘ a mai bine decˆ at un spa¸tiu de dup˘ a un semn de punctua¸tie (vezi secven¸ta a doua din Exemplul 3.2). De exemplu, procesorul TEX genereaz˘ a spa¸tiul de dup˘ a o virgul˘ a dintr-un “fi¸sier surs˘ a”, pu¸tin mai mare decˆ at un spa¸tiu “normal”. Spa¸tierea orizontal˘ a arbitrar˘ a. Pentru a ob¸tine un spa¸tiu orizontal (un spa¸tiu ˆıntre dou˘ a cuvinte) mai mare, se poate folosi secven¸ta de control \hskip, urmat˘ a de o valoare (care va reprezenta dimensiunea spa¸tiului ce se dore¸ste a fi generat). Cele mai obi¸snuite unit˘ a¸ti pentru dimensiuni sunt: inch-ul (prescurtat in), punctul tipografic (pt); 1in≈72pt, picas (pc); 1pc=12pt. Dimensiunea poate fi exprimat˘ a ¸si metric, cu ajutorul centimetrilor (cm) ¸si al milimetrilor (mm).
˘ SPATIERI, ¸ CONCATENARI S ¸ I SALTURI
43
Exist˘ a de asemenea o unitate de dimensiune a spa¸tiului orizontal, em, care depinde de m˘ arimea fontul curent. ˆIn mod obi¸snuit, aceast˘ a unitate are l˘ a¸timea literei “m”, ˆıns˘ a poate ¸si s˘ a difere. De exemplu, pentru fonturile de tipul \rm, de dimensiune 10pt, adic˘ a pentru 1em=10pt, caracterul “m” m˘ asoar˘ a pu¸tin sub 8pt. Aceast˘ a ultim˘ a unitate de m˘ asur˘ a este util˘ a dac˘ a se dore¸ste ca spa¸tierea s˘ a fie propor¸tional˘ a cu m˘ arimea fontului. Plain TEXul are trei secven¸te de control predefinite care genereaz˘ a acest tip de spa¸tii propor¸tionale: • \quad • \qquad • \enskip
corespunde secven¸tei 1em; corespunde secven¸tei de control \quad\quad; corespunde secven¸tei 0.5em.
Am v˘ azut c˘ a, dac˘ a avem specificat˘ a secven¸ta de control \magnification, toate dimensiunile sunt ˆınmul¸tite cu factorul de magnificare specificat, exceptˆ and cele ale c˘ aror unit˘ a¸ti de m˘ asur˘ a sunt precedate de cuvˆ antul cheie true. De exemplu, dac˘ a ˆın “fi¸sierul surs˘ a” avem secven¸ta \hskip 1truein, procesorul TEX va genera un spa¸tiu egal cu 1in ˆın documentul final; altfel spus, magnificarea nu mai este operant˘ a asupra secven¸tei \hskip, ˆın a c˘ arei defini¸tie este prezent parametrul true. 3.2 Spa¸tierea vertical˘ a Spa¸tierea vertical˘ a ˆınseamn˘ a o spa¸tiere ˆıntre paragrafe. Multe din cele ˆıntˆ alnite ˆın cadrul spa¸tierii orizontale se aplic˘ a, ˆın mod egal, ¸si ˆın cadrul acestui tip de spa¸tiere. Generarea unui spa¸tiu vertical se face prin scrierea ˆın “fi¸sierul surs˘ a” a secven¸tei de control \vskip, urmat˘ a de o valoare. Corespondentul vertical pentru em este ex. S¸ i unitatea ex depinde de fontul curent; aceasta este aproximativ egal˘ a cu ˆın˘ al¸timea literei “x” (adic˘ a 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
• \medskip • \bigskip
cu o diferen¸t˘ a de ±1pt; corespunde unui salt de 6pt, cu o diferen¸t˘ a de ±2pt; corespunde unui salt de 12pt, cu o diferen¸t˘ a de ±4pt.
3.3 Spa¸tii care se extind ¸si care se comprim˘ a (glue) ˆIn practic˘ a, secven¸tele de control \hskip ¸si \vskip nu sunt suficient de capabile de a satisface cerin¸tele unei pagini din documentul final. Pentru a ob¸tine un paragraf (ceea ce pentru procesorul de TEX este echivalent cu a genera o mul¸time de linii cu aceea¸si lungime), este necesar˘ a extinderea sau comprimarea, ˆıntr-o oarecare m˘ asur˘ a, a spa¸tiului dintre cuvinte. La rˆ andul lor, paginile trebuie s˘ a aib˘ a aceea¸si m˘ arime ¸si, deoarece fiecare pagin˘ a ˆın parte poate avea multe elemente diferite (figuri, ecua¸tii etc.), este destul de dificil s˘ a se realizeze o spa¸tiere uniform˘ a ˆıntre elemente dintr-o pagin˘ a. Procesorul de TEX permite ad˘ augarea de spa¸tii elastice (glue) ˆın propriul document. Pentru a ob¸tine extensii ¸si comprim˘ ari ale spa¸tiului, se folose¸ste una din comenzile obi¸snuite de spa¸tiere (\hskip sau \vskip), urmat˘ a de un ¸sir de trei valori care reprezint˘ a: cantitatea “ideal˘ a” de spa¸tiu cerut a fi generat, cantitatea cu care poate fi m˘ arit˘ a (extins˘ a) cantitatea “ideal˘ a” ¸si cantitatea cu care poate fi mic¸sorat˘ a (comprimat˘ a) cantitatea “ideal˘ a”. Ultimele dou˘ a valori sunt precedate de cuvintele cheie plus ¸si minus, respectiv. Exemplul 3.3. La ˆıntˆ alnirea \hskip 10pt plus 2pt minus 3pt,
secven¸tei
de
control
procesorul TEX va genera un spa¸tiu cuprins ˆıntre 7pt ¸si 12pt (depinzˆ and de restric¸tiile de dimensiune ale paginii) ¸si va ˆıncerca s˘ a genereze un spa¸tiu de o dimensiune cˆ at mai apropiat˘ a valorii de 10pt. Aceast˘ a valoare optim˘ a este numit˘ a valoarea ideal˘ a a
˘ SPATIERI, ¸ CONCATENARI S ¸ I SALTURI
45
opera¸tiei de extensie-comprimare. Atˆ at partea plus, cˆ at ¸si partea minus pot lipsi, dar, dac˘ a sunt prezente amˆ andou˘ a, atunci plus trebuie s˘ a precead˘ a pe minus. Cum procedeaz˘ a procesorul TEX s˘ a decid˘ a cu cˆ at trebuie s˘ a extind˘ a sau s˘ a comprime? Pentru aceasta trebuie cunoscut modul ˆın care sunt construite paragrafele ¸si paginile. ˆIn linii mari, un alineat (paragraf) este creat de c˘ atre procesorul TEX ˆın trei etape: 1. ˆın prima faz˘ a, procesorul TEX ˆıncarc˘ a ˆıntregul paragraf ˆıntr-o singur˘ a linie (linia de lucru), de lungime egal˘ a cu suma lungimilor elementelor care alc˘ atuiesc paragraful; 2. ˆın continuare, procesorul ˆımparte aceast˘ a linie ˆın cˆ ateva linii, de lungime aproximativ egal˘ a cu \hsize (parametrul care furnizeaz˘ a l˘ a¸timea paginii). Pentru a o g˘ asi pe cea optim˘ a, opera¸tia de ˆımp˘ ar¸tire este realizat˘ a ˆın mai multe variante; 3. dac˘ a o linie este prea scurt˘ a, atunci procesorul o extinde, propor¸tional cu factorul de extensie declarat de utilizator. Similar, dac˘ a o linie este prea lung˘ a procesorul o comprim˘ a. Evident, un spa¸tiu care este declarat f˘ ar˘ a parametrii plus sau minus nu ˆı¸si schimb˘ a m˘ arimea, deoarece acesta nu este elastic. Am v˘ azut ˆın exemplul anterior c˘ a secven¸ta de control \hskip 10pt plus 2pt minus 3pt face ca procesorul s˘ a genereze un spa¸tiu aproximativ, situat ˆıntre limitele 7pt ¸si 12pt, f˘ ar˘ a a pretinde c˘ a valoarea aproximativ˘ a este suficient de corect˘ a. Dac˘ a o linie e prea scurt˘ a, chiar ¸si dup˘ a ce a fost ad˘ augat factorul s˘ au de extensie, procesorul va m˘ ari factorul de extensie ¸si va tip˘ ari pe ecran un mesaj referitor la acest lucru: Underfull \hbox (badness 10000) detected at line nr-linie Eroarea depistat˘ a ˆıntr-o asemenea linie a ”fi¸sierului surs˘ a” este o m˘ asur˘ a relativ˘ a a extensiei sau comprim˘ arii f˘ acute de procesor, ˆın vederea satisfacerii, ˆıntr-un mod optim, a restric¸tiilor
46
Capitolul 3
impuse asupra l˘ a¸timii acesteia. O linie cu o elasticitate mai mare poate fi extins˘ a ¸si comprimat˘ a mai bine decˆ at una cu o elasticitate mai mic˘ a. Totu¸si, se ob¸tine aceea¸si evaluare a erorii. Dac˘ a eroarea este 10000 (valoarea maxim˘ a), atunci opera¸tia de extensie-comprimare este ˆın afara limitelor declarate de utilizator. Pe de alt˘ a parte, dac˘ a o linie este prea lung˘ a, chiar dup˘ a comprimare, procesorul nu o va supracomprima; o genereaz˘ a atˆ at de lung˘ a (cˆ at factorul de comprimare o permite) ¸si informeaz˘ a utilizatorul cu un mesaj de eroare de felul urm˘ ator: Overfull \hbox (urmat de un num˘ ar), ad˘ augˆ and documentului final o linie groas˘ a (un dreptunghi negru) ˆın dreptul liniei ˆın cauz˘ a. Elasticitatea opera¸tiei de extensie-comprimare vertical˘ a este utilizat˘ a de asemenea de TEX pentru a realiza paginile documentului final, ˆın conformitate cu m˘ arimea prescris˘ a de utilizator. Procesul de divizare este similar cu cel de la linii. Liniile ¸si paginile sunt cazuri particulare de box-uri orizontale ¸si verticale (vezi am˘ anunte ˆın Capitolul 6). Cˆ and procesorul TEX construie¸ste un box, a c˘ arui m˘ arime este fixat˘ a dinainte, acesta folose¸ste elasticitatea opera¸tiei de extensie-comprimare pentru a o ˆınlocui pe cea prescris˘ a. Cu alte cuvinte, dac˘ a l˘ a¸timea (pentru un box orizontal) sau ˆın˘ al¸timea (pentru un box vertical) con¸tinutului unui box este mai mic˘ a decˆ at l˘ a¸timea sau ˆın˘ al¸timea boxului de creat, procesorul extinde con¸tinutul din interiorul boxului, ˆıncercˆ and s˘ a satisfac˘ a l˘ a¸timea cerut˘ a prin secven¸ta elastic˘ a; invers se petrec lucrurile ˆın cazul ˆın care l˘ a¸timea sau ˆın˘ al¸timea con¸tinutului unui box este mai mare decˆ at a boxului de creat (procesorul comprim˘ a con¸tinutul din interiorul boxului). ˆIn exemplele urm˘ atoare vom utiliza secven¸ta de control \line, a c˘ arei efect este de a genera ˆın documentul final o linie de lungime egal˘ a cu valoarea parametrului \hsize. Exemplul
3.4.
Presupunem c˘ a \hsize=327pt ¸si c˘ a
˘ SPATIERI, ¸ CONCATENARI S ¸ I SALTURI
47
”fi¸sierul surs˘ a” con¸tine secven¸ta de control: \line{X \hskip 60pt B \hskip 100pt C\hskip 40pt D} Procesarea acestei secven¸te va conduce la ob¸tinerea ˆın documentul final a urm˘ atoarei linii: X
B
C
D
Deoarece lungimea con¸tinutului din interiorul acoladelor este 200pt+4*7pt=228pt < 327pt, atunci procesorul va semnala utilizatorului aceast˘ a diferen¸t˘ a printr-un “Underfull box”. De¸si deficitul de spa¸tiu este de 99pt, constat˘ am c˘ a procesorul a distribuit con¸tinutul dintre acolade pe toat˘ a lungimea liniei, procedˆ and astfel la extensia acestuia. Dac˘ a ˆınlocuim secven¸ta de mai sus cu urm˘ atoarea (se adaug˘ a secven¸ta plus): Exemplul 3.40 . \line {X \hskip 60pt plus 100pt B \hskip 100pt C\hskip 40pt plus 50pt D} atunci, f˘ acˆ and calculele ca mai ˆınainte, se constat˘ a c˘ a procesorul va dispune de spa¸tiu mai mult decˆ at suficient pentru a acoperi deficitul, ˆıncˆ at nu va mai semnala un mesaj de tipul celui de mai sus (linie prea scurt˘ a). Rezultatul proces˘ arii secven¸tei anterioare va fi: X
B
C
D
Prin folosirea secven¸tei elastice din Exemplul 3.40 , deficitul de 99pt a fost ˆımp˘ ar¸tit propor¸tional celor dou˘ a secven¸te elastice, adic˘ a, deoarece 100pt reprezint˘ a 2/3 din 150pt=100pt+50pt, atunci prima defini¸tie elastic˘ a va conduce la extensia spa¸tiului dintre X ¸si B cu 66pt iar a celui dintre C ¸si D cu 33pt. Spa¸tiul dintre B ¸si C nu va fi extins, ˆıntrucˆ at defini¸tia corespunz˘ atoare acestuia nu este elastic˘ a.
48
Capitolul 3
3.4 Salturi Din punct de vedere al procesorului TEX, secven¸tele de control destinate salturilor nu creeaz˘ a spa¸tiu nou; ele doar completeaz˘ a spa¸tiul creat de o alt˘ a secven¸t˘ a de control. Plain TEX-ul are cˆ ate dou˘ a tipuri predefinite de secven¸te de control pentru completarea spa¸tiului orizontal ¸si a celui vertical. Acestea se numesc \hfil, \hfill, \vfil ¸si \vfill. Dac˘ a ˆın “fi¸sierul surs˘ a” avem una din urm˘ atoarele secven¸te de control: {\hfill AAB CDD} sau {AAB\hfill CDD} sau ˆınc˘ a {AAB CDD \fill}, procesorul TEX le trateaz˘ a ˆın mod obi¸snuit, adic˘ a ˆın cadrul unui grup nu se poate crea un anumit spa¸tiu vid, ˆıncˆ at prezen¸ta comenzii \hfill ˆın cadrul blocurilor anterioare este inefectiv˘ a. Exemplul 3.5. S˘ a gener˘ am acum un spa¸tiu vid prin for¸tarea lungimii grupul la 1.2in (vezi Capitolul 6, §6.4). A¸sadar, fie secven¸tele: \hbox to 1.2in {$|$ AAB\hfill CDD $|$} sau \hbox to 1.2in {$|$ \hfill AAB\hfill CDD\hfill $|$} procesarea c˘ arora va genera ˆın documentul final: | AAB CDD | ¸si | AAB CDD |, respectiv. Observ˘ am c˘ a saltul este f˘ acut ˆın limita spa¸tiului disponibil. Iat˘ a acum un exemplu pentru cazul vertical. Exemplul 3.6. S˘ a gener˘ am un spa¸tiu vid ˆın interiorul unui box vertical, a c˘ arui ˆın˘ al¸time s˘ a fie 20mm. Una din urm˘ atoarele secven¸te de control rezolv˘ a aceast˘ a problem˘ a:
˘ SPATIERI, ¸ CONCATENARI S ¸ 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¸te de control conduce la ob¸tinerea urm˘ atorului box vertical: AAB
CDD Ca ¸si ˆın cazul orizontal, saltul este f˘ acut ˆın limita spa¸tiului disponibil. S-a observat ˆın cadrul opera¸tiei de extensie-comprimare (vezi Exemplul 3.40 ) c˘ a, datorit˘ a elasticit˘ a¸tii acesteia, spa¸tiul este rearanjat pˆ an˘ a la un anumit punct (dictat de valorile furnizate procesorului prin cuvintele cheie plus ¸si minus). Completarea secven¸telor de salt cu defini¸tii de tip elastic nu numai c˘ a va ˆımbun˘ at˘ a¸ti procesul de realizare a saltului, ci va dispune ˆın plus de mai mult˘ a putere ˆın realizarea extensiei ¸si comprim˘ arii, fa¸t˘ a de opera¸tiile obi¸snuite de spa¸tiere. Exemplul 3.7. Secven¸ta elastic˘ a: \line{X\hskip 0pt plus 100pt B\hfil C\hskip 0pt plus 50pt D} va genera ˆın documentul final urm˘ atoarea linie: XB
CD
Acela¸si rezultat se ob¸tine dac˘ a folosim cele dou˘ a tipuri de salturi orizontale (\hfil ¸si \hfill):
50
Capitolul 3
Exemplul 3.70 . Secven¸ta \line{X \hfil B \hfill C\hfil D} genereaz˘ a urm˘ atoarea linie: XB
CD
(s˘ a observ˘ am c˘ a secven¸ta \hfil este inefectiv˘ a). O experien¸t˘ a similar˘ a poate fi f˘ acut˘ a cu \vfill ¸si \vfill ˆın interiorul aceluia¸si \vbox. Secven¸ta de salt care se termin˘ a cu dou˘ a litere “l” (\vfill sau \hfill, numite ¸si salturi tari) este infinit mai tare decˆ at secven¸ta de salt care se termin˘ a cu un singur “l” (\vfil sau \hfil, numite ¸si salturi slabe). Saltul tare inhib˘ a orice ac¸tiune din partea unui salt slab. Pe de alt˘ a parte, dac˘ a dou˘ a sau mai multe salturi de acela¸si tip (\vfil sau \hfil) concureaz˘ a pentru acela¸si spa¸tiu, ele se extind prin aceea¸si cantitate. Un exemplu obi¸snuit de o astfel de egalare este opera¸tia de centrare ˆın linie; de exemplu, dac˘ a scriem: \line{\hfil Text centrat\hfil} atunci ob¸tinem textul centrat, exact ˆıntre marginea stˆ ang˘ a ¸si cea dreapt˘ a a l˘ a¸timii unei pagini, adic˘ a (pentru secven¸ta de mai sus) Text centrat Salturile slabe sunt utilizate cu consisten¸t˘ a ˆın interiorul macrourilor. De exemplu, \matrix ¸si \over folosesc saltul slab pentru centrarea argumentelor sale. Exemplul 3.8. Iat˘ a cˆ ateva posibile utiliz˘ ari ale secven¸tei de control \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
˘ SPATIERI, ¸ CONCATENARI S ¸ I SALTURI
51
Astfel, eficient ar fi s˘ a se utilizeze saltul tare ˆın text ¸si saltul slab ˆın defini¸tia unui macrou. 3.5 Spa¸tierea ¸si ˆıntreruperea Presupunem c˘ a ˆın “fi¸sierul surs˘ a” avem scris˘ a secven¸ta (matesi c˘ a, ˆın procesul de generare a liniilor rial) AB\quad CD (material) ¸ din documentul final, procesorul decide asupra gener˘ arii unei noi linii ˆıntre AB ¸si CD. Cum va trata acesta secven¸ta \quad? Va l˘ asa un spa¸tiu la sfˆ ar¸situl liniei curente sau va ˆıncepe noua linie cu un spa¸tiu? R˘ aspunsul este urm˘ atorul: cˆ and TEX-ul ˆıncepe generarea unei noi linii ¸si are de tratat o secven¸t˘ a de control generatoare de spa¸tiu orizontal, atunci spa¸tiul respectiv este eliminat din noua linie. Exist˘ a totu¸si situa¸tii ˆın care o ˆıntrerupere la nivelul unei secven¸te \hskip ar fi inoportun˘ a. De exemplu, dac˘ a “fi¸sierul surs˘ a” con¸tine secven¸ta R\hskip -1pt I, care este destinat˘ a form˘ arii unei noi litere, atunci ar fi nedorit˘ a o ˆıntrerupere ˆıntre cele dou˘ a litere! Utilizˆ and secven¸ta de control \kern urmat˘ a de o dimensiune, procesorul TEX nu va ˆıntrerupe niciodat˘ a linia la nivelul acestei secven¸te. Astfel, ˆınlocuind secven¸ta de control anterioar˘ a cu secven¸ta de control R\kern -1pt I, se elimin˘ a orice posibil neajuns legat de generarea noii litere. Plain TEX-ul ofer˘ a trei tipuri predefinite de kern-uri: \enspace \thinspace \negthinspace
genereaz˘ a 1/2em (1em=10pt); genereaz˘ a 1/6em≈1.5pt; genereaza -1/6em.
Se poate ˆıntˆ ampla ca TEX-ul s˘ a ˆıntrerup˘a o linie chiar ¸si ˆınaintea secven¸tei \kern (¸si anume, dac˘ a aceasta este precedat˘ a ˆ de o secven¸t˘ a \hskip, de exemplu). In acest caz TEX-ul desparte secven¸tele \kern ¸si \hskip. Pentru a genera un spa¸tiu orizontal care s˘ a garanteze neeliminarea acestuia din documentul final, procesorul de TEX dispune de secven¸ta de control \hglue.
52
Capitolul 3
Probleme similare pot s˘ a apar˘ a ˆın cazul gener˘ arii paginilor. Folosind secven¸tele de control \vglue sau \topglue se poate genera un spa¸tiu vertical la ˆınceputul unei noi pagini. Revenim la secven¸ta de control \kern. Aceasta este ˆın general ambigu˘ a pentru procesor, efectul proces˘ arii ei depinzˆ and de modul curent de lucru al acestuia. ˆIn modul de lucru orizontal sau matematic, \kern creeaz˘ a un spa¸tiu orizontal, iar ˆın modul de lucru vertical, aceast˘ a secven¸t˘ a conduce la generarea unui spa¸tiu vertical. 3.6 Spa¸tierea ˆıntre paragrafe Cantitatea de spa¸tiu vertical dintre paragrafe este gestionat˘ a cu ajutorul variabilei \parskip. Procesorul TEX ini¸tializeaz˘ a aceast˘ a variabil˘ a astfel: \parskip=0pt plus 1pt. Dac˘ a utilizatorul dore¸ste, poate modifica valorile prestabilite, utilizˆ and o defini¸tie elastic˘ a, de exemplu: \parskip=4pt plus 2pt minus 2pt. 3.7 Alte tipuri de salturi Dimensiunea spa¸tiului generat de un salt poate fi acoperit˘ a cu imaginea unui anumit caracter (punctul, de exemplu). O ˆın¸siruire de puncte, precum apare ˆın cuprinsul unei c˘ ar¸ti, este cunoscut˘ a drept un “leader”. Sunt cunoscute cˆ ateva asemenea “leaders”-uri predefinite (toate operabile numai ˆın modul orizontal de lucru): \hrulefill \dotfill \rightarrowfill \leftarrowfill \downbracefill
traseaz˘ a o linie orizontal˘ a; construie¸ste un ¸sir de puncte; traseaz˘ a o s˘ ageat˘ a cu vˆ arful orientat spre dreapta; traseaz˘ a o s˘ ageat˘ a cu vˆ arful orientat spre stˆ anga; construie¸ste o acolad˘ a orizontal˘ a
˘ SPATIERI, ¸ CONCATENARI S ¸ I SALTURI
\upbracefill
53
cu deschiderea ˆın jos; construie¸ste o acolad˘ a orizontal˘ a cu deschiderea ˆın sus.
Primele patru sunt utilizate ˆın mod identic cu \hfill. Dac˘ a sunt utilizate mai multe “leaders”-uri ˆıntr-o construc¸tie, atunci spa¸tiul disponibil este ˆımp˘ ar¸tit echitabil. Ultimele dou˘ a vor fi analizate mai profund ˆın Capitolul 8. Exemplul 3.9. Utilizarea secven¸tei \upbracefill: \hbox to 1in {\upbracefill} . . . . . . . . . . |
{z
}
Pentru o utilizare mai complex˘ a a secven¸telor de control anterioare, se poate folosi secven¸ta de control \leaders, permi¸tˆ and definirea de secven¸te de control mai performante. De exemplu, pentru \dotfill putem ob¸tine o comand˘ a mai utilizabil˘ a, definind urm˘ atorul macrou: \def\largdotfill{\leaders\hbox to 16pt {\hfil . \hfil}\hfill}
S˘ a analiz˘ am urm˘ atorul exemplu ˆın care se utilizeaz˘ a secven¸ta de control definit˘ a mai sus: Exemplul 3.10. Urm˘ atorul ¸sir de secven¸te: \largdotfill 3\par Sec¸tiunea 1.1 Func¸tii convexe \largdotfill 15\par Sec¸tiunea 1.2 Func¸tii monotone \largdotfill 32\par Capitolul 1. Preliminarii
va genera ˆın documentul final urm˘ atoarele linii: Capitolul 1. Preliminarii Sec¸tiunea 1.1 Func¸tii convexe Sectiunea 1.2 Func¸tii monotone
.
.
.
.
.
3
. .
. .
. .
. .
15 32
Acest nou “leader” realizeaz˘ a o spa¸tiere egal˘ a cu cantitatea specificat˘ a de utilizator (16pt pentru exemplul de mai sus) iar elementul cu care se acoper˘ a cantitatea de spa¸tiu (punctul, ˆın cazul
54
Capitolul 3
de fa¸t˘ a), suport˘ a o aliniere pe vertical˘ a (ceea ce nu se ˆıntˆ ampl˘ a ˆın cazul secven¸tei de control \dotfill). 3.8 Salturi negative Se pot realiza asemenea salturi, atˆ at pe vertical˘ a, cˆ at ¸si pe orizontal˘ a, prin utilizarea secven¸telor de control \vskip ¸si \hskip, urmate de o valoare negativ˘ a. Consider˘ am urm˘ atoarea defini¸tie: \def\negsalt {\hskip 0pt minus 1fil}. Observa¸tie: fil este o alt˘ a unitate de m˘ asur˘ a utilizat˘ a de procesorul TEX. Secven¸ta de control \hfil este aceea¸si cu construc¸tia \hskip 0pt plus 1fil (de unde ¸si denumirea acestei secven¸te de control). Revenim la defini¸tia introdus˘ a anterior cu urm˘ atorul exemplu de utilizare: Exemplul 3.11. Secven¸ta $|$\hbox to -5pt{ LLL MMM \negsalt}$|$ are drept rezultat: || LLL MMM Boxul din aceast˘ a construc¸tie va avea lungimea resetat˘ a la o valoare aproape de zero. Procesorul mic¸soreaz˘ a lungimea textului “LLL MMM” cu valoarea dat˘ a de \negsalt, suprapunˆandu-l peste un text deja existent. Plain TEX-ul dispune de dou˘ a macrouri care utilizeaz˘ a ideea de mai sus (\rlap{ ... } ¸si \llap{ ... }). Iat˘ a un exemplu de utilizare a macroului \rlap. Consider˘ am defini¸tia: \def\page#1{\largdotfill \rlap{\hbox to 25pt{\hfill # 1}}\par}. Dac˘ a ˆınlocuim ˆın Exemplul 3.10 secven¸ta \largdotfill 3 cu secven¸ta \page{3}, ob¸tinem acela¸si rezultat. TEX-ul are de asemenea o secven¸t˘ a de control pentru saltul orizontal ¸si una pentru saltul vertical, anume \hss ¸si \vss, respectiv. Valoarea parametrului de lungime poate varia ˆıntre -∞
˘ SPATIERI, ¸ CONCATENARI S ¸ I SALTURI
55
¸si +∞ ˆın aceste cazuri. Aceste ultime dou˘ a secven¸te de control corespund urm˘ atoarelor defini¸tii: \def\hss{\hskip 0pt plus 1fil minus 1fil} \def\vss{\vskip 0pt plus 1fil minus 1fil} ˆIn baza acestora, macroul \centerline este echivalent cu: \line{\hss ...
material
...
\hss}
Dac˘ a textul desemnat prin ... material ... este mai lung decˆ at \hsize, atunci \hss ˆıl contract˘ a ¸si permite o dep˘ a¸sire cu o cantitate egal˘ a ˆın ambele p˘ ar¸ti ale liniei, f˘ ar˘ a ca procesorul s˘ a reclame aceast˘ a dep˘ a¸sire.
CAPITOLUL 4. PARAGRAFE
4.1 ˆ Inceputul ¸si sfˆ ar¸situl unui paragraf Am v˘ azut (§1.5) c˘ a ˆın debutul proces˘ arii unui “fi¸sier surs˘ a”, ˆ TEX–ul se afl˘ a ˆın modul vertical de lucru. In faza de procesare, ˆın momentul ˆın care ˆıntˆ alne¸ste un alineat (paragraf) (recunoscut la nivelul “fi¸sierului surs˘ a” prin existen¸ta unei linii vide de separare a dou˘ a texte diferite sau prezen¸ta secven¸tei de control \par), procesorul TEX trece din modul vertical de lucru ˆın modul orizontal de lucru. Sfˆ ar¸situl prelucr˘ arii unui paragraf face ca procesorul s˘ a revin˘ a la modul vertical de lucru. Mai exact, dac˘ a procesorul de TEX este ˆın modul vertical, trecerea la modul orizontal de lucru se face atunci cˆ and acesta ˆıntˆ alne¸ste (ˆın materialul care constituie “fi¸sierul surs˘ a”): • un caracter; • una din secven¸tele de control: \indent, \noindent, \leavevmode; • o formul˘ a matematic˘ a, delimitat˘ a prin semnul $ (dup˘ a ˆıntˆ alnirea celui de-al doilea semn $, procesorul revine la modul orizontal de lucru); • orice comand˘ a care are sens numai ˆın modul orizontal (\hskip, \vrule) sau una din comenzile de formatare a paragrafelor, care vor fi discutate mai tˆ arziu (vezi §4.6).
58
Capitolul 4
Aflat ˆın modul orizontal, TEX-ul comut˘ a ˆın modul vertical de lucru, terminˆ and prelucrarea paragrafului curent, cˆ and ˆıntˆ alne¸ste: • comenzile de spa¸tiere vertical˘ a (\vskip, \smallskip, \medskip, \bigskip, \smallbreak, \medbreak ¸si \bigbreak); • comanda \par (sau una sau mai multe linii consecutive de spa¸tii (adic˘ a mai multe CR-uri consecutive); • orice comand˘ a care are sens numai ˆın modul vertical de lucru (\hrule, de exemplu). 4.2 Alinierea implicit˘ a a paragrafelor ˆIn general, prima linie a unui paragraf este aliniat˘ a (adic˘ a este scris˘ a mai din dreapta fa¸t˘ a de marginea stˆ ang˘ a a paginii). M˘ arimea alineatului este dat˘ a de valoarea parametrului \parindent. Alinierea este anulat˘ a prin setarea acestui parametru cu valoarea zero. Implicit, procesorul TEX seteaz˘ a acest parametru astfel: \parindent = 20pt Putem modifica aceast˘ a valoare ¸si ea poate fi chiar negativ˘ a (ceea ce ˆınseamn˘ a c˘ a prima linie a unui paragraf poate dep˘ a¸si marginea stˆ ang˘ a a paginii). Dac˘ a se dore¸ste ca paragraful s˘ a ˆınceap˘ a f˘ ar˘ a alineat, atunci trebuie ca acesta s˘ a fie precedat de secven¸ta de control \noindent (am v˘ azut c˘ a aceast˘ a comand˘ a comut˘ a starea procesorului de TEX de la modul vertical de lucru ˆın cel orizontal). 4.3 Generarea secven¸tial˘ a a liniilor Dup˘ a cum ¸stim, TEX-ul ignor˘ a ˆın general caracterul alb CR; mai exact, ˆıl trateaz˘ a ca pe un spa¸tiu. Sunt situa¸tii ˆın care procesorul de TEX trebuie s˘ a respecte ˆıntreruperea liniilor din “fi¸sierul surs˘ a” (adic˘ a acestea s˘ a apar˘ a ˆın documentul final pe cˆ ate o linie,
59
PARAGRAFE
a¸sa cum sunt scrise ˆın “fi¸sierul surs˘ a”). Pentru a ob¸tine aceasta, trebuie ˆınceput textul respectiv cu comanda \obeylines, care consider˘ a CR echivalent cu \par. Exemplul 4.1. Rezultatul proces˘ arii materialului: % (= a asculta, a se supune) {\obeylines Acest exemplu ilustreaz˘ a posibilitatea apari¸tiei ˆın documentul final a unei p˘ ar¸ti din materialul “fi¸ sierului
surs˘ a”,
exact ˆın forma ˆın care este scris, iar un simbol % la sfˆ ar¸situl unei linii anuleaz˘ a ˆıntreruperea unei par¸ti din linie. De asemenea arat˘ a c˘ a pentru a ob¸tine orice fel de spa¸tiere vertical˘ a, trebuie folosit˘ a comanda explicit˘ a
\medskip de spa¸tiere.}
revine la: Acest exemplu ilustreaz˘ a posibilitatea apari¸tiei ˆın documentul final a unei p˘ ar¸ti din materialul “fi¸sierului
surs˘ a”,
exact ˆın forma ˆın care este scris, iar un simbol la sfˆ ar¸situl unei linii anuleaz˘ a ˆıntreruperea unei par¸ti din linie. De asemenea arat˘ a c˘ a pentru a ob¸tine orice fel de spa¸tiere vertical˘ a, trebuie folosit˘ a comanda explicit˘ a de spa¸tiere.
Acest exemplu ne arat˘ a c˘ a o linie este ˆıntrerupt˘a conform ˆıntreruperilor f˘ acute ˆın “fi¸sierul surs˘ a” iar un simbol % la sfˆ ar¸situl unei linii anuleaz˘ a ˆıntreruperea acelei linii (adic˘ a efectul caracterului CR este anulat). De asemenea arat˘ a c˘ a, pentru a ob¸tine orice fel de spa¸tiere vertical˘ a, trebuie folosit˘ a o comand˘ a explicit˘ a de spa¸tiere. Cˆ ateva CR-uri consecutive ˆın “fi¸sierul surs˘ a” au acela¸si efect cu al unuia singur. Pentru a neutraliza efectul comenzii \obeylines asupra ˆıntregului material care ˆıi succede ˆın fi¸sierul
60
Capitolul 4
surs˘ a, trebuie inclus˘ a ˆıntre acolade partea de material asupra c˘ areia se dore¸ste a ac¸tiona comanda \obeylines. 4.4 Margini la stˆ anga ¸si la dreapta Secven¸tele de control \leftskip ¸si \rightskip controleaz˘ a pozi¸tia relativ˘ a (din stˆ anga, respectiv, din dreapta) a unei pagini. Dimensiunea cu care este manevrat textul c˘ atre stˆ anga sau dreapta poate fi atˆ at pozitiv˘ a, cˆ at ¸si negativ˘ a. Pentru ca efectul secven¸telor \leftskip ¸si \rightskip s˘ a se petreac˘ a numai la nivelul unui grup, atunci acesta trebuie s˘ a se ˆıncheie cu secven¸ta \par, ˆınaintea acoladei din dreapta (care ˆıncheie grupul). Secven¸ta de control \narrower incrementeaz˘ a ambii parametri (\leftskip ¸si \rightskip) cu o cantitate egal˘ a cu valoarea parametrului \parindent (vezi Exemplul 4.2 de mai jos). Cu alte cuvinte, marginile din stˆ anga ¸si din dreapta ale paginii sunt mutate spre interior. Aceast˘ a opera¸tie este util˘ a pentru realizarea cit˘ arilor. Exemplul 4.2. Rezultatul urm˘ ator: Cˆ ateva CR-uri consecutive ˆın fi¸sierul surs˘ a au acela¸si efect cu al unuia singur. Pentru a neutraliza efectul comenzii trebuie inclus˘ a ˆın acolade regiunea respectiv˘ a
\obeylines,
a fost ob¸tinut ˆın urma proces˘ arii urm˘ atorului material: {\parindent=.2in \narrower Cˆ ateva CR-uri consecutive ˆın fi¸sierul surs˘ a au acela¸si efect cu al unuia singur.
\obeylines, inclus˘ a ˆın acolade regiunea respectiv˘ a\par}
Pentru a neutraliza efectul comenzii
trebuie
Dac˘ a utiliz˘ am \narrower ˆın interiorul unui grup, trebuie ˆıncheiat ultimul paragraf ˆınaintea ˆıncheierii grupului. Prima linie a paragrafului c˘ aruia ˆıi aplic˘ am \narrower va fi dublu aliniat˘ a (dictat˘ a de prima aliniere normal˘ a + valoarea parametrului
61
PARAGRAFE
\leftskip). Dac˘ a nu se dore¸ste aceasta, atunci trebuie ˆınceput paragraful respectiv cu secven¸ta \noindent. Dac˘ a se utilizeaz˘ a un al doilea \narrower, ˆın timp ce primul este ˆınc˘ a activ, efectul este: cumularea valorilor parametrilor acestora. 4.5 Centrarea textului Procesorul TEX dispune de dou˘ a posibilit˘ a¸ti de centrare a unui text. Prima posibilitate revine la setarea parametrilor \leftskip ¸si \rightskip cu aceea¸si valoare ¸si utilizarea secven¸tei de control \centerline (pentru fiecare linie ce se dore¸ste a fi centrat˘ a). A doua posibilitate const˘ a ˆın utilizarea urm˘ atorului ¸sir de comenzi: {\leftskip = 0pt plus 1fil \rightskip = 0pt plus 1fil \parfilskip = 0pt \obeylines ... material ... \par} Procesarea secven¸tei \centerline{\bf LINIE CENTRAT\u A} are drept rezultat: ˘ LINIE CENTRATA 4.6 Itemiz˘ ari O utilizare important˘ a a no¸tiunii de aliniere se reg˘ ase¸ste ˆın generarea ¸sirurilor de itemiz˘ ari sau a enumer˘ arilor. Procesorul TEX dispune ˆın acest sens de secven¸ta de control \item, urmat˘ a de un parametru, m˘ arginit de acolade. Exemplul 4.3. a) \item{arg-secv}
Cˆ ateva CR-uri consecutive ˆın fi¸sierul surs˘ a au acela¸si efect cu al unuia singur. Pentru a neutraliza efectul comenzii \obeylines, trebuie inclus˘ a ˆın acolade regiunea respectiv˘ a
62
Capitolul 4
Procesarea materialului de la punctul a) va genera ˆın documentul final: arg-secv
Cˆ ateva CR-uri consecutive ˆın fi¸sierul surs˘ a au acela¸si efect cu al unuia singur. Pentru a neutraliza efectul comenzii inclus˘ a ˆın acolade regiunea respectiv˘ a
\obeylines,
trebuie
S˘ a remarc˘ am scrierea argumentului arg-secv ˆın afara marginii din stˆ anga a paginii, asta deoarece l˘ a¸timea acestuia dep˘ a¸se¸ste valoarea parametrului \parindent. b) {\parindent = 1.5cm \item{
(ii)
}
Cˆ ateva CR-uri consecutive ˆın
fi¸sierul surs˘ a au acela¸si efect cu al unuia singur. Pentru a neutraliza efectul a ˆın acolade regiunea respectiv˘ a comenzii \obeylines, trebuie inclus˘
\item{(iii)} Pentru a neutraliza efectul comenzii buie inclus˘ a ˆın acolade regiunea respectiv˘ a \par}
\obeylines,
tre-
Procesarea materialului de la punctul b) va genera ˆın documentul final urm˘ atoarea enumerare: (ii)
Cˆ ateva CR-uri consecutive ˆın fi¸sierul surs˘ a au acela¸si efect cu al unuia singur. Pentru a neutraliza efectul comenzii trebuie inclus˘ a ˆın acolade regiunea respectiv˘ a
(iii)
Pentru a neutraliza efectul comenzii
\obeylines,
\obeylines,
trebuie in-
clus˘ a ˆın acolade regiunea respectiv˘ a
Dup˘ a cum se poate constata, secven¸ta de control \item anun¸t˘ a ˆınceputul unui nou paragraf ¸si ac¸tioneaz˘ a numai asupra acestuia. Cum opereaz˘ a? Aceast˘ a comand˘ a incrementeaz˘ a temporar valoarea parametrului \leftskip, cu o valoare egal˘ a cu a parametrului \parindent, mutˆ and astfel marginea stˆ ang˘ a a paginii. ˆIn plus, plaseaz˘ a argumentul s˘ au (arg-sec ˆın exemplul de mai sus) ˆıntr-un alineat nou. Cˆ and paragraful se ˆıncheie, valoarea precedent˘ a a parametrului \leftskip este restabilit˘a. Prezen¸ta grupului dup˘ a \item este obligatorie, chiar dac˘ a acesta va fi vid. Dac˘ a acest grup nu este scris, TEX-ul va lua primul
63
PARAGRAFE
caracter din textul care ˆıi urmeaz˘ a ¸si ˆıl va considera drept argument. Secven¸ta \item este adesea folosit˘ a ˆın interiorul unui grup; astfel, m˘ arimea alineatului poate fi controlat˘ a printr-o modificare local˘ a a parametrului \parindent (vezi Exemplul 4.4). ˆIn acest caz, ca de obicei, grupul trebuie ˆıncheiat cu \par (altfel, urm˘ atorul paragraf nu este prelucrat corect). Nu este nevoie de secven¸ta \par ˆıntre secven¸te consecutive de \item-uri, ˆıntrucˆ at \item ˆınsu¸si marcheaz˘ a un nou paragraf. Macroul \itemitem este folosit ˆıntr-un mod similar cu cel al comenzii \item, cu acela¸si efect, marginea din stˆ anga fiind aliniat˘ a cu valoarea 2*\parindent. Exemplul 4.4. Procesarea materialului: {\parindent = 20pt \item{{\bf 1.}} Cˆateva
CR-uri consecutive ˆın fi¸sierul surs˘ a au acela¸si efect cu al unuia singur. Pentru a neutraliza efectul
\obeylines trebuie inclus˘a ˆın acolade regiunea respectiv˘a {\itemitem{\bf a.} Cˆateva CR-uri consecutive ˆın fi¸sierul surs˘a au acela¸si
comenzii
efect cu al unuia singur. \itemitem{\bf b.} Pentru a neutraliza efectul comenzii trebuie inclus˘ a ˆın acolade regiunea respectiv˘ a
\obeylines,
\par}}
conduce la ob¸tinerea urm˘ atoarelor alinieri: 1.
Cˆ ateva CR-uri consecutive ˆın fi¸sierul surs˘ a au acela¸si efect cu al unuia singur. Pentru a neutraliza efectul comenzii \obeylines, trebuie inclus˘ a ˆın acolade regiunea respectiv˘ a a. Cˆateva CR-uri consecutive ˆın fi¸sierul surs˘a au acela¸si efect cu al
b.
unuia singur. Pentru a neutraliza efectul comenzii \obeylines trebuie inclus˘ a ˆın acolade regiunea respectiv˘ a
Plain TEX-ul nu dispune de un macrou de forma \itemitemitem; dac˘ a e nevoie de un asemenea macrou, utilizatorul ˆı¸si poate defini unul propriu (vezi §4.9). Alte posibile tipuri de secven¸te \item pot fi ob¸tinute cu ajutorul macroului \leftitem{ ... }, a c˘ arui defini¸tie 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ˆateva CR-uri consecutive ˆın “fi¸sierul \hfill\break surs˘ a” au acela¸si efect cu unul singur. \hfill\break Pentru a neutraliza efectul comenzii \obeylines, \hfill\break trebuie inclus˘ a ˆın acolade regiunea respectiv˘ a
} are drept rezultat: TEX Book
Cˆ ateva CR-uri consecutive ˆın “fi¸sierul surs˘ a” au acela¸si efect cu unul singur. Pentru a neutraliza efectul comenzii \obeylines, trebuie inclus˘ a ˆın acolade regiunea respectiv˘ a
S˘ a not˘ am utilizarea secven¸tii \hfill\break pentru a ˆıncheia prelucrarea unei linii; secven¸ta \obeylines nu lucreaz˘ a ˆın acest context, deoarece ea marcheaz˘ a efectiv un CR, echivalent cu un \par, iar aici avem nevoie de a p˘ astra totul ˆın acela¸si paragraf (ceea ce rezultatul proces˘ arii o confirm˘ a). Lungimea materialului din interiorul grupului { ... }, ce urmeaz˘ a dup˘ a \leftitem, este presupus˘a a fi ≤ valoarea parametrului \parindent, din care se scade 0.5em. Dac˘ a ˆıns˘ a argumentul const˘ a din material de lungime mai mare, acesta poate fi ˆımp˘ ar¸tit ˆın mai multe linii (pe care procesorul le prelucreaz˘ a cu ajutorul secven¸tei de control \vtop), ca ˆın exemplul urm˘ ator: Exemplul 4.6. Procesarea materialului \parindent = 1in \leftitem{\smash {\vtop {\hbox {\bf\TeX} \hbox{\bf\ Book}}}} Cˆ ateva CR-uri consecutive ˆın
65
PARAGRAFE “fi¸sierul
\hfill\break
\hfill\break Pentru a neutraliza efectul comenzii \obeylines, \hfill\break surs˘ a” au acela¸si efect cu unul singur.
trebuie inclus˘ a ˆın acolade regiunea respectiv˘ a
} are drept rezultat: TEX Book
Cˆ ateva CR-uri consecutive ˆın “fi¸sierul surs˘ a” au acela¸si efect cu unul singur. Pentru a neutraliza efectul comenzii \obeylines, trebuie inclus˘ a ˆın acolade regiunea respectiv˘ a
Vom vedea mai tˆ arziu o alt˘ a secven¸t˘ a de control (macroul \cornerbox) cu ajutorul c˘ areia vom ob¸tine acela¸si rezultat ca ˆın Exemplul 4.6. 4.7 Prelucrarea mai multor alineate ˆIn situa¸tia ˆın care se dore¸ste s˘ a apar˘ a mai multe linii ˆın documentul final, toate cu acela¸si alineat, se pot folosi secven¸tele \hangindent ¸si \hangafter. Prima secven¸t˘ a este urmat˘ a de o dimensiune (un num˘ ar pozitiv sau negativ), iar a doua de un num˘ ar ˆıntreg (pozitiv sau negativ). Exemplul 4.7. Procesarea secven¸telor: \parindent = 27pt \hangindent = 47pt \hangafter=2 Lungimea materialului din interiorul grupului { ... } ce urmeaz˘ a dup˘ a este presupus˘ a a fi ≤ valoarea parametrului \parindent mi-
\leftitem
nus 0.5em. Dac˘ a ˆıns˘ a argumentul const˘ a dintr-un cod de lungime mai mare, acesta poate fi ˆımp˘ ar¸tit ˆın mai multe linii pe care procesorul le prelucreaz˘ a cu ajutorul secven¸tei de control \vtop
are drept rezultat:
66
Capitolul 4 Lungimea materialului din interiorul grupului { ... } ce urmeaz˘ a dup˘ a este presupus˘ a a fi ≤ valoarea parametrului \parindent mi-
\leftitem
nus 0.5em. Dac˘ a ˆıns˘ a argumentul const˘ a dintr-un cod de lungime mai mare, acesta poate fi ˆımp˘ ar¸tit ˆın mai multe linii pe care procesorul le prelucreaz˘ a cu ajutorul secven¸tei de control
\vtop
ˆIn mod normal, \hangindent ¸si \hangafter sunt plasate (ˆın cadrul “fi¸sierului surs˘ a”) la ˆınceputul paragrafului pentru care se aplic˘ a, ˆıns˘ a ele pot fi plasate oriunde ˆın paragraf. Aceste secven¸te de control lucreaz˘ a ˆımpreun˘ a. 4.8 Note de subsol Acestea se pot ob¸tine prin utilizarea macroului \footnote, ˆın a c˘ arui defini¸tie intr˘ a dou˘ a argumente: “num˘ arul” (sau “simbolul”) pentru numerotarea notei ¸si “textul” notei. Exemplul 4.8. Exemplu de utilizare o secven¸tei de control \footnote{∗}{\bf Not˘ a de subsol marcat˘ a cu un simbol} * Dac˘ a este nevoie de numerotarea secven¸tial˘ a a notelor de subsol, aceasta se poate face automat, prin utilizarea urm˘ atorului macrou: \newcount\notenumber\notenumber=1 \def\myfootnote# 1 {\unskip\footnote{$ˆ {\the\notenumber}$ }{#1} \global\advance\notenumber by 1} ˆIn felul acesta va fi nevoie doar de un singur argument, “textul” notei, adic˘ a forma de utilizare a noii secven¸te este \myfootnote text. Acest macrou permite utilizarea de fonturi diferite pentru notele de subsol (\footnote folose¸ste acela¸si font pentru “textul” notei ¸si pentru documentul final). * Not˘ a de subsol marcat˘ a cu un simbol
PARAGRAFE
67
Atˆ at \footnote cˆ at ¸si \myfootnote nu lucreaz˘ a ˆın interiorul unui box vertical sau orizontal (care este parte a unui paragraf sau box, de orice clas˘ a); secven¸tele sunt pur si simplu neprocesate. 4.9 Macroul item triplu S˘ a ˆıncerc˘ am s˘ a scriem un macrou \itemitemitem pentru a realiza alinierea pe trei nivele. Defini¸tiile procesorului de TEX pentru secven¸tele de control \item ¸si \itemitem sunt: \def\item {\par\hangindent=\parindent\textindent} \def\itemitem {\par\indent\hangindent=2\parindent\textindent} Dup˘ a cum am v˘ azut ˆın §4.7, \hangindent=\parindent are drept efect alinierea tuturor liniilor unui paragraf, ˆıncepˆ and cu a doua (deoarece acolo \hangafter=1), cu un alineat dat de valoarea parametrului \parindent. Comanda \hangindent = 2*\parindent lucreaz˘ a ˆın acela¸si mod. Putem defini macroul item triplu pornind de la \itemitem, procedˆ and astfel: ad˘ aug˘ am ˆınc˘ a o secven¸t˘ a \item ¸si ˆınlocuim 2 cu 3, adic˘ a: \def\itemitemitem {\par\indent\indent\hangindent=3\parindent\textindent} Exemplul 4.9. Procesarea materialului (vezi ¸si exemplul 4.4): {\parindent = 20pt \item{\tt A.} Romˆania, Bulgaria, Cehia, Slovenia, Croa¸tia, Rusia, Polonia, Ungaria, Austria;
{\itemitem{\bf 1.} Cˆateva CR-uri consecutive ˆın fi¸sierul surs˘a au acela¸si efect cu al unuia singur. Pentru a neutraliza efectul comenzii \obeylines trebuie inclus˘ a ˆın acolade regiunea respectiv˘ a
68
Capitolul 4
{\itemitemitem{\it
a.} Cˆ ateva CR-uri consecutive ˆın fi¸sierul surs˘ a au acela¸si efect cu al unuia singur.
\itemitemitem{\it b.} Pentru a neutraliza efectul comenzii \obeylines, trebuie inclus˘a ˆın acolade regiunea respectiv˘a \par}}} conduce la ob¸tinerea urm˘ atoarelor alinieri: A.
Romˆ ania, Bulgaria, Cehia, Slovenia, Croa¸tia, Rusia, Polonia, Ungaria, Austria;
1.
Cˆ ateva CR-uri consecutive ˆın fi¸sierul surs˘ a au acela¸si efect cu al unuia singur. Pentru a neutraliza efectul comenzii trebuie inclus˘ a ˆın acolade regiunea respectiv˘ a
a.
\obeylines
Cˆ ateva CR-uri consecutive ˆın fi¸sierul surs˘ a au acela¸si efect cu al unuia singur.
b.
Pentru a neutraliza efectul comenzii \obeylines, trebuie inclus˘ a ˆın acolade regiunea respectiv˘ a
4.10 O alternativ˘ a pentru item S˘ a remarc˘ am c˘ a, prin efectul de aliniere al tuturor liniilor unui paragraf, macrourile \item ¸si \itemitem sunt risipitoare de spa¸tiu. O alternativ˘ a pentru acestea este secven¸ta de control \meti. Aceasta aliniaz˘ a doar prima linie a unui paragraf ¸si scrie argumentul s˘ au ˆın spa¸tiul rezervat aliniatorilor. Defini¸tia macroului \meti este urm˘ atoarea: \def\meti# 1 {\par\indent\llap{# 1\enspace}\ignorespaces} Exemplul 4.10. Procesarea materialului: \meti{\bf(i)} Cˆateva CR-uri consecutive ˆın “fi¸sierul surs˘a” au acela¸si efect cu al unuia singur. Pentru a neutraliza efectul comenzii \obeylines trebuie inclus˘ a ˆın acolade regiunea respectiv˘ a
are urm˘ atorul efect:
PARAGRAFE
69
(i) Cˆateva CR-uri consecutive ˆın “fi¸sierul surs˘a” au acela¸si efect cu al unuia singur. Pentru a neutraliza efectul comenzii \obeylines trebuie inclus˘ a ˆın acolade regiunea respectiv˘ a
Cum va actiona \meti ˆın acest exemplu? Prima linie va fi alineat˘ a prin \parindent, iar \llap va scrie la stˆ anga punctului curent con¸tinutul din acolade, f˘ ar˘ a a muta punctul curent. Secven¸ta \ignorespace (care are acela¸si efect ca ¸si \unskip din defini¸tia macroului \myfootnote) determin˘ a procesorul TEX s˘ a ignore orice spa¸tiu sau CR care urmeaz˘ a acestui macrou.
CAPITOLUL 5. ORGANIZAREA S ¸ I PROIECTAREA PAGINILOR
5.1 Generarea implicit˘ a a unei pagini Plain TEX-ul construie¸ste ˆın mod automat o pagin˘ a de imprimat sub forma urm˘ atoare: \headline
l 22.5pt
pagin˘ a
\vsize
\footline
l 22.5pt
←−−−−−−−− \hsize −−−−−−−−→ S˘ a remarc˘ am, din figura de mai sus, c˘ a procesorul plain TEX gestioneaz˘ a m˘ arimea unei pagini cu ajutorul a patru parametri:
72
Capitolul 5
\hsize (l˘ a¸timea paginii), \vsize (ˆın˘ al¸timea paginii), \headline (linia de sus) ¸si \footline (linia de jos). Implicit, \hsize=6.5in ¸si \vsize=8.9in. Valoarea acestora poate fi schimbat˘ a de utilizator, conform propriilor necesit˘ a¸ti. Procesorul TEX seteaz˘ a linia de sus ¸si linia de jos astfel:
\headline = {\hfill} \footline = {\hfill\tenrm\folio\hfill}
(5.1)
Secven¸ta de control \folio afi¸seaz˘ a (imprim˘ a) num˘ arul paginii (memorat de procesorul TEX ˆın parametrul \pageno). Prin conven¸tie, un num˘ ar de pagin˘ a negativ este imprimat cu ajutorul numeralelor romane, caz ˆın care defini¸tia 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¸ste \romannumeral cu \Romannumeral ˆın secven¸ta de mai sus. Revenind la structura anterioar˘ a a variabilelor \headline ¸si \footline din rela¸tia (5.1), remarc˘ am c˘ a linia de sus a unei astfel de pagini va fi vid˘ a, ˆın timp ce linia de jos va con¸tine num˘ arul de pagin˘ a, centrat ¸si scris cu fontul roman, de m˘ arime 10pt. Dac˘ a se dore¸ste ob¸tinerea unui document f˘ ar˘ a numerotarea paginilor, atunci fi¸sierul surs˘ a *.tex trebuie s˘ a con¸tin˘ a secven¸ta \nopagenumbers; aceast˘ a secven¸t˘ a de control este o abreviere pentru secven¸ta \footline{\hfill}. Pentru a ob¸tine un num˘ ar de pagin˘ a ˆın partea de sus ¸si nu ˆın partea de jos a paginii, schimb˘ am structura variabilelor \headline
73
ORGANIZAREA S ¸ I PROIECTAREA PAGINILOR
¸si \footline, dˆ andu-le urm˘ atoarele valori:
\headline = {\hfil\tenrm\folio\hfil} \footline = {\hfil}
(5.2)
Dup˘ a cum am v˘ azut mai sus, num˘ arul paginii este memorat ˆın parametrul \pageno ¸si este incrementat automat, prin trecerea de la o pagin˘ a la alta. Dac˘ a \pageno nu este folosit ˆıntr-un “fi¸sier surs˘ a” *.tex, atunci prima pagin˘ a a documentului este numerotat˘ a implicit cu valoarea 1; altfel, prima pagin˘ a a documentului va avea valoarea atribuit˘ a parametrului \pageno de c˘ atre utilizator. Organizarea paginilor de c˘ atre plain TEX este f˘ acut˘ a destul de simplist. Astfel, procesorul nu distinge ˆıntre pagina din dreapta ¸si pagina din stˆ anga a unui document, nu deosebe¸ste prima pagin˘ a (care, ˆın general, nu trebuie s˘ a aib˘ a imprimat num˘ arul) de ˆ celelalte pagini ale documentului etc. In acest spirit, prezent˘ am o modalitate de ob¸tinere a unei pagini mult mai complexe. Pentru a u¸sura utilizarea secven¸telor care urmeaz˘ a, acestea pot fi memorate ˆıntr–un fi¸sier (numit, nume-fis1.tex, pentru a putea fi referit ˆın continuare). ˆIn “fi¸sierul surs˘ a” se va ad˘ auga secven¸ta \input nume-fis1.tex. Aceste secven¸te de control sunt: \newif\iftitlepage \newtoks\titlepagehead \newtoks\titlepagefoot \newtoks\runningauthor \newtoks\runningtitle \newtoks\evenpagehead
\titlepagetrue \titlepagehead={\hfil} \titlepagefoot={\hfil} \runningauthor={\hfil} \runningtitle={\hfil} \newtoks\oddpagehead
\evenpagehead={\hfil\the\runningauthor\hfil} \oddpagehead={\hfil\the\runningtitle\hfil} \pageno=1 \newtoks\evenpagefoot \newtoks\oddpagefoot
\evenpagefoot={\hfil} \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 ¸si linia de jos ai noii pagini vor fi: \titlepagehead
pagin˘ a
\titlepagefoot Mai mult, structura unei pagini din stˆ anga, respectiv din dreapta, va fi: \evenpagehead
\oddpagehead
pagin˘ a par˘ a
pagin˘ a impar˘ a
\evenpagefoot
\oddpagefoot
Secven¸tele de control prezente ˆın diagramele de mai sus sunt parametri care genereaz˘ a linia de sus ¸si linia de jos ale unei pagini. Ace¸stia pot fi seta¸ti cu valorile dorite de utilizator ¸si trebuie ad˘ auga¸ti “fi¸sierului surs˘ a”, altfel cele dou˘ a zone vor fi vide.
ORGANIZAREA S ¸ I PROIECTAREA PAGINILOR
75
Exemplu 5.1 Dac˘ a ˆıntr-un “fi¸sier surs˘ a” sunt memorate urm˘ atoarele secven¸te de control: \input nume-fis1.tex \runningauthor={\bf Numele Autorului} \runningtitle={\tt Titlul C˘ ar¸tii} iar parametrii \headline ¸si \footline au structura dat˘ a de rela¸tia (5.1), atunci procesorul TEX va genera perechi de pagini, avˆ and urm˘ atoarea form˘ a: Numele autorului
Titlul C˘ ar¸ tii
pagin˘ a par˘ a
pagin˘ a impar˘ a
2
3
Adesea este necesar s˘ a se specifice un font, fie ˆın cadrul defini¸tiei parametrilor \headline ¸si/sau \footline, fie ca ˆın exemplul de mai sus (incluzˆ and fontul dorit ˆın defini¸tia parametrilor \runningauthor ¸si/sau \runningtitle (titlul de pagin˘ a)). Dac˘ a nu se dore¸ste ca prima pagin˘ a s˘ a con¸tin˘ a titlul de pagin˘ a, atunci utilizatorul trebuie s˘ a introduc˘ a ˆın “fi¸sierul surs˘ a” secven¸ta \titlepagefalse, imediat dup˘ a secven¸ta \input numefis1.tex. Exemplul 5.2. O alegere obi¸snuit˘ a pentru linia de sus ¸si linia de jos a unei pagini este urm˘ atoarea (ˆın acest exemplu este presupus c˘ a parametrul \footline are defini¸tia dat˘ a de rela¸tia (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˘ arii unui “fi¸sier surs˘ a”, care con¸tine ¸si secven¸tele de control din Exemplul 5.2, va conduce la generarea perechilor de pagini (ˆın cazul de fa¸t˘ a perechea (16,17)), cu urm˘ atoarea ˆınf˘ a¸ti¸sare: 16
N. Gheorghe
pagin˘ a par˘ a
Sisteme de Operare 17
pagin˘ a impar˘ a
Exemplul 5.3. Urm˘ atoarele set˘ ari vor plasa titlul de pagin˘ a ˆın marginea din stˆ anga, 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 ¸si pentru linia de jos. Remarc˘ a: Dac˘ a se dore¸ste ca titlul unei pagini s˘ a ˆınceap˘ a mai jos decˆ at marginea de sus a unei pagini, atunci secven¸ta de control \vskip, care realizeaz˘ a acest lucru, trebuie precedat˘ a de o alt˘ a secven¸t˘ a de control. Altfel secven¸ta \vskip va fi ignorat˘ a de procesor. Utilizatorul are la ˆındemˆ an˘ a urm˘ atoarele secven¸te de control pentru a preceda secven¸ta \vskip: \hbox{} sau \null.
ORGANIZAREA S ¸ I PROIECTAREA PAGINILOR
77
De asemenea, poate utiliza secven¸ta \topglue ˆın locul secven¸tei \vskip. Pentru a genera o pagin˘ a vid˘ a, la prima vedere se pare c˘ a putem folosi ¸sirul urm˘ ator de secven¸te: \vfill\eject\vfill\eject Aceast˘ a solu¸tie nu este ˆıns˘ a bun˘ a, deoarece, ˆın momentul ˆın care procesorul prelucreaz˘ a ultima grup˘ a \vfill\eject, acesta se afl˘ a deja la ˆınceputul urm˘ atoarei pagini, lucru care ˆıl face s˘ a ignore efectul prelucr˘ arii secven¸tei \vfill; ˆın consecin¸t˘ a, ultima secven¸t˘ a \eject devine inefectiv˘ a (secven¸ta \eject are drept efect “un salt obligatoriu” la o nou˘ a pagin˘ a). Altfel spus, dup˘ a prelucrarea primei grupe de secven¸te \vfill\eject, procesorul se afl˘ a ˆın fa¸ta unui salt activ (deci nu mai poate s˘ a activeze altul). Solu¸tia corect˘ a revine la utilizarea urm˘ atorului ansamblu de secven¸te: \vfill\eject\null\vfill\eject 5.2 Realizarea manual˘ a a ˆıntreruperii liniilor ¸si paginilor Cˆ and procesorul plain TEX se afl˘ a ˆın modul orizontal de lucru ¸si ˆıntˆ alne¸ste secven¸ta \break, acesta creeaz˘ a o nou˘ a linie ¸si nu un nou paragraf; urm˘ atoarea linie creat˘ a de procesor este f˘ ar˘ a alineat, iar linia precedent˘ a nu este completat˘ a cu spa¸tiul de sfˆ ar¸sitde-paragraf (realizat de secven¸ta \parfillskip). Drept rezultat, textul liniei precedente trebuie ˆımpins spre marginea din dreapta, lucru care este realizat de procesor prin extinderea ˆıntregului spa¸tiu vid, aferent liniei ˆın cauz˘ a. Datorit˘ a acestui neajuns, este mai bine de utilizat secven¸ta \hfill\break ˆın locul secven¸tei \break. Remarc˘ a: Dou˘ a secven¸te de tipul abc\break ¸si abc \break nu au acela¸si efect; ˆın cazul al doilea, spa¸tiul de dup˘ a “abc” va fi ad˘ augat la sfˆ ar¸situl liniei.
78
Capitolul 5
Cˆ and TEX–ul se afl˘ a ˆın modul vertical de lucru (ˆıntre paragrafe) ¸si ˆıntˆ alne¸ste secven¸ta \break, atunci ˆıncepe procesarea unei noi pagini (ca ¸si cum ar ˆıntˆ alni secven¸ta \eject). Exist˘ a o diferen¸t˘ a ˆıntre cele dou˘ a situa¸tii: secven¸ta \eject va ˆıncheia un paragraf ¸si apoi va ˆıntrerupe pagina curent˘ a, chiar dac˘ a este ˆıntˆ alnit˘ a de procesor ˆın modul orizontal de lucru. S ¸ i ˆın cazul acesta, utilizatorul este sf˘ atuit s˘ a foloseasc˘ a ˆın locul secven¸tei \break grupul de secven¸te \vfill\break. O alt˘ a situa¸tie delicat˘ a, care poate fi ˆıntˆ alnit˘ a pe parcursul proces˘ arii unui “fi¸sier surs˘ a”, este aceea ˆın care trebuie s˘ a se creeze un spa¸tiu vertical (destinat unei figuri, de exemplu). S˘ a analiz˘ am o astfel de situa¸tie pe un exemplu. Presupunem c˘ a utilizatorul dore¸ste s˘ a aloce un spa¸tiu de 2in, ˆın care s˘ a plaseze o figur˘ a. Dac˘ a, pentru a realiza acest lucru, ˆın “fi¸sierul surs˘ a” s-a folosit secven¸ta de control: \vskip 2in\centerline{Figura 5}
(5.3)
iar ˆın pagina pe care tocmai o genereaz˘ a, procesorul mai dispune de un spa¸tiu de doar 1in, cˆ and urmeaz˘ a a fi prelucrat˘ a secven¸ta de mai sus, vom descoperi ˆın documentul final (fi¸sierul *.dvi) c˘ a textul “Figura 5” va ap˘ area la ˆınceputul paginii urm˘ atoare, f˘ ar˘ aa fi precedat˘ a de spa¸tiu. De ce? ˆIn plus, con¸tinutul acelei pagini va fi extins pentru a umple spa¸tiul de 1in r˘ amas neutilizat. Dac˘ a se utilizeaz˘ a secven¸ta \vglue ˆın locul secven¸tei \vskip, cei doi inchi ceru¸ti de utilizator vor fi salva¸ti la ˆınceputul paginii urm˘ atoare, dar, din nou, con¸tinutul paginii precedente va fi incorect distribuit ˆın pagin˘ a. Iat˘ a solu¸tia prin care se elimin˘ a acest neajuns. ˆIn locul construc¸tiei (5.3), se va utiliza grupul de secven¸te \midinsert\vglue 2in\centerline{Figura 5}\endinsert Cˆ and TEX–ul ˆıntˆ alne¸ste perechea de secven¸te \midinsert ... \endinsert, memoreaz˘ a con¸tinutul dintre acestea (simbolizat aici prin ...) ˆıntr–un box de lucru. Dac˘ a, ˆın momentul ˆıntˆ alnirii acestei perechi, spa¸tiul r˘ amas disponibil ˆın partea de jos a paginii
ORGANIZAREA S ¸ I PROIECTAREA PAGINILOR
79
ˆın lucru este < 2in, atunci procesorul TEX mut˘ a materialul dintre \midinsert ... \endinsert ˆın partea de sus a urm˘ atoarei pagini ¸si continu˘ a, pe pagina ˆın lucru, cu prelucrarea materialului care urmeaz˘ a dup˘ a \endinsert. O astfel de prelucrare a materialului se nume¸ste flotare. Not˘ am c˘ a pentru a genera spa¸tiu la ˆınceputul paginii ¸si ˆın cazul unei flot˘ ari trebuie utilizat˘ a secven¸ta \vglue sau \null\vskip, ˆın locul secven¸tei \vskip. Exist˘ a o variant˘ a pentru perechea de secven¸te de mai sus: perechea \topinsert ... material ... \endinsert. Prezent˘ am acum o descriere sumar˘ a a parametrilor (precum ¸si a altor secven¸te de control) utiliza¸ti de procesorul TEX ˆın procesul de organizare a unei pagini: \advance = adun˘ a la un registru de tip: ˆıntreg, dimensiune, spa¸tiu sau spa¸tiu matematic, un alt obiect de acela¸si tip. Cel mai frecvent, acest parametru este utilizat la incrementarea automat˘ a a contorului notelor de subsol (footnotes) precum ¸si a contorului paginilor. \advancepageno = incrementeaz˘ a valoarea variabilei \pageno cˆ and procesorul ˆıncepe prelucrarea unei noi pagini. Acest macrou are urm˘ atoarea defini¸tie: \def\advancepageno{ifnum\pageno<0 \global\advance\pageno by -1 \else\global\advance \pageno by 1\fi} Secven¸ta \global este necesar˘ a deoarece secven¸ta \advance \pageno este apelat˘ a de obicei ˆın interiorul unui grup ¸si acesta trebuie s˘ a r˘ amˆ an˘ a ˆın ac¸tiune chiar dup˘ a terminarea grupului curent (vezi ¸si \gdef). \hoffset = controleaz˘ a dimensiunea orizontal˘ a a spa¸tiului gol, din stˆ anga foii de hˆ artie; implicit este 1in.
80
Capitolul 5
\ifodd = testeaz˘ a dac˘ a urm˘ atorul ˆıntreg este impar. \iftitlepage = decide dac˘ a pagina curent˘ a trebuie scris˘ a cu linia de sus ¸si linia de jos, corespunz˘ atoare unei pagini de titlu (\titlepagehead, \titlepagefoot), altfel decˆ at una obi¸snuit˘ a. Valoarea lui \iftitlepage este controlat˘ a cu \titlepagetrue ¸si \titlepagefalse. \titlepagefalse = face ca pagina curent˘ a s˘ a nu fie tratat˘ a ca o pagin˘ a cu titlu. \voffset = controleaz˘ a dimensiunea vertical˘ a a textului, ˆın raport cu foaia de hˆ artie; implicit valoare este 1in de la marginea foii.
CAPITOLUL 6. BOXURI
ˆIn TEX totul este asimilat ca fiind un box (vezi § 6.2), fiecare box avˆ and anumite dimensiuni. De exemplu, cˆ and caracterele sunt scrise ˆımpreun˘ a pentru a forma o linie, linia ˆıns˘ a¸si devine un box. Putem spune c˘ a activitatea procesorului TEX este divizat˘ a ˆın dou˘ a: crearea boxurilor ¸si 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˘ atoarele comenzi: \hbox,
\vbox,
\vtop,
\vcenter.
Odat˘ a ce procesorul a creat un box, acesta nu este interesat (pentru moment) de con¸tinutul acestuia; boxul este privit ca un dreptunghi ale c˘ arui dimensiuni sunt ceea ce ˆıl intereseaz˘ a pe procesor ˆın aceast˘ a faz˘ a. Mai precis, iat˘ a cˆ ateva boxuri prin care punem ˆın eviden¸t˘ a elementele aflate ˆın aten¸tia procesorului → •........
•........
•........
•........
Figura 6.1. Linia punctat˘ a din interiorul boxului se nume¸ste linia de baz˘ a. Pe seama acesteia sunt alineate boxurile unul dup˘ a altul
82
Capitolul 6
(ca ˆın Figura 6.1). Punctul de referin¸t˘ a al unui box este ultimul din stˆ anga al liniei sale de baz˘ a, indicat ˆın figura de sus prin simbolul →. Dimensiunile unui box sunt: l˘ a¸timea (width), ˆın˘ al¸timea (height) (partea de deasupra liniei de baz˘ a) ¸si adˆ ancimea (depth) (partea de sub linia de baz˘ a). Cel mai din stˆ anga box din Figura 6.1 are urm˘ atoarele dimensiuni: height=6pt, depth=15pt iar width=l˘ a¸timea materialului “........”. Fiecare dimensiune a unui box este ˆın mod normal o valoare pozitiv˘ a dar acestea pot lua ¸si valoarea 0 sau chiar valori negative (de exemplu, macrourile \llap ¸si \rlap scriu argumentele lor ˆıntr-un box de l˘ a¸time =0). 6.1 Scrierea boxurilor Dup˘ a cum am v˘ azut deja, diferen¸ta fundamental˘ a ˆıntre modul de lucru vertical ¸si cel orizontal este dat˘ a de modul ˆın care boxurile sunt scrise la un loc (unul peste altul sau unul lˆ ang˘ a altul). Stivuirea boxurilor (scrierea pe vertical˘ a). Cˆ and procesorul TEX cite¸ste una din secven¸tele de control: \vbox, \vtop sau \vcenter, urmat˘ a de o acolad˘ a {, acesta trece ˆın modul de lucru vertical intern ¸si ˆıncepe stivuirea, unul peste altul, a boxurilor ˆıntˆ alnite, aliniindu-le punctele verticale de referin¸t˘ a. Procesul continu˘ a pˆ an˘ a la citirea simbolului }. Rezultatul este tot un box, numit box vertical. De exemplu, secven¸ta urm˘ atoare: \vbox{\box2 \box3\box4}, d˘ a un box mai mare (vezi Figura 6.2), compus din boxurile \box2, \box3, \box4, care sunt loca¸tii de memorie destinate stoc˘ arii boxurilor, loca¸tii gestionate de procesorul TEX (vezi \setbox §6.3) ........ ........ → ........
Figura 6.2.
83
BOXURI
Cel mai dedeasupra (ˆın vˆ arf) va fi boxul \box2. Procesorul scrie automat un spa¸tiu mic ˆıntre componentele noului box. Linia de baz˘ a a unui box ob¸tinut cu \vbox coincide cu linia de baz˘ a a ultimei componente a boxului (vezi Figura 6.2). Pentru secven¸ta \vtop linia de baz˘ a coincide cu cea a primului box ˆın timp ce pentru secven¸ta \vcenter (care este permis˘ a numai ˆın modul matematic de lucru) boxul rezultat are linia de baz˘ a ˆın mijlocul l˘ a¸timii acestuia. ........ → ........
→ ........ ........
Figura 6.3.
........ ........ Scrierea boxurilor pe orizontal˘ a. Cˆ and TEX-ul ˆıntˆ alne¸ste secven¸ta de control \hbox, acesta comut˘ a ˆın modul de lucru orizontal restrˆ ans. Comanda \hbox{...} are drept efect concatenarea materialului dintre acolade (simbolizat aici prin ...) ˆıntr-un box orizontal, suficient de mare ˆıncˆ at s˘ a ˆıncap˘ a tot materialul. Componentele noului box sunt alineate ¸tinˆındu-se seama de linia de baz˘ a a fiec˘ areia. Lungimea boxului orizontal rezultat este suma lungimilor fiec˘ arei componente deoarece, spre deosebire de cazul vertical, procesorul nu scrie spa¸tiu ˆıntre componente. ˆIn˘ al¸timea ¸si adˆ ancimea boxului rezultat sunt ˆın˘ al¸timea ¸si adˆ ancimea maxim˘ a ale boxurilor dintre acolade. Cˆınd procesorul TEX construie¸ste un paragraf, acesta se afl˘ a de asemenea ˆın modul orizontal de lucru numit ordinar. Diferen¸ta dintre modul de lucru orizontal ordinar ¸si cel orizontal restrˆans este c˘ a: ˆın primul, procesorul va diviza boxul rezultat ˆın mai multe boxuri de lungime egal˘ a 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¸tie de con¸tinutul dintre {...}). 6.2 Tipuri de boxuri Procesorul plain TEX recunoa¸ste cinci tipuri de baz˘ a de boxuri: caractere, spa¸tieri (glue), linii, boxuri explicite ¸si formule matematice. Caractere. Acestea sunt apreciate de procesor ca fiind boxuri deoarece au l˘ a¸time, ˆın˘ al¸time ¸si adˆ ancime, specifice fiec˘ arui caracter. Dac˘ a TEX-ul se afl˘ a ˆın modul vertical de lucru cˆ and ˆıntˆ alne¸ste un caracter, atunci trece imediat ˆın modul orizontal ordinar ¸si d˘ a startul unui paragraf, care mai tˆ arziu va fi introdus ˆıntr-o linie de l˘ a¸time \hsize (vezi § 5.1). Amintim c˘ a, dac˘ a ne afl˘ am ˆın modul vertical de lucru, atunci un singur caracter implic˘ a crearea unei linii ˆıntregi. Atˆ at ˆın modul orizontal ordinar cˆ at ¸si ˆın cel restrictiv, caracterele sunt legate la un loc (lipite), iar liniile de baz˘ a ale fiec˘ aruia sunt aliniate dup˘ a linia de baz˘ a a primului caracter. Spa¸tieri. Acestea sunt atˆ at boxuri orizontale, cˆ at ¸si boxuri verticale. Spa¸tiul orizontal este pentru modul de lucru orizontal ¸si cel matematic. Dac˘ a TEX-ul este ˆın modul vertical de lucru ¸si ˆıntˆ alne¸ste comanda \hskip, acesta comut˘ a ˆın modul orizontal ordinar, ca ¸si cum ar ˆıntˆ alni un caracter. Spa¸tierile verticale sunt pentru modul vertical de lucru; dac˘ a TEX-ul ˆıntˆ alne¸ste secven¸ta \vskip ˆın timp ce se afl˘ a ˆın modul orizontal ordinar, acesta termin˘ a de prelucrat paragraful curent, iar dac˘ a ˆıntˆ alne¸ste aceea¸si secven¸t˘ a ˆın timp ce se afl˘ a ˆın modul orizontal restrictiv, acesta va semnala un mesaj de eroare ¸si ˆıncearc˘ a s˘ a termine de prelucrat secven¸ta \hbox din apropierea secven¸tei \vskip. Pe de alt˘ a parte, \kern nu schimb˘ a modul de lucru (acesta este interpretat ˆın func¸tie de modul curent de lucru). Spre
85
BOXURI
deosebire de alte tipuri de materiale, spa¸tierile au o singur˘ a dimensiune: l˘ a¸time – pentru spa¸tierea orizontal˘ a ¸si ˆın˘ al¸time – pentru spa¸tierea vertical˘ a. Aceasta ˆınseamn˘ a c˘ a spa¸tierea ˆın interiorul unui box orizontal nu afecteaz˘ a ˆın˘ al¸timea ¸si adˆ ancimea iar spa¸tierea ˆın interiorul unui box vertical nu afecteaz˘ a l˘ a¸timea. Linii. Acestea sunt de tip orizontal ¸si vertical ¸si sunt utilizate ˆın modul vertical ¸si orizontal de lucru. Astfel, TEX-ul trece ˆın modul vertical de lucru dac˘ a nu se afl˘ a deja ˆın acest mod cˆ and ˆıntˆ alne¸ste secven¸ta \hrule. Invers, secven¸ta \vrule plaseaz˘ a procesorul TEX ˆın modul orizontal de lucru, iar boxurile ce urmeaz˘ a sunt ˆın¸siruite pe orizontal˘ a (lipite unul de altul). Boxuri explicite. S¸ i acestea sunt de tip orizontal ¸si de tip vertical; fiecare tip poate s˘ a apar˘ a ˆın fiecare mod de lucru. ˆIn interiorul unui box, modul de lucru este schimbat conform contextului, dar odat˘ a boxul terminat, modul de lucru revine la cel precedent. Formule matematice. Sunt construc¸tii speciale, ob¸tinute din materialul care este ˆınconjurat de simbolul $. Procesorul va ˆıncepe un nou paragraf dac˘ a ˆıntˆ alne¸ste un simbol $ ¸si (concomitent) se afl˘ a ˆın modul vertical de lucru. Materialul ˆınconjurat de doi $$ de-o parte ¸si de alta este tratat ˆıntr-un mod mai special (vezi § 1.5). Exemplul 6.1. Cum prelucreaz˘ a TEX-ul o secven¸t˘ a \vtop care, pe lˆ ang˘ a boxuri, con¸tine ¸si caractere? Secven¸ta urm˘ atoare: \vtop{\box2 Paragraf \box3\box4} va produce ........ Paragraf ................
Figura 6.4.
86
Capitolul 6
S˘ a analiz˘ am mai am˘ anun¸tit modul ˆın care a prelucrat procesorul secven¸ta de mai sus. Cˆ and ˆıncepe procesarea secven¸tei \vtop, acesta este ˆın modul vertical de lucru. Trecˆ and la analiza materialului dintre acolade, prima dat˘ a ˆıntˆ alne¸ste \box2, pe care ˆıl stocheaz˘ a ˆın memoria sa de lucru, plasˆ and-ul ˆın partea cea mai de sus a stivei pe care o construie¸ste. ˆIn continuare ˆıntˆ alne¸ste caracterul ’U’. Acesta face ca procesorul s˘ a comute ˆın modul orizontal de lucru. Astfel ˆıncepe construc¸tia unui paragraf care se va ˆıncheia atunci cˆ and TEX-ul va ˆıntˆ alni acolada }. Noul paragraf va fi plasat sub \box2 ¸si aliniat la stˆ anga, dup˘ a cum se poate vedea mai sus. Compara¸ti rezultatul proces˘ arii secven¸telor \vtop{\hsize=.8in\box2 Paragraf\par\box3\box4} \vtop{\box2\hbox{Paragraf}\box3\box4} cu cel din Figura 6.4. ˆIn Figura 6.5 de mai jos este ilustrat rezultatul proces˘ arii secven¸telor \ \box2\ Cuvinte\ \box3\ ˆıntre\ \box4\ boxuri\ \box5 care, ˆın fi¸sierul surs˘ a (*.tex), fac obiectul unui paragraf. ........ Cuvinte ........ ˆıntre ........ boxuri ........ Figura 6.5. Observa¸tia 6.1. Utilizarea caracterelor ’\ ’ ca prime elemente ale secven¸tei de mai sus a produs trecerea procesorului din modul vertical ˆın modul orizontal de lucru (vezi § 4.1). 6.3 Opera¸tii cu boxuri Asignarea unui box. Boxurile sunt construite mai ˆıntˆ ai de c˘ atre utilizator, ca apoi s˘ a fie ˆınserate ˆın cadrul materialului, ˆın locul ˆın
87
BOXURI
care se dore¸ste apari¸tia sa. Secven¸ta de control cu ajutorul c˘ areia poate fi construit un box este \setboxi, unde ’i’ este un ˆıntreg pozitiv, 0 ≤i≤ 255. Iat˘ a cˆ ateva exemple: \setbox1=\hbox{...} \setbox19=\vbox{...}. Comanda \setboxi spune TEX-ului s˘ a memoreze materialul “...” dintre acolade ˆın loca¸tia de memorie ‘i’ (1 respectiv 19, ˆın exemplul de mai sus), loca¸tii gestionate de procesorul plain TEX. Cˆ and un box este creat, acesta nu apare ˆın documentul final (fi¸sierul *.dvi); el este utilizat numai cˆ and se folose¸ste secven¸ta \boxi. O asignare \setbox are efect numai ˆın cadrul grupului ˆın care este folosit˘ a (dac˘ a aceasta nu este precedat˘ a de parametrul \global). Plain TEXul permite definirea de nume noi pentru boxuri (ˆın locul numerelor). Acest lucru se realizeaz˘ a cu secven¸ta \newbox. Exemplul urm˘ ator define¸ste ¸si asigneaz˘ a boxul cu numele \dodu: \newbox\dodu \setbox\dodu=\hbox{$\vcenter{...}$}. Utilizarea con¸tinutului unui box. Pe lˆ ang˘ a comanda \box din paragraful de mai sus, mai sunt ¸si alte comenzi pentru utilizarea con¸tinutului unui box, ¸si anume: \copy, \unhbox,
\unvbox, \unhcopy,
\unvcopy.
Cˆ and se folose¸ste secven¸ta \box3, procesorul scrie con¸tinutul loca¸tiei de memorie cu num˘ arul 3 ˆın locul unde apare aceast˘ a secven¸t˘ a. ˆIn plus, ¸sterge boxul \box3 (ˆın general), iar con¸tinutul acestuia este pierdut. Dac˘ a se dore¸ste utilizarea con¸tinutului boxului \box3 f˘ ar˘ a a fi ¸sters, atunci trebuie folosit˘ a secven¸ta \copy3. Motivul pentru care secven¸ta \box3 opereaz˘ a ˆın felul acesta este economia de memorie.
88
Capitolul 6
Procesorul plain TEX nu divide con¸tinutul unui bloc. Pentru exemplificare, analiza¸ti efectul prelucr˘ arii secven¸telor a) ¸si 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 ˆIn cazul b), con¸tinutul boxului \fem nu mai este privit de procesor ca un box, datorit˘ a utiliz˘ arii secven¸tei \unhbox. Astfel, o rupere a materialului poate fi f˘ acut˘ a ˆıntre dou˘ a cuvinte, ceea ce nu se poate ˆın cazul a). Comanda \unvbox opereaz˘ a ˆın acela¸si mod precum \unhbox, dar este folosit˘ a pentru boxuri verticale (cele create cu \vbox sau \vtop). Ca ¸si \box, secven¸tele \unhbox ¸si \unvbox ¸sterg con¸tinutul boxului dup˘ a utilizare. Comenzile \unhcopy ¸si \unvcopy anuleaz˘ a caracterul de box al unui box, f˘ ar˘ a ¸stergerea con¸tinutului acestuia. Observa¸tia 6.2. Cˆ ateva sugestii de utilizare a secven¸telor de control destinate utiliz˘ arii blocurilor: (i) folosirea secven¸tei \box, cˆ and se dore¸ste utilizarea con¸tinutului boxului o singur˘ a dat˘ a. (ii) folosirea secven¸telor \unhbox ¸si \unvbox, pentru prelucr˘ ari mai flexibile. (iii) folosirea secven¸telor \unhcopy sau \unvcopy, cˆ and se dore¸ste utilizarea con¸tinutului boxului de mai multe ori.
89
BOXURI
Translarea pe vertical˘ a ¸si pe orizontal˘ a. Se poate ˆıntˆ ampla ca alinierea boxurilor pe orizontal˘ a, cu ajutorul propriilor linii de baz˘ a, s˘ a nu se fac˘ a suficient de bine, dorindu-se astfel mi¸scarea fiec˘ aruia ˆın sus sau ˆın jos, ˆın raport cu propria linie de baz˘ a. Boxurile verticale pot fi aranjate altfel decˆ at o face implicit procesorul. A. Translarea pe vertical˘ a. Comenzile \raise ¸si \lower permit utilizatorului mi¸scarea unui box ˆın raport cu propria linie de baz˘ a. De re¸tinut c˘ a acestea sunt permise numai ˆın modul orizontal de lucru (atunci cˆ and procesorul scrie boxurile unul lˆ ang˘ a altul). S˘ a urm˘ arim efectul comenzii \raise pe baza exemplului urm˘ ator: \raise 6pt\box3. Rezultatul prelucr˘ arii secven¸telor de mai sus const˘ a ˆın ridicarea pe vertical˘ a a boxului \box3 cu 6pt, ˆınainte ca acesta s˘ a fie ad˘ augat la paragraful sau \hbox-ul de care apar¸tine. Este ca ¸si cum linia de baz˘ a a boxului \box3 a fost coborˆ at˘ a cu 6pt fa¸t˘ a ˆ de con¸tinutul acestuia. In˘ al¸timea boxului \box3 a crescut cu 6pt, ˆın timp ce adˆ ancimea s-a diminuat cu aceea¸si valoare. Comanda \raise trebuie s˘ a fie urmat˘ a de o dimensiune ¸si apoi de un box de orice tip, creat pe loc sau recuperat dintr-o loca¸tie de memorie gestionat˘ a de procesor (vezi asignarea unui box). ˆIn orice alt context, nu va fi func¸tional˘ a. De exemplu, secven¸ta \raise 6pt{\vbox{...}} va da o eroare; acoladele din jurul secven¸tei \vbox sunt incorecte! ˆIn Figura 6.6 de mai jos sunt aliniate ˆın partea de sus boxurile \box2, \box3 ¸si \box4, care au aceea¸si ˆın˘ al¸time ¸si adˆ ancime, egale cu: 7mm, 5mm ¸si 10mm, respectiv. S ¸ irul de secven¸te de control cu care s-a ob¸tinut aceast˘ a aliniere este urm˘ atorul: \hbox{\$rightarrow$\raise -4mm\copy2\copy3 \raise -8mm\copy4}
90
Capitolul 6
........
........
→
........ →
........
Figura 6.6.
........ ........ Figura 6.60 .
Analiza¸ti Figura 6.60 , care ilustreaz˘ a rezultatul proces˘ arii aceluia¸si ¸sir de secven¸te de mai sus, din care s-au eliminat secven¸tele \raise. Ca efect, comanda \lower este opusul comenzii \raise. De exemplu, comanda \raise -1in\box9 are acela¸si efect cu comanda \lower 1in\box9. B. Translarea pe orizontal˘ a. Dup˘ a cum am v˘ azut ˆın paragraful de mai sus, comenzile \raise ¸si \lower lucreaz˘ a numai ˆın modul orizontal de lucru. Acestea au un echivalent pentru modul vertical de lucru, ¸si anume: se poate mi¸sca un box la stˆ anga sau la dreapta pe orizontal˘ a, utilizˆ and urm˘ atoarele secven¸te de control: \moveleft ¸si \moveright, respectiv. ˆ Incadrarea ¸si divizarea unui box. Pentru a ˆıncadra con¸tinutul unui box cu linii, utilizatorul are la dispozi¸tie macroul \boxit{2pt} {...}; acesta va ˆıncadra printr-o linie frˆ ant˘ a ˆınchis˘ a materialul indicat prin “...”, linie trasat˘ a la o distan¸t˘ a de 2pt fa¸t˘ a de fiecare latur˘ a a cadrurii. Valorile celor doi parametri sunt variabile, cel de-al doilea parametru fiind un box. Defini¸tia macroului \boxit este urm˘ atoarea:
91
BOXURI
\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˘ am box-ul 8 setat astfel: \setbox8= \hbox{\bf\TeX}. Rezultatul prelucr˘ arii secven¸telor: \boxit{2pt}{\copy8} \boxit{2pt}{\boxit {2pt}{\copy8}} este ilustrat ˆın Figura 6.7. TEX
TEX
Figura 6.7.
Con¸tinutul unui box poate fi scris pe dou˘ a coloane. ˆIn vederea realiz˘ arii acestui lucru, procesorul TEX dispune de secven¸ta de control \vsplit. Pentru a ilustra modul de utilizare a comenzii \vsplit, consider˘ am c˘ a boxul 2 este asignat astfel: \setbox2=\vbox{\eightrm \hsize 4cm\parindent= 0pt\baselineskip=10pt A finite ...
} Diviz˘ am con¸tinutul boxului 2 ˆın dou˘ a, prima jum˘ atate memorˆ and-o ˆın boxul 1, folosind secven¸ta: \setbox1=\vsplit2 to 2cm. Figura 6.8 ilustreaz˘ a con¸tinutul celor dou˘ a boxuri (box1 ¸si box2), rezultat al prelucr˘ arii secven¸tei: \centerline{\boxit{3pt}{\copy1}\hfil \boxit{3pt}{\copy2}}
92
Capitolul 6 A finite element is conforming if the space of approximation is included in H 1 (in practice continuous functions). The most frequently used finite element in this book is P 1 conforming ele-
ment on triangles (tetrahedra). An element is said to be lagrangian if it uses only value of functions at nodes and no derivatives.
Figura 6.8. 6.4 Dimensiunile unui box Putem referi dimensiunile unui box (care este memorat ˆıntr-o loca¸tie de memorie) folosind secven¸tele: \ht, \dp ¸ si \wd, urmate de num˘ arul sau numele boxului. De exemplu, pentru a face ca ˆın˘ al¸timea boxului 2 s˘ a apar˘ a pe ecran, trebuie scris˘ a ˆın fi¸sierul surs˘ a comanda \showthe\wd2; TEX-ul se va opri ˆın punctul ˆın care ˆıntˆ alne¸ste aceast˘ a comand˘ a, va afi¸sa valoarea parametrului (precedat˘ a de simbolul >) iar apoi, pe o nou˘ a linie a ecranului, va a¸stepta introducerea, de c˘ atre utilizator, a simbolului ’CR’ pentru a continua procesarea. Pentru a putea referi dimensiunile unui box, acesta trebuie mai ˆıntˆ ai asignat. Implicit, dimensiunile unui box sunt determinate ˆın func¸tie de con¸tinutul s˘ au. Amintim pe scurt modul de stabilire a dimensiunilor boxurilor orizontale ¸si verticale: • Pentru un box orizontal, ˆın˘ al¸timea ¸si adˆ ancimea sunt ˆın˘ al¸timea maxim˘ a ¸si adˆ ancimea maxim˘ a a boxurilor care ˆıl alc˘ atuiesc. L˘ a¸timea este suma l˘ a¸timilor boxurilor care ˆıl alc˘ atuiesc, la care se adun˘ a spa¸tiile (dac˘ a exist˘ a). • Pentru un box vertical, l˘ a¸timea este l˘ a¸timea maxim˘ a a boxurilor care ˆıl alc˘ atuiesc. Dimensiunea vertical˘ a total˘ a este suma ˆın˘ al¸timilor ¸si adˆ ancimilor boxurilor care ˆıl alc˘ atuiesc, la care se adun˘ a spa¸tiile (dac˘ a exist˘ a). Observa¸tia 6.3. Dac˘ a un box vertical const˘ a ˆıntr-un singur caracter, procesorul TEX va crea o linie de lungime \hsize, avˆ and
BOXURI
93
drept con¸tinut acest caracter. Altfel spus, un box vertical va avea l˘ a¸timea cel pu¸tin egal˘ a cu valoarea parametrului \hsize. Cˆ and se scrie textul direct ˆıntr-un box vertical, este indicat s˘ a se fixeze dinainte valoarea parametrului \hsize, de exemplu: \vbox{\hsize=2.4in ...}. ˆIn func¸tie de tipul boxului, se poate impune o restric¸tie asupra uneia dintre dimensiuni, ˆıncˆ at s˘ a aib˘ a o valoare fix˘ a. Secven¸ta \hbox to 2in{...} va genera un box orizontal de l˘ a¸time 2in. Pentru a satisface restric¸tia, procesorul va extinde sau comprima spa¸tiul care (poate) exist˘ a ˆın box. Dac˘ a prin aceast˘ a opera¸tie este dep˘ a¸sit˘ a elasticitatea disponibil˘ a, un mesaj de eroare va fi semnalat de c˘ atre procesor (“overfull box” sau “underfull box”). Pentru a folosi con¸tinutul unui box asignat ˆın interiorul altui box, a c˘ arui dimensiune este predefinit˘ a, sunt foarte indicate comenzile: \unvbox ¸si \unhbox. Analiza¸ti exemplele urm˘ atoare ¸si rezultatele proces˘ arii acestora. \setbox11=\hbox{The result of} $|$\copy11$|$ $|$\hbox to 1.1in\{copy11}$|$ $|$\hbox to 1.1in\{unhbox11}$|$
|The result of| |The result of | |The result of|
Folosind construc¸tia to (ca ˆın exemplul de mai sus), se pot crea boxuri diferite cu aceea¸si dimensiune. De exemplu, pentru a crea un box cu aceea¸si ˆın˘ al¸time ca boxul 5, se poate folosi secven¸ta: \setbox6=\vbox to \ht5{...}. 6.5 Spa¸tii ˆıntre boxuri Dup˘ a cum am v˘ azut la ˆınceputul acestui capitol, procesorul plain TEX adaug˘ a un anumit spa¸tiu ˆıntre elementele unui box, la generarea acestuia. Trei variabile controleaz˘ a aceast˘ a opera¸tie: \baselineskip, \lineskip ¸si \lineskiplimit. Prima variabil˘ a este setat˘ a de plain TEX la 12pt.
94
Capitolul 6
Dac˘ a dintre dou˘ a boxuri al˘ aturate, primul este prea adˆ anc sau al doilea este prea ˆınalt, atunci cele dou˘ a boxuri ar urma s˘ a ˆ fie aranjate foarte aproape unul de altul. In acest caz plain TEX-ul separ˘ a totu¸si boxurile, cu o valoare dat˘ a de variabila \lineskip (implicit, aceasta are valoarea 1pt). Cˆ and dou˘ a boxuri sunt considerate foarte aproape? Pragul este valoarea variabilei \lineskiplimit care, ˆın plain TEX, este implicit 0pt. Figura 6.9 ilustreaz˘ a cele spuse mai sus. ............. ............. ................
................
..............
..............
Figura 6.9. Valorile celor trei variabile, pentru partea din stˆ anga ¸si pentru partea din dreapta din figura de mai sus, au fost, respectiv: \baselineskip=5mm \baselineskip=0mm \lineskip=3mm \lineskip=2mm \lineskiplimit=0mm\lineskiplimit=0mm ˆIn˘ al¸timile celor trei boxuri sunt: 2, 2 ¸si 4mm, iar adˆ ancimile sunt toate egale cu 2mm. ˆIn exemplul din stˆ anga, primele dou˘ a boxuri sunt separate cu 1 = 5 − (2 + 2)mm de spa¸tiu. Acesta este acceptabil deoarece nu este mai mic decˆ at valoarea variabilei \lineskiplimit. Efectuˆ and acela¸si calcul pentru ultimele dou˘ a boxuri, ob¸tinem -1mm, valoare care este mai mic˘ a decˆ at valoarea variabilei \lineskiplimit; deoarece procesorul nu poate respecta variabila \lineskiplimit, va insera ˆıntre cele dou˘ a boxuri un spa¸tiu de 3mm (valoarea variabilei \lineskip). Pentru exemplul din dreapta, \baselineskip este zero, ˆıncˆ at nu va putea fi respectat˘ a niciodat˘ a valoarea variabilei \lineskiplimit. ˆIn consecin¸t˘ a, procesorul va insera ˆıntre boxuri un spa¸tiu de 2mm (valoarea variabilei \lineskip).
BOXURI
95
Observa¸tia 6.4. (i) Pentru a realiza o spa¸tiere dubl˘ a ˆıntre liniile unui document, poate fi utilizat˘ a urm˘ atoarea comand˘ a: \baselineskip=2\baselineskip. (ii) Adesea se dore¸ste eliminarea spa¸tiilor dintre dou˘ a boxuri. Acest lucru se poate realiza prin inserarea comenzii \nointerlineskip ˆıntre cele dou˘ a boxuri. Pentru eliminarea tuturor spa¸tiilor dintr-un box, se poate utiliza comanda \offinterlineskip. 6.6 Linii Liniile sunt boxuri umplute cu negru. Ele pot fi create cu ajutorul urm˘ atoarelor 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ˆ and: ˆın˘ al¸timea, adˆ ancimea ¸si lungimea liniei. Oricare dintre argumente poate lipsi ¸si poate fi utilizat ˆın orice ordine. Procesorul recunoa¸ste a¸sadar dou˘ a tipuri de linii: orizontale (\hrule) ¸si verticale (\vrule). Dup˘ a cum vom vedea ˆın continuare, secven¸ta \hrule poate trasa o linie vertical˘ a, ¸si viceversa. Distinc¸tia esen¸tial˘ a dintre cele dou˘ a secven¸te este aceea c˘ a \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 paragrafe sau ˆın interiorul unui box vertical. Dac˘ a se ˆıncearc˘ a folosirea acestei secven¸te ˆın interiorul unui paragraf, procesorul TEX va ˆıncheia prelucrarea paragrafului ¸si va trece ˆın modul vertical de lucru. ˆIn plus, dac˘ a procesorul s-ar afla ˆın modul orizontal restrictiv (echivalent cu prezen¸ta unei comenzi \hrule ˆın interiorul unui \hbox), atunci acesta va semnala o eroare.
96
Capitolul 6
Implicit, argumentele height ¸si depth au, respectiv, valorile: .4pt ¸si 0pt. Lipsa tuturor argumentelor are drept efect trasarea unei linii, a c˘ arei lungime este egal˘ a cu valoarea parametrului \hsize; adic˘ a, prelucrarea secven¸tei \hrule conduce la trasarea urm˘ atoarei linii: Linii verticale. Secven¸ta \vrule poate fi utilizat˘ a oricˆ and, ˆın modul orizontal de lucru; de exemplu: \hbox{\vrule height 7pt depth 5pt width 3pt} . . . . . . . . . . \hbox{\vrule height .4pt depth 0pt width 1cm} . . . Dac˘ a argumentul width (lungime) este absent din comanda \vrule, procesorul va folosi valoarea implicit˘ a a acestuia (.4pt). Dac˘ a height ¸si depth sunt absente, atunci procesorul va folosi valorile celui mai apropiat box orizontal. De exemplu, urm˘ atoarele linii verticale: s-au ob¸tinut prin procesarea ¸sirului de secven¸te: \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 acestuia ˆın componente. De cele mai multe ori, tabelul este format din ¸siruri (liniile unei matrici), fiecare ¸sir (linie) avˆ and un anumit num˘ ar de intr˘ ari; intr˘ arile corespunz˘ atoare fiec˘ arei linii sunt aliniate vertical (pe coloane) ¸si riguros legate, atˆ at logic cˆ at ¸si tipografic. Iat˘ a dou˘ a exemple:
name x y z
type integer real boolean
value 1998 3.9998 false
sau name x
type integer
y
real
z
boolean
value 1998 3.9998 false
Structura unui tabel se poate da cu ajutorul comenzii \halign, a c˘ arei form˘ a general˘ a este:
98
Capitolul 7
\halign {...#...&...#...&...#...&...#...&...#...\cr ....... & ....... & ....... & ....... & .......\cr ....... & ....... & ....... & ....... & .......\cr ........................................................ ....... & ....... & ....... & ....... & .......\cr } Materialul din interiorul acoladelor, de dup˘ a secven¸ta de control \halign, este ˆımp˘ ar¸tit ˆın linii, fiecare terminat˘ a prin \cr; intr˘ arile din interiorul fiec˘ arei linii sunt separate prin caracterul &. Prima linie din \halign se nume¸ste preambul ¸si ˆıi comunic˘ a procesorului TEX cum trebuie construite liniile utile ale tabelului. 7.1 Alinieri simple Prin aliniere simpl˘ a ˆın¸telegem o aliniere ˆın care nu sunt folosite liniile continue (neˆıntrerupte) pentru separarea ¸sirurilor ¸si coloanelor. De exemplu, cu ajutorul secven¸tei: \halign { # & # & # \cr name & type & value & \cr $x$ & integer & 1998 & \cr $y$ & real & 3.9188 & \cr $z$ & boolean & false & \cr } se ob¸tine urm˘ atoarea aliniere simpl˘ a: name type x integer
y z
real
value
1998 3.9998
boolean false
S˘ a remarc˘ am c˘ a, ˆın scrierea secven¸tei de mai sus, chiar dac˘ a ˆıntre cuvintele name ¸si type am l˘ asat spa¸tiu explicit, procesorul TEX face oricum acest lucru.
ALINIERI (Tabele)
99
Pentru a face tabelul precedent mai lizibil, vom introduce cˆ ateva secven¸te \quad (\quad≡ \hskip 1em) ˆın preambul, de exemplu: a) cu ajutorul secven¸tei: \halign { # &\quad \it# &\quad # \cr name & type & value & \cr $x$ & integer & 1998 & \cr $y$ & real & 3.9188 & \cr $z$ & boolean & false & \cr } se ob¸tine urm˘ atoarea aliniere simpl˘ a: name
type
value
x y z
integer real boolean
1998 3.9998 false
sau b) utilizˆ and secven¸ta: \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¸tine urm˘ atoarea aliniere simpl˘ a: name x y z
type integer real boolean
value 1998 3.9998 false
100
Capitolul 7
ˆIn cele ce urmeaz˘ a, ˆıntrucˆ at vom folosi frecvent secven¸ta \hfil\quad, corespunz˘ ator acesteia introducem urm˘ atoarea defini¸tie nou˘ a: \def\hfq{\hfil\quad}
(7.1)
Observa¸tia 7.1. Comanda \halign poate fi folosit˘ a doar ˆın modul vertical de lucru, deoarece aceasta creeaz˘ a o stiv˘ a de boxuri orizontale (liniile). De obicei, cˆ and cl˘ ade¸ste stiva de boxuri, procesorul adaug˘ a spa¸tiu ˆıntre liniile tabelului (precum construie¸ste liniile (boxurile) unui paragraf). De asemenea, procesorul poate ˆımp˘ ar¸ti sau rupe (\break) stiva ˆıntre pagini, dac˘ a acesta lucreaz˘ a ˆın modul vertical ordinar. 7.2 Cazuri speciale de alinieri 7.2.1 Scurtarea preambulului Presupunem c˘ a avem de prelucrat urm˘ atorul text: Values of n: Values of n2 :
0 1 2 0 1 4
3 4 9 16
5 6 7 8 25 36 49 64
9 81
Observ˘ am c˘ a coloanele tabelului de mai sus (mai pu¸tin prima) sunt generate conform modelului \hfil #\quad. Pentru a evita scrierea de 10 ori a aceleia¸si secven¸te, putem folosi o scriere mai simpl˘ a a preambulului, ¸si 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} ˆIn general, caracterele # ¸si & trebuie scrise alternativ ˆın preambul, caracterul # precedˆ and primul caracter &. ˆIn defini¸tia scurt˘ a a preambulului, se scrie un caracter &, exact dup˘ a un alt caracter &, ceea ce implic˘ a repetarea p˘ ar¸tii r˘ amase din preambul,
ALINIERI (Tabele)
101
de cˆ ate ori este necesar (ˆın vederea trat˘ arii tuturor coloanelor din tabel). Un preambul de forma: A & & B\cr
(7.2)
unde, ˆın mod normal, caracterele # ¸si & alterneaz˘ a ˆın interiorul lui A ¸si B, este echivalent cu urm˘ atoarea ˆın¸siruire: A & B & B & B ...\cr. Similar stau lucrurile pentru un preambul de forma &B\cr. Comparˆ and cu exemplul de mai sus, elementele A ¸si B din rela¸tia (7.2) corespund urm˘ atoarelor asign˘ ari: A:=#\hfil\quad iar B:=\hfil #\quad. 7.2.2 Intr˘ ari vide Dac˘ a ˆıntr-un ¸sir mai multe coloane sunt vide, atunci secven¸ta ce trebuie scris˘ a ˆın “fi¸sierul surs˘ a” revine la o ˆın¸siruire de caractere &, ˆıncheiate cu secven¸ta \cr. ˆIn aceast˘ a situa¸tie, se poate renun¸ta la scrierea ¸sirului de &, scriind pur ¸si simplu secven¸ta \cr. De exemplu, construc¸tia urm˘ atoare: \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˘ atoarea aliniere: 1 1 2 1 2 3 1 2 3 1 20 30
4 4 5
102
Capitolul 7
7.2.3 Inserarea de text (material) ˆıntre linii Construc¸tia urm˘ atoare ...\cr\noalign {...} (unde, ˆıntre acolade poate fi scris orice “material” permis ˆın modul vertical de lucru), insereaz˘ a acest material dintre acolade, ˆıntre liniile tabelului, f˘ ar˘ a aliniere. Putem avea cˆ ateva secven¸te de control \noalign, una dup˘ a alta, dar ele trebuie s˘ a ˆınceap˘ a imediat dup˘ a secven¸ta \cr, care ˆıncheie linia precedent˘ a; altfel, secven¸ta \noalign nu este luat˘ a ˆın seam˘ a. Pentru exemplificare, relu˘ am tabelul din §7.1, pe care ˆıl ˆımbun˘ at˘ a¸tim 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¸tiei de mai sus conduce la ob¸tinerea urm˘ atorului tabel: name x y z
type integer real boolean
value 1998 3.9988 false
Secven¸ta \smallskip este necesar˘ a ˆın construc¸tia de mai sus, deoarece procesorul nu adaug˘ a spa¸tiu ˆınainte ¸si dup˘ a o linie continu˘ a. Secven¸ta \hrule are lungimea egal˘ a cu lungimea tabelului, deoarece nu am specificat explicit lungimea acesteia (vezi §6.6).
ALINIERI (Tabele)
103
7.3 Linii verticale Continu˘ am cu ˆımbun˘ at˘ a¸tirea tabelului ob¸tinut ˆın paragraful §7.2.3. Urm˘ atoarea construc¸tie: \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 x y z
type integer real boolean
value 1998 3.9988 false
ˆın care am folosit secven¸ta \offinterlineskip (aceasta inhib˘ a ad˘ augarea de spa¸tiu ˆıntre linii) ¸si macroul \strut (este plasat ˆın locul preambulului ¸si produce o linie invizibil˘ a). Parametrii liniei invizibile (generat˘ a de macroul \strut) au urm˘ atoarele valori: width=0pt, height=85pt iar depth=3.5pt.
104
Capitolul 7
7.4 Alinieri verticale Pentru a realiza o aliniere vertical˘ a, procesorul dispune de secven¸ta de control \valign. De exemplu, pentru a ob¸tine urm˘ atoarea aliniere vertical˘ a: aur curea bar argint bizar aram˘ a s-a folosit secven¸ta \valign urm˘ atoare: \valign{ & \hbox {\strut\quad #}\cr aur & argint & aram˘ a \cr bar & bizar \cr curea \cr} ˆIn cazul comenzii \valign, caracterul & separ˘ a intr˘ arile ˆıntro coloan˘ a, iar secven¸ta \cr separ˘ a coloanele. Preambulul lucreaz˘ a ˆın acela¸si fel ca preambulul secven¸tei \halign. Trasarea unei linii verticale la ˆınceput, ˆıntre coloane ¸si la sfˆ ar¸situl alinierii de mai sus, se ob¸tine dac˘ a se adaug˘ a (dup˘ a fiecare secven¸t˘ a de control \cr din construc¸tia precedent˘ a) secven¸tele \noalign{\vrule}. Rezultatul proces˘ arii noii secven¸te \halign va da urm˘ atoarea aliniere vertical˘ a: aur curea bar argint bizar aram˘ a
˘ CAPITOLUL 8. SCRIEREA MATEMATICA
Pentru ob¸tinerea simbolurilor matematice trebuie ca procesorul s˘ a fie ˆın modul matematic de lucru (pentru am˘ anunte asupra modului matematic de lucru, vezi §1.5). Preciz˘ am c˘ a num˘ arul de utiliz˘ ari ale simbolului $ ˆın cadrul unui “fi¸sier surs˘ a” trebuie s˘ a fie par; altfel, cu toate c˘ a procesarea poate avea loc, documentul final nu va avea aspectul dorit. ˆIn continuare, ne vom referi la perechi de simboluri $, mai precis la construc¸tii de forma: $ material $ sau $$ material $$. La ˆıntˆ alnirea primului simbol $ (sau a dou˘ a simboluri $$) al unei perechi, procesorul TEX comut˘ a modul curent de lucru ˆın modul matematic de lucru. ˆIntˆ alnirea celui de-al doilea simbol $ al perechii (sau al celei de-a doua perechi de $$) conduce la ˆıncheierea modului matematic de lucru ¸si revenirea la modul precedent de lucru. Folosirea ˆın “fi¸sierul surs˘ a” a unei secven¸te de forma ...(text)...$ text matematic $...(text)... este echivalent cu a spune c˘ a procesorul se afl˘ a ˆın modul text matematic, avˆ and drept efect construirea unei formule matematice ¸si plasarea acesteia ˆın cadrul unei linii de text obi¸snuite. O secven¸t˘ a de forma ... (text)... a procesorul se afl˘ a $$ text matematic $$ ... (text) ... ne spune c˘ ˆın modul display matematic, situa¸tie ˆın care va fi construit˘a o formul˘ a matematic˘ a, scris˘ a pe o singur˘ a linie, centrat˘ a.
106
Capitolul 8
Exemplul 8.1. Orice expresie matematic˘ a, construit˘a ˆın maniera: $$ ... expresie matematic˘a ... $$, are drept rezultat scrierea ˆın documentul final a materialului “expresie matematic˘a” pe o singur˘ a linie, egal dep˘ artat de marginea din stˆ anga ¸si marginea din dreapta, precum expresia de mai jos: iv
(8.1 )
l H(u) = u + ϕ(u), 2
ϕ(u) =
+1, −1,
u>0 u < 0.
Dup˘ a cum se poate vedea din exemplul de mai sus, o formul˘ a scris˘ a ˆın modul display, pe lˆ ang˘ a faptul c˘ a este scris˘ a centrat pe o singur˘ a linie, este ¸si distan¸tat˘ a pu¸tin fa¸t˘ a de linia precedent˘ a ¸si linia urm˘ atoare. Aceast˘ a spa¸tiere este dat˘ a de urm˘ atoarele variabile ale plain TEX-ului: \abovedisplayskip=12pt plus 3pt minus 9 pt, \belowdisplayskip=12pt plus 3pt minus 9 pt. Observa¸tia 8.1. (i) Nu trebuie l˘ asat˘ a o linie goal˘ a ˆın “fi¸sierul surs˘ a”, ˆınainte de prima grup˘ a de $$ sau dup˘ a grupa a doua de $$, dac˘ a nu se dore¸ste ca materialul care urmeaz˘ a s˘ a constituie un nou paragraf (ˆın cazul ˆın care exist˘ a o asemenea linie, se ob¸tine mai mult spa¸tiu ˆıntre formula matematic˘ a ¸si linia de deasupra acesteia, iar urm˘ atoarea linie de dup˘ a formul˘ a va fi scris˘ a cu alineat). (ii) Procesorul TEX nu poate ˆıncepe prelucrarea unui nou paragraf, dac˘ a se afl˘ a ˆın modul matematic de lucru a¸sa ˆıncˆ at, confruntat eventual cu o astfel de tentativ˘ a, va b˘ anui c˘ a ceva se petrece ˆın mod eronat ¸si va ˆıncheia procesarea formulei ˆın cauz˘ a. ˆ Perechile $...$, respectiv $$...$$, delimiteaz˘ a un grup. In interiorul unui asemenea grup procesorul ignor˘ a toate spa¸tiile ¸si CRurile. Exemplul 8.2. Secven¸tele urm˘ atoare: $\int \Omega f(x)dx$ $\int \Omega f( x ) d x$
˘ SCRIEREA MATEMATICA
107
au exact acela¸si efect. Desigur, un spa¸tiu ˆıntre caracterele ”int”, care definesc secven¸ta \int, nu este permis. 8.1 Simboluri matematice Procesorul TEX recunoa¸ste 8(opt) clase de simboluri ¸si caractere, ˆın modul matematic de lucru (vezi [2], p. 154). 1. caractere ordinare
5. delimitatori pentru deschidere
2. operatori unari 3. operatori binari
6. delimitatori pentru ˆınchidere 7. simboluri de punctua¸tie
4. operatori rela¸tionali
8. caractere ”familie-variabil˘ a”
Clasa a 8-a con¸tine toate numerele ¸si literele, mic¸sorate ¸si m˘ arite; poart˘ a numele de caractere “familie-variabil˘ a”, deoarece schimb˘ a fontul ˆın func¸tie de fontul \fam curent. Clasa a 6-a const˘ a din: ,(virgula), ;(punct ¸si virgul˘ a) ¸si \colon (secven¸ta \colon produce ˆın documentul final simbolul “:”, f˘ ar˘ a a fi precedat sau urmat de spa¸tiu). Prezent˘ am pe larg aceste clase. Caractere ordinare Caracterele ordinare constau din: punctul zecimal, literele grece¸sti, anumite caractere caligrafice ¸si o serie de simboluri matematice: Literele grece¸sti mici α β γ δ ε ζ η
\alpha \beta \gamma \delta \epsilon \varepsilon \zeta \eta
ι κ λ µ ν ξ ≤ π
\iota \kappa \lambda \mu \nu \xi \o \pi
% σ ς τ υ φ ϕ χ
\varrho \sigma \varsigma \tau \upsilon \phi \varphi \chi
108
Capitolul 8
θ \theta ϑ \vartheta
$ \varpi ρ \rho
ψ \psi ω \omega
Literele grece¸sti mari Γ ∆ Θ Λ
\Gamma \Delta \Theta \Lambda
Ξ Π Σ Υ
\Xi \Pi \Sigma \Upsilon
Φ \Phi Ψ \Psi Ω \Omega
Alte caractere ordinare ℵ h ¯ ı ` ℘ < Im ∂ ∞
\aleph \hbar \imath \jmath \ell \wp \Re \Im \partial \infty
0 \prime ∅ \emptyset ∇ √ \nabla \surd > \top ⊥ \bot k \l or \Vert 6 \angle 4 \triangle \ \backslash
∀ ∃ ¬ [ \ ] ♣ ♦ ♥ ♠
\forall \exists \neg or \lnot \flat \natural \sharp \clubsuit \diamondsuit \heartsuit \spadesuit
Operatori mari Operatorii mari se ˆımpart ˆın dou˘ a subclase (ˆın func¸tie de m˘ arime): “mari” (pentru utilizare ˆın modul matematic “display”), ¸si “mai-pu¸tin mari” (pentru utilizare ˆın modul matematic “text”). P Σ Q \sum Π ` \prod q Z \coprod R \int
Operatori mari T ∩ S \bigcap ∪ F \bigcup t \bigsqcup W ∨ \bigvee
˘ SCRIEREA MATEMATICA
H
I
\oint
109
∧
J L \bigodot ⊕ \bigoplus
V
\bigwedge N ⊗ U \bigotimes ] \biguplus
Operatori binari S Anumi¸ti operatori binari au echivalent “mare”, cum ar fi ∪ a este folosit˘ a ˆıntre dou˘ a litere sau expresii ¸si . Forma binar˘ (A∪B), ˆın timp ce forma “mare” este folosit˘ a numai cˆ and exist˘ ao expresie, ˆın general cu subscript, urmat˘ a de operator, de exemplu, S Ai . Alt˘ a posibil˘ a surs˘ a de confuzie este secven¸ta \setminus, care reprezint˘ a operatorul de sc˘ adere a dou˘ a mul¸timi; acela¸si simbol se ob¸tine cu secven¸ta \backslash, dar m˘ arimea spa¸tiului care le ˆınconjoar˘ a difer˘ a (X\Y , X \ Y ). Operatori binari + ± ∓ \ · × ∗ ? ◦ •
+ \pm \mp \setminus \cdot \times \ast or ∗ \star \diamond \circ \bullet
− ∩ ∪ ] u t / . o
4
− \cap \cup \uplus \sqcap \sqcup \trianglelef \triangleright \wr \bigcirc \bigtriangleup
÷ ∨ ∧ ⊕ ⊗ † ‡ q 5
\div \vee or \lor \wedge or \land \oplus \ominus \otimes \oslash \odot \dagger \ddagger \amalg \bigtriangledown
Pentru a elimina spa¸tiul din jurul unui operator binar, trebuie utilizate acoladele (secven¸ta $u{\circ v}$ genereaz˘ a: u◦v, ˆın timp ce secven¸ta $u\circ v$ genereaz˘ a: u ◦ v).
110
Capitolul 8
Operatori rela¸tionali Procesorul plain TEX dispune de un num˘ ar mare de asemenea operatori. Trebuie remarcat c˘ a secven¸tele \mid ¸si \parallel dau acela¸si simbol cu secven¸tele simple | ¸si \|, ˆıns˘ a genereaz˘ a mai mult spa¸tiu ˆın jurul lor. Operatori rela¸tionali < ≤ ≺ ⊂ ⊆ v ∈ ` ^ _
< \leq or \le \prec \preceq \ll \subset \subseteq \sqsubseteq \in \vdash \smile \frown
> ≥ ⊃ ⊇ w 3 a | k
> \geq or \ge \succ \succeq \gg \supset \supseteq \sqsupseteq \ni \dashv \mid \parallel
= ≡ ∼ ' ≈ ∼ = ./ ∝ |= . = ⊥
= \equiv \sim \simeq \asymp \approx \cong \bowtie \propto \models \doteq \perp
Mul¸ti dintre ace¸sti operatori pot fi nega¸ti, lucru care poate fi realizat prin precederea secven¸tei de control respective cu secven¸ta \not. Nega¸tii 6< 6 ≤ 6 ≺ 6 6 ⊂ 6 ⊆ 6 v
\not< \not\leq \not\prec \not\preceq \not\subset \not\subseteq \not\sqsubseteq
6 > 6≥ 6 6 6 ⊃ 6 ⊇ 6 w
\not> \not\geq \not\succ \not\succeq \not\supset \not\supseteq \not\sqsupseteq
˘ SCRIEREA MATEMATICA
6= 6 ∼ 6≈ ∈ /
\not<=, \neq, \ne \not\sim \not\approx \notin
111
6≡ \not\equiv 6 \not\simeq ' ∼ 6= \not\cong
S˘ age¸tile sunt tipuri speciale de operatori de rela¸tie. Multe s˘ age¸ti orizontale sunt ˆıntˆ alnite sub dou˘ a m˘ arimi (cele lungi ˆıncep cu grupul de litere “long”). S˘ age¸tile verticale pot fi de asemenea m˘ arite (vezi §8.10). S˘ age¸ti ← → ↔ ⇐ ⇒ ⇔ 7 → ←( ) * ) ↓ ⇑ m & -
\leftarrow, \gets \rightarrow, \to \leftrightarrow \Leftarrow \Rightarrow \Leftrightarrow \mapsto \hookleftarrow \leftharpoonup \leftharpoondown \rightleftharpoons \downarrow \Uparrow \Updownarrow \searrow \nwarrow
←− −→ ←→ ⇐= =⇒ ⇐⇒ 7−→ ,→ * + ↑ l ⇓ % .
\longleftarrow \longrightarrow \longleftrightarrow \Longleftarrow \Longrightarrow \Longleftrightarrow \longmapsto \hookrightarrow \rightharpoonup \rightharpoondown \uparrow \updownarrow \Downarrow \nearrow \swarrow
Delimitatori la stˆ anga ¸si la dreapta Parantezele ¸si alte simboluri care sunt perechi sunt cunoscute sub denumirea de delimitatori ¸si TEX-ul ˆıi poate face utilizabili ˆın diferite m˘ arimi (vezi §8.10). Sunt prezentate ˆın continuare
112
Capitolul 8
secven¸tele de control de baz˘ a ce pot fi folosite pentru a ob¸tine delimitatorii. Delimitatori la stˆ anga ¸si la dreapta ( ) h i
( ) \langle \rangle
[ ] { }
[ or \lbrack ] or \rbrack \{ or \lbrace \} or \rbrace
b c d e
\lfloor \rfloor \lceil \rceil
8.2 Fonturi ˆın modul matematic de lucru ˆIn general, literele din cadrul formulelor matematice sunt tip˘ arite ˆın italic. cmmi este numit fontul principal, folosit de TEX ˆın modul matematic de lucru. Acesta produce caracterul pu¸tin mai larg decˆ at ˆın textul italic (compara¸ti m cu m). Dup˘ a cum am v˘ azut ˆın Capitolul 1, comenzile de schimbare a tipului de font: \rm, \bf, \it, \sl ¸si \tt lucreaz˘ a ˆın modul matematic, dar ultimele trei nu pot fi utilizate pentru scrierea indicilor ¸si exponen¸tilor. Exemplul 8.3. Modalit˘ a¸ti de utilizare a fonturilor, ˆın moduri de lucru diferite: $Ax={\rm f}$, unde $
{\it x} \in {\bf B}$ . . . Ax = f , unde x ∈ B
Dac˘ a utiliz˘ am \hbox{...} ˆın modul matematic de lucru, procesarea acestei secven¸te conduce la trecerea ˆın modul orizontal de lucru ˆın interiorul acoladelor ¸si, ˆın consecin¸t˘ a, revenirea la fontul de dinaintea simbolului $. Exemplul 8.4. Folosirea secven¸tei \hbox ˆın modul matematic de lucru: XXX
{\bf YYY $xx+\hbox{yy}$} . . . . . . . . . . . XXX YYY xx + yy
Iat˘ a acum alte cˆ ateva secven¸te de control pentru fonturi. Ca de obicei, acestea afecteaz˘ a toate literele pˆ an˘ a la sfˆ ar¸situl grupului
˘ SCRIEREA MATEMATICA
113
ˆın care sunt utilizate. Astfel este indicat s˘ a se limiteze ac¸tiunea acestor secven¸te folosind grupul. • \mit - aceast˘ a secven¸t˘ a poate fi utilizat˘ a pentru ob¸tinerea literelor grece¸sti mari: ${\mit\Gamma}, \Gamma$ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Γ , Γ Pentru numere, are acela¸si efect cu secven¸ta \oldstyle • \cal - aceast˘ a secven¸t˘ a este utilizat˘ a pentru a ob¸tine litere caligrafice: ${\cal AXZ}$ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . AX Z Numai literele mari sunt disponibile ˆın cazul acestei secven¸te. 8.3 Indici ¸si exponen¸ti Pentru a ata¸sa un exponent sau un indice unui caracter, se folosesc simbolurile speciale ˆ ¸si , respectiv. Numai caracterul ce urmeaz˘ a dup˘ a simbolul este scris drept indice (sau caracterul ce urmeaz˘ a dupa simbolul ˆ, ˆın cazul exponentului). Pentru a manipula mai multe caractere ˆın calitate de indici ¸si/sau exponen¸ti, trebuie folosit grupul. Exemplul 8.5. Compara¸ti urm˘ atoarele rezultate: (k)
$x k$, $a {i,j}ˆ{(k)}$ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xk , ai,j , 2 22
$xˆ{2ˆ{2ˆ{2ˆ2}}}$, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x2
Compara¸ti ${x k} i$ cu $x {k i}$ (adic˘ a: xk i cu xki ). Aten¸tie, nu conteaz˘ a ˆın ce ordine se scriu indicele ¸si exponentul. Grupul vid. Este posibil˘ a construirea unui grup vid (adic˘ a a grupului {}), care s˘ a posede indici ¸si exponen¸ti. Iat˘ a dou˘ a exemple de astfel de construc¸tii: • ˆı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¸tine cu caracterul special ’. Analiza¸ti urm˘ atoarele dou˘ a exemple simple de utilizare: $x’=x+f, x”=x’ˆ2$ . . . . . . . . . . . . . . . . . . . . . . . x0 = x + f, x00 = x02 8.4 Accente ˆın modul matematic de lucru Cˆ ateva dintre accentele prezentate ˆın § 1.3 (Accente) pot fi ob¸tinute ˆın modul matematic de lucru. Acestea sunt: ˆ a a ¯ a˙ ~a
\hat \bar \dot \vec
a a a a
a ˇ \check a a ´ \acute a a ` \grave a
˜a \tilde a a \ddot a ¨ a \breve a ˘
Aceste accente sunt valabile doar pentru o liter˘ a. Pentru a afecta mai multe litere, avem la dispozi¸tie secven¸tele: \widehat{.....},
\widetilde{.....}
$\ddot y+f(t)=aˆ7$ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . y¨ + f (t) = a7 $\widehat {yxc}$ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . yd xc 8.5 Spa¸tierea ˆın modul matematic de lucru Prezent˘ am secven¸tele de control cele mai utilizate pentru a genera spa¸tii ˆın interiorul unei formule: •
\quad,\qquad, ¸si \ (acestea lucreaz˘ a exact ca ˆın modul orizontal de lucru); • \, este echivalent˘ a cu comanda \thinspace ¸si produce un spa¸tiu mic de l˘ a¸time ' 1.5pt (ˆın m˘ arimea corespunz˘ atoare la 10pt);
˘ SCRIEREA MATEMATICA
•
115
\!, este echivalent˘ a cu comanda \thinspace ¸si produce un spa¸tiu negativ mic de ' 1.5pt.
Mai pot fi utilizate ˆın acela¸si scop ¸si comenzile: \hskip, \kern, \mskip ¸si \mkern. Putem observa, din exemplele de mai sus, c˘ a toate caracterele sunt scrise automat mai mici, atunci cˆ and sunt utilizate drept indici sau exponen¸ti. De asemenea, anumi¸ti operatori sunt scri¸si mai mici ˆın modul “display matematic” decˆ at ˆın modul “text matematic”. M˘ arimea tuturor caracterelor este dat˘ a de stilul curent. Procesorul recunoa¸ste patru astfel de stiluri: – cˆ and procesorul se afl˘ a ˆın modul “display matematic” (adic˘ a ˆıntre o pereche de $$), acesta construie¸ste materialul respectiv ˆın stilul “display”. In acest stil, toate caracterele au m˘ arimea lor maxim˘ a, care (exceptˆ and operatorii largi) este, ˆın esen¸t˘ a, m˘ arimea textului ˆınvecinat. a ˆın stilul – cˆ and ˆıntˆ alne¸ste simbolul sau ˆ, procesorul comut˘ “script” (pentru a genera caracterele de dup˘ a ¸si ˆ); aceste caractere sunt scrise cu fonturi de dimensiune mai mic˘ a. – dac˘ a procesorul ˆınc˘ a se afl˘ a ˆın stilul “script” ¸si are de generat un indice sau un exponent, atunci ne afl˘ am ˆın stilul “scriptscript”, care va produce caractere ¸si 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¸ste stilul ”scriptscriptscript”. Amintim c˘ a, atunci cˆ and procesorul prelucreaz˘ a materialul din interiorul unei perechi simple de dolari ($...$), acesta se afl˘ a ˆın ˆ stilul “text”. In acest stil, caracterele sunt produse cu aceea¸si
116
Capitolul 8
m˘ arime cu a textului ˆınvecinat, ˆıns˘ a operatorii largi nu mai sunt genera¸ti cu aceea¸si m˘ arime ca ˆın stilul “display”. Exemplul 8.7. a) Compara¸ti rezultatul din exemplul 8.6 b) cu urm˘ atorul: R 2 $\int eˆ{−xˆ2}\,dx$ . . . . . . . . . . . . . . . . . . . . . . . . . . . e−x dx b) $x+{y\over 1+xˆn}$ . . . . . . . . . . . . . . . . . . . . . . . . . . . . x + $$x+{y\over 1+xˆn }$$ . . . . . . . . . . . . . . . . . . . . . . . x +
y 1+xn
y 1 + xn
S˘ a facem o scurt˘ a analiz˘ a a modurilor de lucru folosite de procesor ˆın realizarea expresiilor de la punctul b) de mai sus: • pentru prima expresie, dup˘ a primul simbol $, procesorul comut˘ a ˆın modul “text matematic”, iar apoi ˆın modul “script matematic” (pentru a scrie num˘ ar˘ atorul ¸si numitorul frac¸tiei). Pe parcursul scrierii numitorului, comut˘ a ˆın modul ”scriptscript” pentru a scrie exponentul n; • pentru a doua expresie, dup˘ a simbolii $$, procesorul comut˘ a ˆın modul “display matematic”, iar apoi ˆın modul “text matematic” (pentru a scrie componentele frac¸tiei). Pe parcursul scrierii numitorului, comut˘ a ˆın modul “script” pentru a scrie exponentul n. Putem schimba stilul de lucru ˆıntr-o formul˘ a, ˆın orice moment folosind una din secven¸tele de control: \displaystyle, \textstyle \scriptstyle, \ scriptscriptstyle Schimbarea stilului are efect pˆ an˘ a la sfˆ ar¸situl grupului curent, influen¸tˆ and ¸si stilul de scriere al: frac¸tiilor, indicilor, exponen¸tilor ¸s.a.m.d.
˘ SCRIEREA MATEMATICA
117
Exemplul 8.8. Diferite moduri de scriere a unor expresii matematice obi¸snuite. Procesa¸ti secven¸tele din acolad˘ a ¸si cele din fa¸ta acoladei ¸si compara¸ti rezultatele. $eˆ{\scriptstyle x\over\scriptstyle n}$ sau $eˆ{x\over n}$ $eˆ{\textstyle{x \over n}}$ $\displaystyle{ab \over x+y}$ sau $ ab\over x+y $ $\displaystyle ab\over x+y$ Lista abrevierilor numelor func¸tiilor recunoscute de plain TEX: \arccos \limsup \deg \sup \lim \coth \sin
\cos \min \gcd \arctan \log \dim \tanh
\csc \sinh \lg \cot \sec \inf
\exp \arcsin \ln \det \tan \liminf
\ker \cosh \pr \hom \arg \max
8.6 Frac¸tii Frac¸tiile sunt realizate cu ajutorul secven¸tei de control \over (vezi Exemplul 8.8). Ac¸tiunea comenzii \over se extinde peste cel mai mic grup care o con¸tine. Exemplul 8.9. Grupuri ¸si ac¸tiunea comenzii \over ˆın cadrul acestora. Analiza¸ti rezultatele proces˘ arii urm˘ atoarelor secven¸te: x+y $$x+y \over A-B$$ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A−B
118
Capitolul 8
$$x+{y\over A-B}$$ . . . . . . . . . . . . . . . . . . . . . . . . . . x +
y A−B
Vezi comentariul de la Exemplul 8.7 asupra modului ˆın care procesorul trateaz˘ a componentele unei frac¸tii. Exemplul 3.8 din §3.4 ilustreaz˘ a diferitele aranj˘ ari ale num˘ ar˘ atorului unei frac¸tii utilizˆ and secven¸ta \hfil. Exemplul 8.10. Frac¸tii 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 +
a2 +
1 a3
ˆIn exemplul de mai sus am folosit macroul \mathstrut, recunoscut de plain TEX ¸si avˆ and sarcina de a uniformiza ˆın˘ al¸timea ¸si adˆ ancimea expresiilor matematice. Ace¸sti parametri sunt identici cu ce ai simbolului “(” (parantez˘ a rotund˘ a), scris cu ajutorul fontului matematic uzual. 8.7 Stivuirea mai multor obiecte Comanda \atop este folosit˘ a de procesorul plain TEX pentru a stivui mai multe expresii. Aceasta lucreaz˘ a ˆın acela¸si mod precum secven¸ta \over, cu deosebirea c˘ a nu mai traseaz˘ a o bar˘ a orizontal˘ a. Exemplul 8.11. Procesarea secven¸tei $$\sum {\textstyle{ i,j\in k\atop i \ne j}} a i b j$$,
˘ SCRIEREA MATEMATICA
revine la:
119
X
ai bj
i,j∈k i6=j
Alte stivuiri pot fi ob¸tinute folosind macrourile: \choose, \brack ¸si \brace. Exemplul 8.12. Procesarea secven¸tei din partea stˆ ang˘ a conduce la ob¸tinerea vectorului afi¸sat ˆın marginea din dreapta paginii. $2n \choose nˆ2$ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2n 2 n 8.8 Comanda \mathop Comand˘ a \mathop este similar˘ a cu comanda \sum. Iat˘ a un prim exemplu de utilizare. Exemplul 8.13. Procesarea secven¸tei din partea stˆ ang˘ a conduce la ob¸tinerea stivuirii din marginea dreapt˘ a a paginii: $$\mathop{ess \, sup} {x\in I} F(x)$$. . . . . . . . . . . . .ess sup F (x) x∈I
Cu ajutorul acestei comenzi pot fi m˘ ari¸ti operatorii defini¸ti de utilizator. De exemplu, dup˘ a ce s-au f˘ acut noile defini¸tii: \font\cmrxvii=cmr17 \def\suma{\ mathop{\hbox{\cmrxvii S}}} atunci secven¸ta urm˘ atoare de control: $$\dd\suma {i=0}ˆ{i=N}a i$$ va produce: i=N
S
i=0
ai
S˘ a remarc˘ am ˆın defini¸tia noii secven¸te de control \suma utilizarea noului font \cmrxvii ˆın interiorul unui comenzi \hbox (altfel, acesta nu ar avea efect).
120
Capitolul 8
ˆIn vederea economisirii spa¸tiului alocat de procesor operatorilor largi, se poate folosi secven¸ta de control \limits, care trebuie plasat˘ a imediat dup˘ a operator. Astfel, cantitatea destinat˘ a a fi scris˘ a drept indice inferior sau/¸si indice superior nu va mai fi locat˘ a obi¸snuit. Exemplul 8.14. Procesarea secven¸tei: $$\int\limits 0ˆ {f(x)} G(s) ds$$ va produce: fZ(x)
G(s)ds ¸si nu!
0
Z
f (x)
G(s)ds 0
8.9 Radicali Scrierea radicalilor se face cu ajutorul secven¸tei de control \sqrt{... material ...}. Exemplul 8.15. Procesarea secven¸tei: $\sqrt{x+\sqrt{2+4 \sqrt{x+\sqrt {y}}}}$ s r
va produce:
x+
2+4
q √ x+ y
Pentru scrierea radicalilor al c˘ aror indice este diferit de 2, se folose¸ste secven¸ta \root n\of{ ... material ...}. De exemplu: p $\root 3\of {x+y+zˆ2}$ . . . . . . . . . . . . . . . . . . . . 3 x + y + z 2 Indicele radicalului este tip˘ arit ˆın stilul scriptscript. Exemplul de mai sus poate fi scris ¸si astfel: $\root\scriptstyle 3 \of{x+y+zˆ2}$ sau
˘ SCRIEREA MATEMATICA
121
$$\root\scriptstyle 3 \of{x+y+zˆ2}$$. Analiza¸ti rezultatele proces˘ arii celor trei scrieri. 8.10 Simboluri orizontale extinse Pentru a plasa o bar˘ a deasupra unei expresii se utilizeaz˘ a secven¸ta de control \overline{ ... material ...}. Cunoa¸stem deja comanda \bar (vezi §8.4) care plaseaz˘ a o bar˘ a deasupra primului caracter care urmeaz˘ a. Exemplul 8.16. ˆIn secven¸ta de mai jos s-au folosit secven¸tele \overline ¸si \bar: $x=\overline{z+z0 }-\bar a$ . . . . . . . . . . . . . . . . . . . x = z + z 0 − a ¯ Opusul secven¸tei \overline este secven¸ta \underline{ ... material ...}. De exemplu: $\underline{1+2+\cdots +n}$ . . . . produce . . . . 1 + 2 + · · · + n Simbolul s˘ ageat˘ a se ob¸tine cu ajutorul comenzii \overrightarrow sau al comenzii \overleftarrow. Exist˘ a diferen¸t˘ a ˆıntre aceste dou˘ a comenzi ¸si comanda \vec. De exemplu: ←−−− ~ $\overleftarrow{A-C}+\vec{XY}$ . . . . produce . . . . A−C+XY Acolada deasupra, respectiv sub un ¸sir de caractere, se ob¸tine cu ajutorul urm˘ atoarelor secven¸te de control: \overbrace ¸si \underbrace, respectiv. Exemplul 8.17. ˆIn secven¸tele 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}$$ produce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
p 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 1 3 u produce . . . . . . . . . . . . . . . . . . . . . x2 + x + 1 = u(x + )2 + > 0. | {z } t | {z2 } 4 >0 >0
8.11 Simboluri verticale extinse Toate tipurile de s˘ age¸ti verticale ¸si bare (barele pot fi de asemenea folosite ca delimitatori), toate tipurile de delimitatori precum ¸si cˆ ateva alte caractere (cum ar fi / (slash)) pot fi m˘ arite/m˘ ari¸ti (extin¸si). Exist˘ a dou˘ a posibilit˘a¸ti de a m˘ ari delimitatorii: folosind secven¸ta de control \big (cu ajutorul c˘ areia alegerea m˘ arimii delimitatorului este stabilit˘a de utilizator) ¸si folosind secven¸tele \left ¸si \right (caz ˆın care alegerea m˘ arimii delimitatorului este f˘ acut˘ a de c˘ atre procesorul TEX. Ad˘ augˆ and literele l ¸si r la secven¸ta \big, ob¸tinem perechea “deschis-ˆınchis”: \bigl, \bigr. ˆIn locul secven¸tei \big, putem utiliza de asemenea secven¸tele: \Big, \bigg ¸si \Bigg. De exemplu, ¸sirul urm˘ ator de secven¸te: \Biggl(\biggl( \Bigl(\bigl(() \bigr)\Bigr) \biggr)\Biggr) ! produce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . () Spre deosebire de perechea \left ¸si \right (care trebuie folosite ˆımpreun˘ a), nu este obligatoriu ca secven¸ta \bigl s˘ a fie ’ˆınchis˘ a’ cu perechea sa \bigr. Urm˘ atoarea construc¸tie:
˘ SCRIEREA MATEMATICA
\left(...
123 material
... \right)
este tratat˘ a de procesor ca un grup. Exemplul 8.18. Folosirea barelor verticale drept delimitatori. S¸ irul de secven¸te: $$\left(1+{ 1\over x}\right)ˆ2 \left\|{a\over xˆ2-aˆ2}\right\|$$
2
a 1
= produce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 +
x2 − a2 x S˘ a remarc˘ am din exemplul de mai sus c˘ a procesorul TEX m˘ are¸ste (extinde) delimitatorul dup˘ a necesit˘ a¸ti (a¸sa ˆıncˆ at s˘ a cuprind˘ a ˆıntreg materialul de delimitat). Observa¸tie. Deoarece secven¸ta \left ¸si perechea sa \right lucreaz˘ a ca un grup, scrierile: \left(... & ... \right) ¸si \left(... { ... \right) ... } sunt ilegale. Este corect˘ a ˆıns˘ a urm˘ atoarea combina¸tie: \left( ... \right] Mai mult, se poate ’ˆıncheia’ o pereche chiar cu secven¸ta \right. Exemplul 8.19. Rolul secven¸tei \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¸tinut 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˘ a o aliniere (vezi utilizarea simbolului &) care poate s˘ a con¸tin˘ a oricˆ ate linii, fiecare ˆıncheiat˘ a cu secven¸ta \cr. Exemplul 8.20. Efectul utiliz˘ arii delimitatorilor \left[ ... \right] ¸si \biggl[ ... \biggr]. Mul¸timea de secven¸te: $$\left[\sum {i=1}ˆn {1\over m+1}\right] \biggl[\sum {i=1}ˆn 1\over n+1}\biggr]$$ # " n X 1 produce . . . . . . . . . . . . . . . . . . . . . . . . . . . . m+1 i=1
X n i=1
1 n+1
Dac˘ a la secven¸ta \big se adaug˘ a litera m, atunci noua secven¸t˘ a de control \bigm (precum ¸si secven¸tele: \Bigm, \biggm, \Biggm) poate fi folosit˘ a la m˘ arirea (extinderea) s˘ age¸tilor verticale, a barelor ¸si a simbolului \ (’backslash’). Exemplul 8.21. Mul¸timea de secven¸te: $$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 2 1+x m 8.12 Stivuirea simbolurilor Acest lucru poate fi f˘ acut cu urm˘ atoarea construc¸tie: \buildrel ...
material
... \over{ ... }
Dac˘ a secven¸ta \over este urmat˘ a de un singur caracter sau secven¸t˘ a de control, atunci acoladele pot lipsi. De exemplu, ¸sirul de secven¸te: $$P(x)\buildrel\hbox {def}\over={x\over xˆ2+yˆ2}$$
˘ SCRIEREA MATEMATICA
125
produce def P (x) =
x x2 + y 2
Macroul \buildrel are urm˘ atoarea defini¸tie: \def\buildrel#1\over#2{ \mathrel{\mathop{\kern 0pt #2}\limitsˆ{#1}}} Acest macrou poate fi rescris astfel ˆıncˆ at noua defini¸tie s˘ a cuprind˘ a o subscrip¸tie ¸si o superscrip¸tie, anume: \def\bbuildrel#1 #2ˆ#3{ \mathrel{\mathop{\kern 0pt#1}\limits {#2}ˆ{#3}}} S¸ irul urm˘ ator de secven¸te: $$u n\bbuildrel\hbox to .5in {\rightarrowfill} {n\rightarrow \infty} ˆ{\hbox{\it weak}} 0$$ weak produce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . un −−−−−→ 0 n→∞
Comanda \mathrel transform˘a { ... } ˆıntr-o rela¸tie astfel ˆıncˆ at con¸tinutul ’...’ va fi spa¸tiat la dreapta. Pentru opera¸tiile matematice ˆın care apare limita, procesorul TEX dispune de secven¸tele de control: \lim, \limsup ¸si \liminf. Urm˘ atoarele secven¸te $\lim {x\rightarrow 0 }{f(x)\over x+f(x)}$ $$\lim {x\rightarrow 0 }{f(x)\over x+f(x)}$$ produc
limx→0
f (x) x+f (x)
f (x) x→0 x + f (x) lim
126
Capitolul 8
8.13 Generarea mai multor formule matematice Dup˘ a cum am v˘ azut ˆın §1.5, pentru a ob¸tine o formul˘ a matematic˘ a centrat˘ a ˆın linie, trebuie s˘ a folosim perechea $$ ... $$. Dac˘ a este nevoie de mai multe formule, una dup˘ a alta, centrate, atunci ar trebui s˘ a folosim de atˆ atea ori secven¸ta $$ ... $$. Putem realiza ˆıns˘ a acela¸si lucru cu ajutorul secven¸tei de control \displaylines. Exemplul 8.22. Secven¸ta urm˘ atoare 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¸ta \displaylines ¸si pentru generarea formulelor matematice care nu ˆıncap pe o singur˘ a linie. Iat˘ a un exemplu ˆın acest sens. Exemplul 8.23. Secven¸ta urm˘ atoare: $$\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 c1 + c2 + · · · + cm +
a 0
f (x) dx 1 + x2
Secven¸ta de control \smash din Exemplul 8.23 face ca procesorul plain TEX s˘ a ignore valorile implicite ale unei linii pentru ˆın˘ al¸time ¸si adˆ ancime ¸si s˘ a aloce spa¸tiu ˆın func¸tie de dimensiunile materialului dintre acolade.
˘ SCRIEREA MATEMATICA
127
Dup˘ a cum vom vedea pu¸tin mai tˆ arziu, distan¸ta dintre linii poate fi gestionat˘ a de utilizator. 8.14 Alinierea mai multor formule Aceasta se poate realiza cu ajutorul macroului \egalign. Un simbol ampersan (&) separ˘ a partea stˆ ang˘ a ¸si cea dreapt˘ a a fiec˘ arei linii iar secven¸ta \cr anun¸t˘ a sfˆ ar¸situl unei linii. Partea stˆ ang˘ aa uneia sau a mai multor linii din cadrul macroului \eqalign poate fi vid˘ a. Dac˘ a toate liniile au con¸tinutul vid ˆınainte de simbolul &, atunci toate formulele vor fi aliniate la stˆ anga. Alinierea tuturor formulelor la dreapta se poate realiza ˆıntr-un mod similar. Exemplul 8.24. Secven¸ta urm˘ atoare aliniaz˘ a cele trei linii dup˘ a 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˘ a 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¸tei de control \eqno, urmat˘ a de o etichet˘ a care va reprezenta num˘ arul acesteia. Dac˘ a se dore¸ste ca eticheta s˘ a apar˘ a ˆın stˆ anga formulei, atunci trebuie folosit˘ a secven¸ta de control \leqno. Este dat ˆın continuare cˆ ate un exemplu pentru fiecare situa¸tie.
128
Capitolul 8
x1 =
(2)
1+a a−b
x2 = α + β −
(1)
ex 1−x
Pentru a eticheta mai multe formule, putem combina secven¸tele de control \eqalign ¸si \eqno (sau \leqno). De exemplu, urm˘ atoarea construc¸tie: s1 + s2 = 0 (∗) xs1 − ys2 = −2 este generat˘ a de secven¸ta: $$\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, putem folosi secven¸tele \eqalignno sau \leqalignno (pentru scrierea etichetelor ˆın stˆ anga formulei). Exemplul 8.25. Secven¸ta urm˘ atoare nu aliniaz˘ a liniile la stˆ anga ¸si eticheteaz˘ a 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˘ a
s1 + a1 − b1 = 0 s1 + s2 + a2 − b2 = 0
(1) (2)
˘ SCRIEREA MATEMATICA
129
s1 + s2 + s3 + a3 − b3 = 0 ................................................
(3)
s1 + s2 + · · · + sn + an − bn = 0
(n)
ˆInlocuind ˆın exemplul de mai sus secven¸ta \eqalign cu secven¸ta \leqalign, toate etichetele vor fi scrise ˆın partea stˆ ang˘ aa fiec˘ arei ecua¸tii. 8.16 Matrici Macroul \matrix este acela care face posibil˘ a construirea unei matrici. Simbolul & este utilizat pentru a separa intr˘ arile din fiecare linie iar sfˆ ar¸situl unei linii este specificat procesorului de secven¸ta \cr. Dac˘ a num˘ arul de simboluri & nu este acela¸si pentru fiecare linie, atunci num˘ arul de coloane al matricii respective va fi dat de linia cu cel mai mare num˘ ar de simboluri &; acolo unde este nevoie, matricea va fi completat˘ a cu elemente vide. Matricile sunt un caz particular de alinieri (vezi Capitolul 7). Tabloul urm˘ ator reprezint˘ a o matrice cu trei linii ¸si trei coloane. x1 x01 x001
x2 x02 x002
x3 x03 x003
Deoarece centrarea intr˘ arilor (elementelor) este realizat˘ a prin ad˘ augarea unui spa¸tiu mic de c˘ atre procesor, poate fi utilizat˘ a secven¸ta \hfill pentru alinierea la stˆ anga sau la dreapta a coloanelor. Exemplul 8.26. Matricea urm˘ atoare:
(∗)
x1 x01 x001
x2 x02 x002
x3 x03 x003
130
Capitolul 8
a fost ob¸tinut˘ a cu secven¸ta: $$\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 (*)$$ ˆIn timp ce secven¸ta \matrix creeaz˘ a o matrice f˘ ar˘ a delimitatori la stˆ anga ¸si la dreapta, macroul \pmatrix scrie ˆıntreg materialul ˆıntre paranteze rotunde (implicit). Exemplul 8.27. Dac˘ a ˆın ”fi¸sierul surs˘ a” introducem urm˘ atoarea secven¸t˘ a de instruc¸tiuni: $$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¸tine matricea:
A=
a b c d 0
0
1 0 0
2 3 1 0 0 µ
Opera¸tia de centrare a submatricilor se face automat. Tot automat se centreaz˘ a ¸si grupul de caractere “A=”, ˆın raport cu m˘ arimea vertical˘ a a matricii. Determinantul unei matrici se ob¸tine prin delimitarea matricei cu bare verticale; deci cu ajutorul grupului de secven¸te de control \left| ... \right|. Exemplul 8.28. Construc¸tia urm˘ atoare:
˘ SCRIEREA MATEMATICA
131
a11 − λ a12 det(A − λI) = a21 a22 − λ a31 a32
a13 a23 a33 − λ
se ob¸tine cu ajutorul procesorului TEX dac˘ a ˆın “fi¸sierul surs˘ a” se scrie secven¸ta 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¸tii constituie o alt˘ a posibil˘ a utilizare a macroului \matrix. De exemplu, ¸sirul de secven¸te 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˘ arii urm˘ atorul sistem de trei ecua¸tii cu trei necunoscute, numerotat la stˆ anga cu (S)
(S)
x −102x −x
+ − +
3.002y y 2y
− + −
45z z 3z
= = =
d1 d2 d3
132
Capitolul 8
8.17 Ajustarea spa¸tiului dintre linii Uneori este nevoie de a m˘ ari sau mic¸sora spa¸tiul dintre liniile unui “display” (o matrice, un sistem etc.) fa¸t˘ a de cel generat implicit de c˘ atre procesor. Procesorul TEX dispune ˆın acest sens de macrourile: \openup (pentru ’display’-urile generate de macrourile: \displaylines, \eqalign, \eqalignno ¸si \leqalignno), \normalbaselineskip, \normallineskip, \normallineskiplimit (pentru ’display’-urile generate de \matrix, \pmatrix, \cases ¸si alte macrouri). Cˆ at prive¸ste macroul \openup, amintim c˘ a aceast˘ a secven¸t˘ a nu trebuie utilizat˘ a ˆınaintea macroului care realizeaz˘ a alinierea, adic˘ a secven¸ta urm˘ atoare este eronat˘ a \openup 4pt \displaylines { ...
material
... }
Poate fi utilizat˘ a ¸si o valoare negativ˘ a (de exemplu -4pt) pentru a apropia (restrˆ ange) liniile cˆ at mai mult posibil. S˘ a urm˘ arim efectul la nivel de grup al acestor variabile ce ¸tin de m˘ arimea spa¸tiului dintre linii. De exemplu, pentru a scrie ˆıntr-o matrice liniile separate de un spa¸tiu egal cu 15pt, atunci secven¸ta de control trebuie s˘ a cuprind˘ a (printre altele) {\normalbaselineskip=15pt \matrix { ...
material
... }}
8.18 Separarea a dou˘ a linii ˆIn vederea gener˘ arii unui spa¸tiu ˆıntre dou˘ a linii oarecare, a c˘ arui dimensiune s˘ a difere de cea normal˘ a (cea generat˘ a implicit de procesor), trebuie introdus˘ a (inserat˘a) ˆıntre liniile cu pricina secven¸ta de control \noalign{ ... }, secven¸t˘ a ce nu trebuie urmat˘ a de \cr; de exemplu, construc¸tia urm˘ atoare $$\eqalign{ ... & ... \cr \noalign{\medskip} ... & ... \cr} $$
˘ SCRIEREA MATEMATICA
133
face ca dou˘ a linii (cele vecine secven¸tei de control \noalign{ ... }) s˘ a fie distan¸tate cu 6pt≡\medskip. Pot fi utilizate ¸si valori negative. 8.19 Scrierea unei matrici generale Pentru aceast˘ a scriere este ¸stiut c˘ a trebuie folosit grupul de trei puncte “...”. Dac˘ a sunt folosite direct, atunci procesorul va genera aceste puncte foarte apropiate. Se cunosc, de c˘ atre procesorul TEX, mai multe secven¸te 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 ¸si \ddots – scrie cele trei puncte pe vertical˘ a ¸si pe diagonal˘ a, 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¸te 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˘ atoarei matrici generale
a11 a21 A= ...
an1
a1n a2n .. .
a12 a22 .. .
··· ··· .. .
an2
· · · ann
. Aranjarea celor trei puncte sub forma: . . (ascendent, deci) se poate ob¸tine de utilizator cu ajutorul noii secven¸te
134
Capitolul 8
\defadots{\mathinner{\mkern 2mu\raise 1pt \hbox{.} \mkern 2mu\raise 4pt \hbox{.}\mkern 2mu \raise 7pt\hbox {.}\mkern 1mu}} S¸ irul de secven¸te $\adots\ddots\dots\adots\ddots$
produce
..
. ..
. . . . ..
. ..
.
8.20 Diagrame O diagram˘ a poate fi ob¸tinut˘ a prin utilizarea macroului \diagram, macrou care reprezint˘ a ˆın fond o variant˘ a a macroului \matrix. Pentru a simplifica scrierea unei diagrame, procesorul TEX dispune de macrourile \harr ¸si \varr. Macroul \harr produce o s˘ ageat˘ a orizontal˘ a, orientat˘ a spre dreapta, cu lungimea de 1in. Acesta mai dispune de dou˘ a argumente: primul este plasat deasupra s˘ age¸tii iar cel˘ alalt sub s˘ ageat˘ a. Prezen¸ta perechilor de acolade este obligatorie, chiar dac˘ a con¸tinutul materialului de prelucrat este vid. Macroul \varr traseaz˘ a o s˘ ageat˘ a vertical˘ a, orientat˘ a ˆın jos, ¸si are aceea¸si sintax˘ a cu macroul \harr. Diagrama x⊗yX
H ⊗R u v ˜ y
−−−−−→
P y
(A0 + B)y
−−−−−→
y
este generat˘ a de urm˘ atorul grup de secven¸te $$\diagram{H\otimes R & \harr{x\otimes y X} {} & {\cal P}\cr \varr{u}{\tilde v} && \varr{}{}\cr
˘ SCRIEREA MATEMATICA
135
(A’+B)y & \harr{}{} & y \cr}$$ unde macrourile: \diagram, \harr ¸si \varr au urm˘ atoarele defini¸tii: \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 ¸si LaTEX) este dezvoltat de c˘ atre Leslie Lamport pe baza procesorului TEX, definind a¸sa numitele layouturi (LAyout for TEX) standard pentru: c˘ ar¸ti, articole, rapoarte, scrisori. LaTeX-ul permite ca utilizatorul s˘ a se concentreze asupra organiz˘ arii logice a unei lucr˘ ari l˘ asˆ and ˆın seama acestuia opera¸tia de formatare a textului (aranjarea ˆın pagin˘ a). Folosind LaTEX-ul este foarte greu s˘ a modific˘ am aspectul general al documentului, ˆın raport cu formatul standard. Pa¸sii necesari a fi parcur¸si pentru a ob¸tine un document pe hˆ artie utilizˆ and versiunea LaTEX sunt: a. Editarea fi¸sierului surs˘ a ¸si salvarea acestuia pe disc cu una din extensiile: tex sau ltx; b. Procesarea fi¸sierului surs˘ a - se face cu urm˘ atoarea comand˘ a: latex nume-fi¸sier.tex Efectul primei proces˘ ari const˘ a ˆın scrierea (generarea) pe disc a mai multor fi¸siere: • nume-fis.aux - este un fi¸sier cu informa¸tii auxiliare despre entit˘ a¸tile logice din fi¸sierul surs˘a ¸si etichetele: \label, \bibitem. Este folosit de LaTEX la a doua procesare pentru rezolvarea referin¸telor ˆıncruci¸sate: \cite, \ref, etc.);
138
Capitolul 9
• nume-fis.toc - con¸tine toate informa¸tiile necesare alc˘ atuirii cuprinsului lucr˘ arii. Este generat numai dac˘ a ˆın fi¸sierul surs˘ a apare comanda \tableofcontents. Cuprinsul va ap˘ area efectiv abia la a doua procesare. • nume-fis.log - con¸tine eventualele erori ˆıntˆ alnite ˆın procesarea textului precum ¸si informa¸tii statistice despre folosirea resurselor calculatorului. • nume-fis.dvi - este fi¸sierul ce con¸tine rezultatul proces˘ arii ˆıntr-un cod independent de perifericul pe care va fi tip˘ arit (DeVice Independent). Pentru documente mai complexe este posibil generarea ˆın plus ¸si a altor fi¸siere, precum: • *.log - este asem˘ an˘ ator cu .toc ¸si apare dac˘ a este prezent˘ a comanda \listoffigures. Cˆ and se cere lista figurilor, este obligatoriu procesarea de dou˘ a ori a fi¸sierului surs˘a; • *.lot - con¸tine informa¸tii necesare gener˘ arii listei de tabele ¸si apare ˆın prezen¸ta comenzii \listoftables. Ca ¸si mai ˆınainte, este nevoie reprocesarea fi¸sierului surs˘ a pentru a ob¸tine ˆın .dvi lista de tabele; • *.idx - este produs ˆın prezen¸ta comenzii \makeindex ˆın combina¸tie cu comenzile: \index, \indexentry. Pa¸sii necesari ob¸tinerii efective a indexului ˆın documentul final vor fi prezenta¸ti mai tˆ arziu (realizarea indexului). • *.glo - este produs de comanda \makeglossary. Am˘ anunte ˆın realizarea glosarelor. c. Vizualizarea documentului - se face cu aceea¸si comand˘ a ca ¸si ˆın cazul procesorului TEX. Aceast˘ a comand˘ a folose¸ste utilitarul dviscr care este capabil s˘ a transpun˘ a informa¸tia din fi¸sierul *.dvi pe ecran. d. Tip˘ arirea documentului - folosind acelea¸si valori precum ˆın cazul procesorului TEX.
CE ESTE
LATEX ?
139
Observa¸tie. Re¸tinem pˆ an˘ a acum c˘ a dac˘ a apar referin¸te ˆıncruci¸sate sau se dore¸ste scrierea automat˘ a a: cuprisului, listei de figuri sau tabele, a unui index ¸si a unui glosar, atunci fi¸sierul surs˘ a trebuie procesat de dou˘ a ori ˆıntrucˆ at pentru aceste opera¸tii procesorul LaTEX are nevoie de fi¸siere care la prima procesare nu existau ˆınc˘ a ¸si deci nu pot fi rezolvate referin¸tele. 9.1 Organizarea logic˘ a a documentului 9.1.1 Structura general˘ a a fi¸sierului surs˘ a Un fi¸sier surs˘ a ce urmeaz˘ a a fi supus proces˘ arii cu LaTEX trebuie s˘ a ˆınceap˘ a cu comanda \documentstyle a c˘ arei sintax˘ a este: \documentstyle[opt1,opt2,...]{doc style} unde: opt1, opt2, ... reprezint˘ a lista de op¸tiuni, doc style este stilul (tipul) documentului. Obligatoriu de utilizat este doar parametrul doc style, lista de op¸tiuni putˆ and a¸sadar lipsi. Valorile parametrului doc style sunt: book - in situa¸tia aceasta procesorul va organiza documentul sub forma unei c˘ ar¸ti. ˆIn acest contex, apar o serie de caracteristici, cum ar fi: - procesarea textului se face diferen¸tiat pentru pagini pare ¸si impare; - ˆıntreg materialul de prelucrat este organizat pe buc˘ a¸ti: capitole, sec¸tiuni, subsec¸tiuni, subsubsec¸tiuni; - antetul fiecarei pagini pare con¸tine titlul capitolului curent iar cel al fiec˘ arei pagini impare, titlul sec¸tiunii curente (aceasta numai dac˘ a prin comanda \pagestyle nu s-a specificat altfel). Fiecare capitol ˆıncepe la o pagin˘ a nou˘ a impar˘ a. report - va organiza documentul sub forma unui raport. Este asem˘ an˘ ator cu book dar procesarea textului nu se face
140
Capitolul 9
diferen¸tiat, func¸tie de paritatea paginii; capitolele pot ˆıncepe ¸si pe pagini pare. article - va organiza documentul sub forma unui articol. Implicit, antetele sunt l˘ asate goale iar procesarea textului se face nediferen¸tiat ˆın raport cu paritatea paginilor. letter - permite organizarea documentului sub forma unei scrisori oficiale. Op¸tiunile disponibile sunt: 11pt/12pt - seteaz˘ a m˘ arimea caracterelor normale la 11 sau 12 puncte tipografice. Implicit, aceasta m˘ arime este de 10 puncte. Celelalte dimensiuni vor fi raportate la dimensiunea normal˘ a a caracterelor (vom vedea mai tˆ arziu care este raportul); fleqn - determin˘ a alinierea la stˆ anga a formulei matematice. Implicit, acestea sunt centrate pe pagin˘ a; leqno - determina plasarea la stˆ anga a etichetelor folosite pentru numerotarea ecua¸tiilor. Implicit, acestea sunt a¸sezate ˆın dreapta ecua¸tiilor; makeidx - este util la documentele ˆın care se dore¸ste ob¸tinerea (semi)automat˘ a a unui index; showidx - permite a¸sezarea ca note marginale a cuvintelor cheie care sunt trecute ˆın index; twocolum - determin˘ a procesarea textului pe doua coloane; twoside - determin˘ a a¸sezarea diferen¸tiat˘ a ˆın pagin˘ a pentru paginile pare ¸si impare. Este implicit pentru stilul book; titlepage - se folose¸ste numai ˆımpreun˘ a cu stilul article ˆın vederea ob¸tinerii unei pagini de titlu. Implicit, titlul este a¸sezat la ˆınceputul primei pagini de text. Comanda \begin{document}. Este comanda de ˆınceput a documentului. ˆIntre comenzile \documentstyle ¸si \begin{document} nu se poate ˆınsera text. Pot s˘ a apar˘ a ˆıns˘ a alte comenzi TEX sau LATEX care nu au ca efect generarea de text. Aceast˘ a zon˘ a se mai nume¸ste preambul-ul fi¸sierului surs˘ a. De exemplu, ˆıntre cele dou˘ a comenzi de mai sus poate s˘ a apar˘ a comanda \title (care seteaz˘ a
CE ESTE
LATEX ?
141
titlul documentului) dar nu poate s˘ a apar˘ a comanda \maketitle (care fixeaz˘ a titlul ˆın pagin˘ a). Comanda \end{document}. Marcheaz˘ a sfˆ ar¸situl documentului. Toate caracterele ce urmeaz˘ a dup˘ a aceasta vor fi ignorate cˆ and are loc procesarea. A¸sadar, tot textul ce urmeaz˘ a a fi cules ˆın vederea supunerii proces˘ arii trebuie s˘ a fie plasat ˆıntre comenzile \begin{document} ¸si \end{document}. Comenzile care urmeaz˘ a nu au ˆın vedere stilul letter ( acesta va fi tratat separat mai tˆ arziu). La ˆınceputul unui document apare, ˆın mod firesc, titlul documentului urmat de numele autorului (eventual cu adresa acestuia) ¸si data elabor˘ arii acestui document, informa¸tii utilizate de procesorul LATEX pentru a atribui valori variabilelor corespunz˘ atoare: titlul documentului, autorul, data. Comanda \title{text}. Aceast˘ a comand˘ a seteaz˘ a titlul documentului. Dac˘ a titlul nu ˆıncape ˆıntr-un singur rˆ and, procesorul LATEX nu va rupe rˆ andul, aceasta trebuind f˘ acut˘ a de c˘ atre autor prin introducerea comenzii \\ acolo unde se dore¸ste trecerea la rˆ and nou. Observa¸tie. Aceast˘ a comand˘ a trebuie s˘ a apar˘ a ˆınainte de comanda \maketitle. Dac˘ a \title lipse¸ste, nu poate fi folosit˘ a nici \maketitle. Comanda \author{text}. Seteaz˘ a autorul documentului. Dac˘ a este nevoie de mai multe rˆ aduri, se poate uza din nou \\, de cˆ ate ori este nevoie. Dac˘ a sunt mai mul¸ti autori, ei vor fi separa¸ti pe rˆ anduri cu ajutorul comenzii \and. Aceast˘ a comand˘ a poate lipsi, caz ˆın care nu poate fi folosit˘ a comanda \maketitle. Dac˘ a este folosit˘ a, atunci ea trebuie s˘ a apar˘ a ˆınainte de \maketitle. Comanda \date{text}. Seteaz˘ a dat˘ a prin con¸tinutul dintre ˆ paranteze {...}. In lipsa acesteia, comanda \maketitle va folosi drept dat˘ a, data curent˘ a a calculatorului pe care se face procesarea.
142
Capitolul 9
Comanda \maketitle. Asigur˘ a punerea ˆın pagin˘ a titlului, autorului ¸si datei documentului. Aceasta trebuie s˘ a apar˘ a ˆın mod obligatoriu dup˘ a comanda \begin{document} ¸si dup˘ a \author ¸si op¸tional \date. Efectele comenzii sunt ˆın func¸tie de stilul documentului: • pentru book ¸si report, titlul, autorul ¸si data vor ocupa o pagin˘ a ˆıntreag˘ a (pagina 0); • pentru article, aceste informa¸tii vor apare la ˆinceputul primei pagini. Fontul cu care se genereaz˘ a titlul, autorul(rii) ¸si data este ales de LATEX, diferit pentru fiecare dintre acestea. Toate rˆ andurile titlului vor fi centrate pe pagin˘ a. Note de subsol. Cu ajutorul comenzii \thanks{text} se pot ˆınsera trimiteri la note de subsol, oriunde ˆın textul cuprins de \title, \author, \date ¸si unit˘ a¸tile sec¸tionale. Este posibil˘ a trimiterea la o not˘ a de subsol(simbol) deja folosit˘ a cu ajutorul comenzii \footnotemark[num˘ arul notei] unde num˘ arul notei este num˘ arul de ordine al comenzii \thanks la al c˘ arei text de ’not˘ a de subsol’ se face trimiterea. Observa¸tie. Pentru note de subsol obi¸snuite, LATEX-ul dispune de comanda \footnote. Comanda \thanks, spre deosebire de \footnote, folose¸ste alt set de simboli pentru notele de subsol. Exemplul 9.1. \documentstyle[11pt]{article} \title{Istoria cre¸sterii ¸si descre¸sterii \\ 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 ˆ Inceputul efectiv al textului
CE ESTE
LATEX ?
143
*nota de titlu +adresa-1 . . .
\end{document}
9.2 Capitole ¸si sec¸tiuni Aproape toate lucr˘ arile elaborate cu LaTEX: c˘ ar¸ti, articole, etc. sunt organizate pe subcomponente: capitole, sec¸tiuni, subsec¸tiuni, subsubsec¸tiuni. Unele documente au chiar ¸si un rezumat a gestioneze toate aceste en(abstract). Procesorul LaTEX ¸stie s˘ tit˘ a¸ti ¸si s˘ a fac˘ a aranjarea lor ˆın pagin˘ a, prin intermediul unor comenzi, numite ˆın continuare comenzi sec¸tionale. Acestea sunt: \part,\chapter,\section, \subsection, \subsubsection. Tot aici este cuprins˘ a ¸si comanda \appendix. Prin aceste instruc¸tiuni se realizeaz˘ a structura ierarhic˘ a a sec¸tiunilor textului. Nivelele ierarhiei trebuie obligatoriu respectate; de exemplu \section trebuie s˘ a se ˆımpart˘ a (dac˘ a e cazul) ˆın \subsection, etc. Fiecare din comenzile enumerate mai sus are trei forme. ˆIn forma simpl˘ a, comanda are un singur parametru, delimitat de acolade. Acesta (parametrul) va fi un text care reprezint˘ a titlul unit˘ a¸tii sec¸tionale. Numerotarea p˘ ar¸tilor se face automat. Totodat˘ a, dac˘ a se genereaz˘ a un cuprins automat, acest text, care alc˘ atuie¸ste parametrul, este folosit ¸si pentru cuprins. Mai mult, dac˘ a stilul paginii este heading (vezi comanda \pagestyle{stil} ˆın cele ce urmeaz˘ a), atunci acela¸si text este folosit pentru antetul paginilor (dac˘ a este cazul). Dac˘ a nu se dore¸ste numerotarea unei unit˘ a¸ti sec¸tionale atunci se va folosi forma cu ”*” a comenzii, adic˘ a: \part*, \chapter*, \section*, \subsection*, \subsubsection*. ˆIn aceast˘ a situa¸tie unitatea sec¸tinal˘ a respectiv˘ a nu va fi trecut˘ a ˆın cuprins ¸si nici nu se va folosi pentru antetele paginilor.
144
Capitolul 9
Cea de-a treia form˘ a este o ˆımbun˘ at˘ a¸tire a primei forme ob¸tinut˘ a prin ad˘ augarea unui parametru op¸tinal, plasat ˆınaintea celui principal; de exemplu pentru \part o s˘ a avem: \part[parametru-op¸ t ional]{parametru-principal} parametru-principal este folosit ˆın textul documentului ˆın timp ce cel op¸tional apare ˆın cuprins ¸si antet, dac˘ a este cazul. ˆIn cele ce urmeaz˘ a vom face o scurt˘ a prezentare a fiec˘ arei comenzi din cele enumerate mai sus. Comanda \part. Permite ˆımp˘ ar¸tirea unei c˘ ar¸ti sau a unui raport pe buc˘ a¸ti (module), aceasta fiind definit˘ a numai pentru stilurile book ¸si 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˘ a. La book are ca efect trecerea la o pagin˘ a nou˘ a, cu num˘ ar impar, pe care se imprim˘ a cuvˆ antul Part urmat de num˘ arul p˘ ar¸tii ¸si titlul ei, centrate vertical pe pagin˘ a dup˘ a care face saltul la urm˘ atoare pagin˘ a nou˘ a cu num˘ ar impar. La report are drept efect trecerea la o pagin˘ a nou˘ a, necontˆ and dac˘ a este una par˘ a sau impar˘ a, urmat de imprimarea num˘ arului p˘ ar¸tii ¸si a titlului ei, centrate vertical ¸si ˆın final saltul la pagin˘ a nou˘ a. Comanda \chapter. Si acest˘ a comand˘ a este definit˘ a numai pentru stilurile book ¸si 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˘ a de comanda \part. Efectul comenzii \chapter este trecerea la pagin˘ a nou˘ a (ˆın cazul stilului book, noua pagin˘ a va fi una impar˘ a) ¸si imprimarea la ˆınceputul paginii a cuvˆ antului chapter urmat de num˘ arul ¸si titlul capitolului. Comenzile \section,\subsection, \subsubsection. Aceste trei comenzi au drept efect trecerea la o sec¸tiune, sub- sau subsubsec¸tiune nou˘ a. Prezent˘ am cele trei forme doar pentru comanda \section: • \section{titlul sec¸ tiunii} • \section∗ {titlul sec¸ tiunii} • \section[titlu-mic]{titlul sec¸ tiunii} Remarc˘ am c˘ a numerotarea acestor unit˘ a¸ti sec¸tionale este afectat˘ a de comenzile \chapter, \section, \subsection ¸si \subsubsection utilizate anterior ˆın cadrul documentului. Aceste trei comenzi pot fi folosite ˆın stilul book, report ¸si article. Numerotarea difer˘ a ˆıns˘ a; pentru stilurile book ¸si report, sec¸tiunile sunt numerotate cu dou˘ a numere separate prin . (primul num˘ ar reprezint˘ a capitolul iar al doilea sec¸tiunea din cadrul capitolului). Cˆ at prive¸ste stilul article, numerotarea se face cu un singur num˘ ar. Pentru toate stilurile acum, notarea subsec¸tiunilor ¸si subsubsec¸tiunilor se face prin ad˘ augarea a cˆ ate un (respectiv dou˘ a) num˘ ar (numere). Exemplu: S¸ irul de numere: 3.1.2.4 reprezint˘a subsubsec¸tiunea 4 a subsec¸tiunii 2 din cadrul sec¸tiunii 1 a capitolului 3.
Comanda \appendix. Rolul acesteia este de a modifica modul de numerotare a capitolelor ¸si sec¸tiunilor. Astfel, ˆın stilul article, sec¸tiunile ce vor fi declarate dup˘ a comanda \appendix vor fi numerotate cu ”A”, ”B” etc. ˆIn stilul book, dup˘ a o comand˘ a \appendix, capitolele vor fi notate cu ”Appendix A”, ”Appendix B”, etc. Comanda \abstract. Dup˘ a cum am precizat la ˆınceputul acestei sec¸tiuni, unele documente pot con¸tine chiar ¸si un rezumat.
146
Capitolul 9
Acesta se realizeaz˘ a cu comanda \abstract ¸si comanda \endabstract. Exemplu: \abstract ..................... (textul rezumatului) ..................... \endabstract Aceast˘ a pereche de comenzi poate fi ˆınlocuit˘ a cu cadrul abstract Printr-un cadru ˆıntelegem o entitate (o ecua¸tie, un tabel, o figur˘ a etc.) care-i folosit pentru a a¸seza ˆın pagin˘ a un anumit material (text, de exemplu), dup˘ a un format specific cadrului (entit˘ a¸tii) respective. Un cadru este delimitat de \begin ¸si \end. Deci cadrul abstract este cel care permite a¸sezarea ˆın pagin˘ a a rezumatului unei lucr˘ ari (articol). Comanda este valabil˘ a numai pentru stilurile report ¸si article (pentru primul stil avˆ and drept efect a¸ezarea rezumatului pe o pagin˘ a separat˘ a), dar nu este definit pentru stilurile book ¸si letter. Se recomand˘ a introducerea acestor comenzi ˆın textul surs˘ a imediat dup˘ a comanda \maketitle. 9.3. Etichete ¸si referin¸te ˆIntrucˆ at numerotarea p˘ ar¸tilor unui document se face automat de c˘ atre procesorul LaTEX, autorul, ˆın perioada culegerii textului, nu poate cunoa¸ste numerotarea atribuit˘ a capitolelor, sec¸tiunilor, etc. de c˘ atre acesta. Devine ˆıns˘ a necesar˘ a referirea la unele entit˘ a¸ti ˆıns˘ a, ˆın timpul edit˘ arii fi¸sierului surs˘ a, nu putem ¸sti num˘ arul la care s˘ a ne referim. LaTEX-ul d˘ a posibilitatea de a referi anumite p˘ ar¸ti, f˘ ar˘ a a ¸sti numerotarea lor real˘ a, folosind comenzile \label ¸si \ref. Sintaxa acestora este: \label{etichet˘ a} \ref{etichet˘ a},
CE ESTE
LATEX ?
147
respectiv, unde etichet˘ a este un nume simbolic pentru acea entitate (parte) ¸si poate con¸tine ˆın structura sa nu numai litere ci ¸si alte caractere speciale (coduri ASCII, ˆın afar˘ a de spa¸tiu). Deosebit de util˘ a este ¸si comanda \pageref{eticheta} care permite referirea la num˘ arul paginii pe care apare o entitate eticheta. Observa¸tie. Dac˘ a, ˆın cadrul unui document, se fac referiri la etichete, atunci este nevoie de procesarea de dou˘ a ori, una dup˘ a alta, a fi¸sierului surs˘ a, ˆın vederea rezolv˘ arii de c˘ atre procesor a referin¸telor ˆıncruci¸sate, ˆıntrucˆ at, la prima procesare, aceste entit˘ a¸ti etichetate abia se scriu ˆın fi¸sierul *.aux iar la a doua procesare informa¸tiile sunt preluate de aici pentru a fi folosite de comenzile \ref ¸si \pageref. Exemplu de etichetare: \section{Introduce} ................................. ...............(text)............ .................................
\subsection{Etichetare} \label{s E} ................................. ...............(text)............
Comanda \label{eticheta} are drept efect scrierea ˆın fi¸sierul *.aux a unei linii cu urm˘ atorul con¸tinut: \newlabel{eticheta} {{simbol}{pagin˘ a}} unde simbol este num˘ arul atribuit de c˘ atre procesor entit˘ a¸tii etichetate iar pagin˘ a este num˘ arul paginii de imprimat (.dvi) ˆın care va apare secven¸ta ce con¸tine entitatea (sec¸tiunea) etichetat˘ a. ˆIn exemplul de mai sus, ˆın fi¸sierul *.aux, se va scrie: \newlabel{s E}{{nr1}{nr2}} unde nr1 ¸si nr2 depind de num˘ ar˘ atoarea automat˘ a f˘ acut˘ a de procesor ¸si de volumul textului procesat.
148
Capitolul 9
9.4. Variabile LaTEX 9.4.1 Lungimi LaTEX lucreaz˘ a cu lungimi atunci cˆ and trebuie s˘ a dimensioneze un obiect. De exemplu, primul parametru al comenzii \parbox trebuie s˘ a fie o lungime. Putem folosi aici o constuc¸tie de genul: <parte ˆıntreag˘ a>< parte zecimal˘ a >< unitate de m˘ asur˘ a> ˆıns˘ a putem utiliza ¸si o variabil˘ a de tip lungime. O astfel de variabil˘ a poate fi una din cele predefinite ˆın LTEX (vezi ¸si sec¸tiunile urm˘ atoare) sau una definit˘ a de utilizator. Putem folosi urm˘ atoarele comenzi pentru modificarea valorilor variabilelor de tip lungime: • \setlength{\cda}{ val} - seteaz˘ a comanda \cda la valoarea val; • \addolength{\cda}{ val} - adaug˘ a comenzii \cda valoare val; • \settowidth{\cda}{ text} - seteaz˘ a comanda \cda la valoarea l˘ a¸timii textului text; • \stretch{num˘ ar} - o lungime natural˘ a egal˘ a cu de num˘ ar de ori ˆıntinderea lui \fill; • \newlength{\cda} - define¸ste \cda ca fiind o nou˘ a variabil˘ a de tip lungime; Unit˘ a¸tile de m˘ asur˘ a valide ale lungimilor sunt: 1in (inch) 1in(inch) 1em 1ex 1cm 1mm 1pc(Picas) 1pt(Point)
= = = = = = =
25.4mm 72.27pt aproximativ l˘ a¸timea ˆın pt a literei m aproximativ l˘ a¸timea ˆın pt a literei x 10mm 2.845276pt 12pt 1 = inches 72.27
CE ESTE
LATEX ?
1bpt(Big point) \fill
149
1 inches 72 = spa¸tiul de lungime variabil˘ a (0→∞) =
Unele din cele mai importante varibile de tip lungime ale c˘ aror valori sunt dependente de stilul documentului sunt: • • • •
\parident - lungimea alineatului la ˆınceputul unui paragraf; \textwidth - l˘ a¸timea textului pe pagin˘ a; \textheight - lungimea textului pe pagin˘ a; \parskip - spa¸tiul vertical suplimentar dintre ultima linie a paragrafului ¸si prima linie a paragrafului urm˘ ator; • \baselineskip - spa¸tiul dintre sfˆ ar¸situl unui rˆ and ¸si sfˆ ar¸situl rˆ andului urm˘ ator;
Exemplu: Dac˘ a nu dorim aliniere la ˆınceput de paragraf, putem introduce ˆın fi¸sierul surs˘ a, la ˆınceputul documentului, comanda: \setlength{\parindent}{0cm} 9.4.2. Lungimi pentru controlul layout-ului A. Stilurile article ¸si report, f˘ ar˘ a op¸tiunea twoside. O pagin˘ a se va compune de sus ˆın jos, respectiv, de la stˆ anga la dreapta, din: Vertical˘ a: 1 inch,\topmargin,\headheight, \headsep, \textheight,\footskip, restul paginii. Orizontal˘ a: 1 inch,\oddsidemartgink\ evensidemargin, \textwidth,\marginhparsep, \marginparwidth, restul paginii. Singura diferen¸t˘ a dintre paginile pare ¸si impare o constituie lungimea numit˘ a \oddsidemargin respectiv \evensidemargin, dar care au aceea¸si valoare. Pentru toate paginile, notele marginale sunt puse ˆın marginea dreapt˘ a a paginii. B. Stilul book sau, orice stil cu op¸tiunea twoside. Dac˘ a se face aranjare diferen¸tiat˘ a a textului pe pagini pare ¸si impare (ceea ce
150
Capitolul 9
este implicit la stilul book sau op¸tiunea twoside), paginile pare au o componen¸t˘ a diferit˘ a de cele impare pentru care r˘ amˆ ane valabil˘ a schema anterioar˘ a. Notele marginale sunt puse ˆın partea stˆ ang˘ a. Putem utiliza comenzile: \addolength {\textheight }{2cm} \addolength {\topmargin}{-1cm} pentru a ajusta lungimea textului de pe pagin˘ a. Comanda \baselinestretch este singura dintre toate secven¸tele de control dintre cele doua figuri care nu reprezint˘ a o lungime. Modificarea ei se va face cu comanda \renewcommand. Implicit ea are valoarea 1. Pentru ca textul s˘ a fie cules la un rˆ and ¸si jum˘ atate, se folose¸ste comanda: \renewcommand{\baselinestretch}{1.3} respectiv, pentru culegere la dou˘ a rˆ anduri: \renewcommand{\baselinestretch}{1.6} 9.4.3. Designul unei pagini Fiecare stil de document are predefinit un design specific pentru pagini. Putem opta ˆıns˘ a pentru altul dac˘ a acesta nu ne convine. Fiecare pagin˘ a este compus˘ a din antet, corp ¸si subsol. Dimensiunile acestor trei elemente sunt determinate de stilul documentului iar con¸tinutul antetului ¸si 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˘ atoarele valori:
CE ESTE
LATEX ?
151
plain - este stilul implicit. Antetul va fi vid, iar ˆın subsol va ap˘ area doar num˘ a rul paginii; empty - antetul ¸si subsolul sunt vide; myheadings - antetul va con¸tine informa¸tii stabilite de utilizator ¸si num˘ arul paginii. Subsolul este vid; Dac˘ a se folose¸ste stilul myheadings, informa¸tiile pentru antete sunt stabilite cu ajutorul comenzilor: \markboth{antet stˆ anga }{antet dreapta} \markright{antet dreapta} unde antet stˆ anga nu se va folosi decˆ at dac˘ a s-a optat pentru twoside ˆın lista de op¸tiuni 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˘ atoarele 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˘ aririi pe dou˘ a coloane a ˆıntregului document specific˘ and twocolumn ˆın lista de op¸tiuni a comenzii \documentstyle, dar ne stau la dispozi¸tie ¸si comenzile: \twocolumn[text] care determin˘ a trecerea la pagin˘ a nou˘ a, tip˘ arirea lui text ( dac˘ a [text] este prezent ) pe toat˘ a l˘ a¸timea paginii ¸si culegerea textului ce urmeaz˘ a dup˘ a comand˘ a pe dou˘ a coloane, precum ¸si comanda: \onecolumn
152
Capitolul 9
care determin˘ a trecerea la pagin˘ a nou˘ a ¸si culegerea textului ce urmeaz˘ a pe toat˘ a l˘ a¸timea paginii. 9.4.4. Variabile ˆıntregi Pentru o serie de opera¸tii cum ar fi: numerotarea paginilor, ecuatiilor, sectiunilor etc., LaTEX folose¸ste contoare. Contoarele predefinite sunt urm˘ atoarele: • part - se folose¸ste la numerotarea p˘ ar¸tilor ˆın cazul stilului book ¸si report; • chapter - se folose¸ste la numerotarea capitolelor ˆın cazul stilului book ¸si report; • section, subsection, subsubsection - folosite la numerotarea sec¸t iunilor, subsec¸tiunilor ¸si subsubsec¸tiunilor; • paragraph, subparagraph - folosite la numerotarea paragrafelor ¸si a subgrafelor; • page - folosit la numerotarea paginilor; • equation - folosit la numerotarea ecua¸tiilor; • figure, table - folosite la numerotarea figurilor respectiv numerotarea tabelelor; • footnote, mpfootnote - folosite la numerotarea notelor de subsol ¸si a notelor de subsol dintr-un cadru minipage; • enumi, enumii, enumiii, enumiv folosite la numerotarea intr˘ arilor ˆıntr-un cadru enumerate pentru diferite niveluri de imbricare(maximum 4); Asupra contoarelor se poate ac¸tiona cu ajutorul urm˘ atoarelor comenzi: • \setcounter{contor}{val} seteaz˘ a contorulcontor la valoarea val; • \addtocounter{contor}{val} adaug˘ a la valoarea curent˘ a a contorului contor valoarea val; • \value {contor} reprezint˘ a valoarea contorului contor pentru a fi folosit˘ a ca parametru ˆın alte comenzi;
CE ESTE
LATEX ?
153
• \thecontor tip˘ are¸ste valoarea contorului contor (de exemplu comanda \thepage tip˘ are¸ste valoarea curent˘ a a num˘ arului de pagin˘ a; Valorile contoarelor pot fi ˆın cinci stiluri diferite. ˆIn continuare furniz˘ am comenzile folosite pentru aceasta: • \arabic{contor} tip˘ are¸ste cifra arab˘ a asociat˘ a contorului contor; • \roman{contor} tip˘ are¸ste cifra roman˘ a asociat˘ a valorii contorului contor; • \Roman{contor} ca mai sus dar cifra roman˘ a este scris˘ a cu majuscule; • \alph{contor} tip˘ are¸ste litera mic˘ a din alfabet a c˘ arei pozi¸tie corespunde cu valoarea contorului (maximum 26 corespunz˘ ator literei z); • \Alph{contor} tip˘ are¸ste majuscula din alfabet a c˘ arei pozi¸tie corespude cu valoarea contorului (maximum 26 corespunz˘ ator literei Z); H • \fnsymbol{contor} produce caracterele ∗, †, ‡, , k, ∗∗, ††, ‡‡. Poate fi folosit doar ˆın mod matematic iar valoarea contorului contor trebuie s˘ a fie ˆın intervalul 1 ÷ 9. Definirea de contoare noi se face cu comanda: \newcounter{contornou}[contorextern] care define¸ste un nou contor contornou. Forma op¸tionala are ca efect definirea contorului ˆın interiorul lui contorextern. Aceasta are ca efect aducerea la zero a lui contornou de fiecare dat˘ a cˆ and valoarea lui contorextern se modific˘ a. Comenzile: \stepcounter{contor} ¸si \refstepcounter{contor} au ca efect incrementarea cu 1 a valorii contorului contor ¸si pozi¸tionarea pe 0 a tuturor contoarelor definite ˆın interiorul aces-
154
Capitolul 9
tui contor (vezi comanda \ newcounter). ˆIn plus, comanda \refstepcounter declar˘ a valoarea curent˘ a atribuit˘ a cu label ca fiind textul generat de \thecontor. 9.4.5. Parametri de stil Uneori, atunci cˆ and se dore¸ste modificarea stilului ˆın care sunt scrise anumite obiecte, trebuie modifica¸ti anum¸ti parametri specifici stilului, a¸sa numi¸tii parametri de stil. Modificarea acestor parametri specifici s˘ a se fac˘ a cu grij˘ a ¸si ˆın general nu este o ac¸tiune ˆıncurajatoare deoarece valorile acestor parametri au fost stabilite respectˆ and anumite reguli tipografice (ˆın vigoare ˆın SUA). Parametri de stil pot fi lungimi, contoare sau secven¸te de control. Ecua¸tii matematice. Urm˘ atoarele lungimi controleaz˘ a formatul ecu¸tiilor matematice: • \mathindent - reprezint˘ a spa¸tiul de la marginea unui paragraf pˆ an˘ a la ˆınceputul unei formule (numai cˆ and s-a ales op¸tiunea fleqn; • \jot - reprezint˘ a spa¸tiul vertical ad˘ augat ˆıntre dou˘ a linii din cadrul eqnarray ¸si eqnarray∗ ; • \abovedisplayskip - reprezint˘ a spa¸tiul ad˘ augat deasupra unei formule mai lungi ˆın cazul ˆın care nu s-a optat pentru fleqn (caz ˆın care se folose¸ste ca spa¸tiu valoarea lui \topsep; • \belowdisplayskip - reprezint˘ a spa¸tiul ad˘ augat sub o formul˘ a mai lung˘ a cu excep¸tia stilului fleqn (caz ˆın care se folose¸ste ca spa¸tiu valoarea lui \topsep); • \abovedisplayshortskip - reprezint˘ a spa¸tiul ad˘ augat deasupra unei formule mai scurte dac˘ a comenzii \documentstyle nu i s-a transmis op¸tiunea fleqn (caz ˆın care se folose¸ste ca spa¸tiu valoarea lui topsep; • \belowdisplayshortskip - reprezint˘ a spa¸tiul ad˘ augat sub o formul˘ a mai scurt˘ a cu excep˘tia stilului fleqn (caz ˆın care se folose¸ste ca spa¸tiu valoarea lui topsep).
CE ESTE
LATEX ?
155
Formatul num˘ arului ecua¸tiei este controlat de seven¸ta de control \theeqution, ce poate fi eventual redefinit˘ a. De exemplu, pentru stilul book \theequation este predefinit ca {\ thechapter.\arabic{equation}}.
Index de concepte ¸ si comenzi TEX (plain TEX)
\ (backslash), 22-135 \!, 115 \,, 114 \{, \} ({, }), 18,112 {, } -- delimitatori de grup, 59-67 {, } -- delimitatori de parametri, 61-68 \% (%), 18,59 - (cratima), 20 -- (liniu¸ta ”en-dash”), 20 --- (liniu¸ta ”em-dash”), 20 − (semnul minus) \& (&), 18 &, 18,98-104 & -- ^ ın cadrul halign, 98 & -- ^ ın cadrul eqalign, 127 & -- ^ ın cadrul matrix, 130 5pt, 34-37 7pt, 34-37 8pt, 35-36 +, 109,114,116,118-135
^, 18,113-135 , 18,113-135 \# (#), 18,98-104 \$ ($), 18,57,85,105-137 $$, 18,85,105-135
‘ (apostrof deschis), 17-18 ’ (apostrof ^ ınchis), 17-18 \‘, \’, 21 \=, 21 \^, 21 \., 21 \~, 21,42 \", 21 \^\i, 22 ~, 18 10pt, 33,36 11pt, 35 12pt, 36-37 − (minus), 20,109,131-135
158
Index de concepte ¸si
comenzi TEX (plain TEX)
* (\ast), 109 >, 110 (, 112 [ (\lbrack), 112 { (\lbrace), 112
<, 110 =, 110 ), 112 ] (\rbrack), 112 } (\rbrace), 112
\aa (˚ a), 20 \abovedisplayskip, 106 accente ^ ın modul matematic, 114 \advance, 66,79 \ae (æ), 20 aliniat, aliniere, 19,45,58 \alpha (α), 107 \angle (6 ), 108 \arccos, 117 \arctan, 117 arg-secv, 62 \ast (*), 109
\AA (˚ A), 20 accente, 21 \acute ( ´ ), 114 adˆ ancime (depth), 82 \advancepageno, 79 \AE (Æ), 20 \aleph (ℵ), 108 \amalg (q), 109 \approx (≈), 110 \arcsin, 117 \arg, 117 \asymp, 110 \atop, 119
\b, 21 \bar ( ¯ ), 114,121 \bbuildrel, 125 \begingroup, 24 \begin{theorem}, 24 \beta (β), 107 \bgroup, 24 \bigbreak, 58 \bigcirc ( ), 109 \biggl ( ), 122,124
\backslash, 108 \baselineskip, 91,93-95 \begin, 24 \begin{document}, 24 \belowdisplayskip, 106 \bf, 22,35,99-103 \big, \Big, T 122 \bigcap (S), 108 \bigcup " ( ), 108
\Biggl ( ), 122,124
Index de concepte ¸si
comenzi TEX (plain TEX)
\biggm ( ), 124
\biggr ( ), 122,124
159
\Biggm ( ), 124 #
\Biggr ( ), 122,124 h \Bigl ( ), 122 \Bigm ( ), 124 L \bigoplus ( ), 109
\bigl ( ), 122 \bigm ( ), 124 J \bigodot ( N ), 109 \bigotimes ( ), 109 \bigr ( ), 122 \bigskip, 44,58 \bigtriangledown (5), 109 U \biguplus (V), 109 \bigwedge ( ), 109 \box, 82-83,88 box explicit, 81,84 box orizontal, 83,92 \boxit, 90-91 \bowtie, 110 \brack, 119 \breve (˘), 114 \bullet (•), 109
\brace, 119 \break, 64-65,77 \buildrel, 124-125 \bye, 31
\c ¸, 21 caractere, 17,84 caractere speciale, 17-18 \cap (∩), 109 \cdot (·), 109 \centerline, 55,61,78,91 \chi (χ), 107 \circ (◦), 109
\cal, 113 caractere ordinare, 107 caractere unite, 19 \cases, 123 \cdots (· · ·), 133 \check ( ˇ ), 114 \choose, 119 \clubsuit (♣), 108
i \Bigr ( ), 122 F \bigsqcup ( ), 108 \bigtriangleup (4), 109 W \bigvee ( ), 108 \bot (⊥), 108 box, 23,27,46,81-96 box implicit, 81 box vertical, 48,82,92
160
Index de concepte ¸si
comenzi TEX (plain TEX)
cm, 42 \cmr17, 119 \colon (:), ` 107 \coprod ( ), 108 comenzi, 14,22 \cornerbox, 65 \cosh, 117 \coth, 117 CR (linie nou˘ a), 19,29,41,58,106 \cup (∪), 109
cmmi, 112 \cmrxvii, 119 \cong (∼ =), 110 comprimare, 44,49 \copy, 87 \cos, 117 \cot, 117 \cr, 98-104,127-135 \csc, 117
\d, 21 \dashv (a), 110 \ddagger (‡), 109 . \ddots ( . . ), 133 \def, 26 \defadots, 134 \delta (δ), 107 depth (adˆ ancime), 82,95-96,103 \diagram, 134-135 \diamondsuit (♦), 108 dimensiune, 79 \displaystyle, 116 \dot, 114 \dotfill, 52-54 \downarrow (↓), 111,135 \downbracefill ( z }| { ), 52 dvi, 16,19 dvidot, 17
\dagger (†), 109 \dd, 118-119 \ddot ( ¨ ), 114 \deg, 117 \Delta (∆), 108 \det, 117 \diamond (), 109 \dim, 117 \displaylines, 126,132 \div (÷), 109 . \doteq (=), 110 \dots, 133 \Downarrow (⇓), 111 \dp, 92 dvi2ps, 17 dvihplj, 17
editare computerizat˘ a, 14 \eightrm, 35-36,39,91
egroup, 24 \eightit, 76
Index de concepte ¸si
comenzi TEX (plain TEX)
161
\eject, 77-78 \else, 74 \emptyset (∅), 108 \end{document}, 24 \endinsert, 78-79 \enspace, 51,64,68 \eqalign, 127-129,132 \eqno, 127-128 \eta (η), 107 \evenpagefoot, 73-76 \exists (∃), 108 extensie, 44,47-49
\ell (`), 108 em, 43,51,99 \end, 31 endgroup, 24 \enskip, 43 \epsilon (), 107 \eqalignno, 128 \equiv (≡), 110 \evenpagehead, 73-76 ex, 43 \exp, 117
factor de scalare global, 38 \fem, 88 \fil, 54 fi¸ sier tfm, 16 \fiverm, 34 flotare, 79 \font, 119 fonturi preˆınc˘ arcate, 33 fontul roman, 33-35 fontul boldface, 33-34 fontul ma¸ sin˘ a de scris, 33 \footnote, 66-67 \forall (∀), 108 formule matematice, 84
\fam, 38,107
fontul italic, 33,35 fontul ˆınclinat, 33 fonturi TEX, 33 \footline, 71-75 formatare, 15 \frown (_), 110
\gamma (γ), 107 \gcd, 117
\Gamma (Γ), 108 \gdef, 79
\fi, 74,79 fi¸sier surs˘ a, 14-131 \five, 38 \flat ([), 108 \folio, 72 fonturi, 33
162
Index de concepte ¸si
\ge (≥), 110 \gets (←), 111 \global, 23,26,66,79,87 glue, 44 grup, 22-28,83,106
comenzi TEX (plain TEX) \geq (≥), 110 \gg (), 110 \grave ( ` ), 114 grupul vid, 113
\H ( } ), 21 \hangindent, 65-67 \harr, 134-135 \hbar, 108 \headline, 71-75
H,h, 29 \halign, 97 \hangafter, 65-66 \hat, 114 \hbox, 23,38,54,64,76, 83-84,89,95-96,119 height (ˆın˘ al¸time), 82,95-96,103 \heartsuit (♥), 108 \hfil, \hfill, 48,50, 64-65,72,99-104,118 \hoffset, 79 \hookleftarrow (←-), 111 \hrule, 58,85,95 \hskip, 42,45,57,84,99,115 \hss, 54-55
\hom, 117 \hookrightarrow (,→), 111 \hrulefill, 52 \hsize, 45,47,71-72,84,92-93 \ht, 92-93
I,i, 29 \ifnum, 72,79 \iftitlepage, 73-74,80 \Im (Im ), 108 imprimare document, 16 \in (∈), 110,118 \indent, 58,67-68 \infty (∞), 108,125 instruc¸tiuni, 22
\i, 21 \ifodd, 74,80 \ignorespace, 68-69 \imath (ı), 108 in, 38,42 inch, 37,42 \inf, 117 \input, 73,75 instruc¸tiuni cuvˆ ant, 22
\hfq, 100 \hglue, 51
Index de concepte ¸si
comenzi TEX (plain TEX)
instruc¸tRiuni simbol, 22 \int ( ), 106-108,120 \it, 22,35,99-103 \item, 61-63,68 \itemitemitem, 63,67
163
instruc¸tiuni primitive, 14 \iota (ι), 107 italic, 33 \itemitem, 63,68
ˆın˘ al¸time, (height), 82
\jmath (), 108
\kappa (κ), 107, \kern, 51-52,84,115,125
\ker, 117 Knuth Donald E, 13
\l ( l), 20 \lambda (λ), 107 \land (∧), 109 \largdotfill, 53 l˘ a¸timea (width), 82 \lbrack ([), 112 leaders, 52 \left, 122-124,128,130-131,135 \leftarrowfill, 52 \Leftarrow (⇐), 111 \Leftrightarrow (⇔), 111 \leftharpoondown ()), 111 \leftskip, 60-62 \leqalignno, 128 \lfloor (b), 112 \lim, 117,125
\L (L), 20 \Lambda (Λ), 108 \langle (h), 112 layout, 18 \lbrace ({), 112 \lceil (d), 112 \leaders, 53 \le (≤), 110 \leftarrow (←), 111 \leftrightarrow (↔), 111 \leftharpoonup ((), 111 \leftitem, 63-65 \leq (≤), 110 \leqno, 127-128,131 \lg, 117 \liminf, 117,125
164
Index de concepte ¸si
comenzi TEX (plain TEX)
\limits, 119,125,135 \line, 46-50,55,95 \lineskiplimit, 93-94 linia de jos, 80 linia de lucru, 45 litere grece¸ sti mari (\meti), 113 \ll (), 110 \log, 117 \Longleftarrow (⇐=), 111 \Longrightarrow (=⇒), 111 \Longleftrightarrow (⇐⇒), 111 \lor (∨), 109 \ln, 117
\limsup, 117,125 \lineskip, 93-94 linia de baz˘ a, 81 linia de sus, 80 list˘ a de lucru orizontal˘ a, 27 litere caligrafice (\cal), 113 \llap, 54,68-69,82,135 \longleftarrow (←−), 111 \longrightarrow (−→), 111 \longleftrightarrow (←→), 111 \longmapsto (7−→), 111 \lower, 89-90 \lnot (¬), 108
macro-comenzi definite, 15 macro-comenzi predefinite, 14 \mapsto (7→), 111 \mathop, 119,125,135 \mathstrut, 118 \max, 117 \medskip, 44,58-59,132-133 \medskip2, 37 \medskip4, 37 \meti, 68-69 \midinsert, 78-79 minus (−), 44-45,106 \mkern, 115,134 modul matematic: (text, dysplay), 27,105-116 modul orizontal: (obi¸snuit, restrˆ ans), 27-28, 57-58,77,83-84
macro-defini¸tii utilizator, 15 \magnification, 37,43 \mathinner, 134 \mathrel, 125 \matrix, 129-132,135 \medbreak, 58 \medskip1, 37 \medskip3, 37 \medskip5, 37 \mid (|), 110 \min, 117 \mit, 113 mm, 42,89,94
Index de concepte ¸si
comenzi TEX (plain TEX)
modul vertical: (obi¸snuit, intern), 18,26, 38,57-58,78,82,100 \models (|=), 108 \moveright, 90 \mskip, 115 \myfootnote, 66-67
\nabla (∇), 108 \natural (\), 108 \nearrow (%), 110 \negsalt, 53 \neq (6=), 111 \newcount, 66 \newtoks, 73 \noalign, 103-104,132-133 \nointerlineskip, 95 \normalbaselineskip, 132,135 \notenumber, 66 \not< (6<), 110 \not>= (6>=), 111 \not\approx (6≈), 111 \not\equiv (6≡), 111 \not\leq (6≤), 110 \not\preceq (6), 110 \not\simeq (6'), 111 \not\subseteq (6⊆), 110 \not\succeq (6), 110 \not\supseteq (6⊇), 110 \not\sqsupseteq (6w), 110 \null, 76-77,79 nume-fi¸sier.dvi, 16
165
\moveleft, 90 \mp (∓), 109 \mu (µ), 107
\narrower, 60-61 \ne (6=), 111,118 \neg (¬), 108 \negtinspace, 51 \newbox, 87-88 \newif, 73 \ni (3), 110 \noindent, 58,61 \nopagenumbers, 72 \notin (∈), / 111 \not<= (6<=), 111 \not> (6>), 110 \not\cong (6∼ =), 111 \not\geq (6≥), 110 \not\prec (6≺), 110 \not\sim (6∼), 111 \not\subset (6⊂), 110 \not\succ (6), 110 \not\supset (6⊃), 110 \not\sqsubseteq (6v), 110 \nu (ν), 107 nume-fi¸sier.tex, 16 nume-fi¸sier.log, 28
166
Index de concepte ¸si
comenzi TEX (plain TEX)
\nwarrow (-), 111
\o, \O (ø,Ø), 20,107 \obeylines, 59-61,64-65,67-68 \oddpagehead, 73-76 \odot ( ), 109 \offinterlineskip, 95,103 \oldstyle, 113 \omega (ω), 108 \openup, 132 \oslash (), 109 \over, 117,122,124-125 Overfull, 30,46 \overleft, 111 \overline, 121
\oe, \OE (œ,Œ), 20 \oddpagefoot, 73-76 \of, 120-121 H \oint ( ), 109 \ominus ( ), 109 \Omega (Ω), 108 \oplus (⊕), 109 \otimes (⊗), 109 \overbrace, 121 overfull box, 93 \overleftarrow, 121 \overrightarrow, 121
\page, 54 pagin˘ a, 71 pagin˘ a impar˘ a, 74-76 \parallel (k), 110 paragraf, 19,45,58 \parskip, 52 \partial (∂), 108 \phi (φ), 107 \pi (π), 107 plain TEX, 13,19 \pm (±), 109 \pr, 117 \prec (≺), 110 \prime (0), 108 procesorul TEX, 14-134
\pageno, 72-75,79 pagin˘ a par˘ a, 74-76 \par, 19,57-58 \parindent, 24-26,58,62-65 \parfillskip, 61,77 pc, 42 \perp (⊥), 110 \Phi (Φ), 108 \Pi (Π), 108 plus, 106 \pmatrix, 130 preambul, 98 \preceq (), 110 procesare, Q 15 \prod ( ), 108
Index de concepte ¸si
comenzi TEX (plain TEX)
167
\propto (∝), 110 prthplj, 17 \psi (ψ), 108 punctul tipografic (pt), 42
prtfx, 17 pt, 42-135 \Psi (Ψ), 108
Q,q, 30 \qquad, 43,114
\quad, 43,76,96,99,114
R,r, 30 \rangle (i), 112 \rbrack (]), 112 regul˘ a – procesare grup, 23 \Re (<), 108 \rho (ρ), 108 \rightarrow (→), 111,125 \rightarrowfill, 52,125 \rightharpoonup (*), 111 \rightskip, 60-62 \rm, 22,35 \romannumeral, 72 \root, 120-121 \runningtitle, 73,75-76
\raise, 89-90,134 \rbrace (}), 112 \rceil (e), 112
S,s, 30 salt tare, 50-51 \scriptstyle, 116-117,121,135 secven¸t˘ a de control, 16-135 secven¸t˘ a elastic˘ a, 45,47 \searrow (&), 111 semnul de derivare, 114
\rfloor (c), 112 \right, 122-124,128,130-131,135 \Rightarrow (⇒), 111 \rightharpoondown (+), 111 \rightleftharpoons (* )), 111 \rlap, 54,76,82,135 roman (fontul), 33 \Romannumeral, 72 \runningauthor, 73,75-76
salt slab, 50-51 scaled, 36 \scriptscriptstyle, 116 semnul minus, 20-21 \sec, 117 \setboxi, 85,91
168
Index de concepte ¸si
comenzi TEX (plain TEX)
\setminus (\), 109 \sharp (]), 108 \sigma (σ), 107 \sim (∼), 110 \simeq ('), 110 \sinh, 117 \sl, 35 \smallskip, 43,58,102 \smile (^), 110 SP, 19,41 spa¸tiere orizontal˘ a, 41-43 spa¸tiu elastic (glue), 45 spa¸tiu matematic, 79,114 \sqcap (u), 109 \sqrt, 120,122 \sqsupseteq (w), 110 \star (?), 109 stilul "scriptscript", 115-116 stilul "scriptscriptscript", 115 \strut, 103-104 \subseteq (⊆), 110 \succeq (), 110 \suma, 119 \supset√(⊃), 110 \surd ( ), 108
\sevenrm, 32 \showthe, 92 \Sigma (Σ), 108 simboluri verticale extinse, 122 \sin, 117 sistemul TEX, 13-14 \smallbreak, 58 \smash, 64,126,135 \spadesuit (♠), 108 spa¸ tiere (glue), 84 spa¸tiere vertical˘ a, 43-44 spa¸tiu de leg˘ atur˘ a, 18,42 spa¸tiu normal, 42 \sqcup (t), 109 \sqsubseteq (v), 110 \ss (ß), 20 stilul "script", 115-116
\tan, 117 \tau (τ ), 107 TEX, 13 TEXsimplu, 13 \tenbf, 76 the, 66,73-76
\tanh, 117 tex, 16 \textindent, 67 \tenrm, 33,72,75 \textstyle, 116-118 \theta (θ), 108
\subset (⊂), 110 \succ P (), 110 \sum ( ), 108,118 \sup, 117 \supseteq (⊇), 110 \swarrow (.), 111
Index de concepte ¸si
comenzi TEX (plain TEX)
169
\Theta (Θ), 108 \thinspace, 114-115 \times (×), 109 \titlepagefoot, 73-74,80 \titlepagetrue, 73,80 \top (>), 108 \topinsert, 79 \triangleleft (/), 109 true, 34,39 \twelverm, 36
\thinskip, 51 \tilde ( ˜ ), 114 \titlepagefalse, 73,80 \titlepagehead, 73-74,80 \to (→), 111 \topglue, 52,77 \triangle (4), 108 \triangleright (.), 109 \tt, 21,35
\u, 21 underfull box, 93 \underline, 121 \unhcopy, 87 \unvbox, 87-88,93 \uparrow (↑), 111 \upbracefill (| {z }), 53 \Updownarrow (m), 111 \upsilon (υ), 107
Underfull, 30,45 \underbrace, 121-122 \unhbox, 87-88,93 \unskip, 66,69 \unvcopy, 87-88 \Uparrow (⇑), 111 \updownarrow (l), 111 \uplus (]), 109 \Upsilon (Υ), 108
v, 14 \valign, 104 \varphi (ϕ), 107 \varr, 134-135 \varsigma (ς), 107 \vbox, 49,82-83,91
\v, 21 \varepsilon (ε), 107 \varpi ($), 108 \varrho (%), 107 \vartheta (ϑ), 108 \vcenter, 23,82-83,135 . \vdots (. .), 135
\vdash (`), 110 \vec ( ~ ), 114,121 \vert (|), 108 \vfill, 48,50,77
\vee (∨), 109 \vfil, 48,50,77 \vglue, 52,78
170
Index de concepte ¸si
comenzi TEX (plain TEX)
\vrule, 57,85,95-96 \vskip, 38,43-44,58,76,78,84 \vss, 54-55
\vsize, 71-73 \vsplit, 91 \vtop, 23,64-66,82-83,85-86
\wedge (∧), 109 width (l˘ a¸time), 82,95-96,103 \widetilde ( g ), 114 \wr (o), 109
\wd, 92 \widehat ( d ), 114 \wp (℘), 108
X,x, 30 \Xi (Ξ), 108
\xi (ξ), 107
\zeta (ζ), 107
Index de concepte ¸si
comenzi TEX (plain TEX)
171
Rezumatul accentelor ¸si simbolurilor
Accente − modul text \‘r
−→ ` r
\^r
−→ ^ r
\= r
−→ ¯ r
\b r
\H r
−→ } r
\’r
−→ r ¯ −→ ´ r
\u r
−→ ˘ r
\.r
−→ _ r
\v r
−→ ˇ r
\c r
−→ ¸ r
\~ r
−→
r ~
\t r
−→
r
\"r
−→
r ¨
\d r
−→
r .
Accente − modul matematic ˆ a a ¯ a˙ ~a
\hat \bar \dot \vec
a a a a
ˇ \check a a a \acute a ´ a \grave a `
\widehat{.....},
˜a \tilde a a \ddot a ¨ a \breve a ˘
\widetilde{.....}
Literele grece¸sti mici - modul matematic α β
\alpha \beta
ι κ
\iota \kappa
% σ
\varrho \sigma
172
Index de concepte ¸si
γ δ ε ζ η θ ϑ
\gamma \delta \epsilon \varepsilon \zeta \eta \theta \vartheta
λ µ ν ξ ≤ π $ ρ
comenzi TEX (plain TEX)
\lambda \mu \nu \xi \o \pi \varpi \rho
ς τ υ φ ϕ χ ψ ω
\varsigma \tau \upsilon \phi \varphi \chi \psi \omega
Literele grece¸sti mari - modul matematic Γ ∆ Θ Λ
\Gamma \Delta \Theta \Lambda
Ξ Π Σ Υ
\Xi \Pi \Sigma \Upsilon
Φ Ψ Ω
\Phi \Psi \Omega
Operatori mari − modul matematic Σ Π q R H ⊕
P Q ` Z
\sum \prod \coprod
∩ ∪ t
\int
∨
\bigvee
I
W
\oint
∧
V
\bigwedge
J L
\bigodot \bigoplus
⊗ ]
T S F
N U
\bigcap \bigcup \bigsqcup
\bigotimes \biguplus
Operatori binari − modul matematic + ± ∓ \
+ \pm \mp \setminus
− ∩ ∪ ]
− \cap \cup \uplus
÷ ∨ ∧ ⊕
\div \vee or \lor \wedge or \land \oplus
Index de concepte ¸si
· × ∗ ? ◦ •
\cdot \times \ast or \star \diamond \circ \bullet
∗
comenzi TEX (plain TEX) u t / . o
4
\sqcap \sqcup \trianglelef \triangleright \wr \bigcirc \bigtriangleup
173
⊗ † ‡ q 5
\ominus \otimes \oslash \odot \dagger \ddagger \amalg \bigtriangledown
Operatori rela¸tionali - modul matematic < ≤ ≺ ⊂ ⊆ v ∈ ` ^ _
< \leq or \le \prec \preceq \ll \subset \subseteq \sqsubseteq \in \vdash \smile \frown
> ≥ ⊃ ⊇ w 3 a | k
> \geq or \ge \succ \succeq \gg \supset \supseteq \sqsupseteq \ni \dashv \mid \parallel
= ≡ ∼ ' ≈ ∼ = ./ ∝ |= . = ⊥
Nega¸tii - modul matematic 6 < 6≤ 6 ≺ 6 6 ⊂ 6 ⊆ 6 v
\not< \not\leq \not\prec \not\preceq \not\subset \not\subseteq \not\sqsubseteq
6 > 6≥ 6 6 6 ⊃ 6 ⊇ 6 w
\not> \not\geq \not\succ \not\succeq \not\supset \not\supseteq \not\sqsupseteq
= \equiv \sim \simeq \asymp \approx \cong \bowtie \propto \models \doteq \perp
174
Index de concepte ¸si
6= 6 ∼ 6≈ ∈ /
\not<=, \neq, \ne \not\sim \not\approx \notin
6≡ 6 ' ∼ 6=
comenzi TEX (plain TEX)
\not\equiv \not\simeq \not\cong
S˘ age¸ti - modul matematic
← → ↔ ⇐ ⇒ ⇔ 7 → ←( ) * ) ↓ ⇑ m & -
\leftarrow, \gets \rightarrow, \to \leftrightarrow \Leftarrow \Rightarrow \Leftrightarrow \mapsto \hookleftarrow \leftharpoonup \leftharpoondown \rightleftharpoons \downarrow \Uparrow \Updownarrow \searrow \nwarrow
←− −→ ←→ ⇐= =⇒ ⇐⇒ 7−→ ,→ * + ↑ l ⇓ % .
\longleftarrow \longrightarrow \longleftrightarrow \Longleftarrow \Longrightarrow \Longleftrightarrow \longmapsto \hookrightarrow \rightharpoonup \rightharpoondown \uparrow \updownarrow \Downarrow \nearrow \swarrow
Delimitatori la stˆ anga ¸si la dreapta - modul matematic
( ) h i
( ) \langle \rangle
[ ] { }
[ or \lbrack ] or \rbrack \{ or \lbrace \} or \rbrace
b c d e
\lfloor \rfloor \lceil \rceil
Index de concepte ¸si
comenzi TEX (plain TEX)
175
Alte caractere − modul matematic ℵ h ¯ ı ` ℘ < Im ∂ ∞
\aleph \hbar \imath \jmath \ell \wp \Re \Im \partial \infty
0 ∅ ∇ √ > ⊥ k 6
4 \
\prime \emptyset \nabla \surd \top \bot \l or \Vert \angle \triangle \backslash
∀ ∃ ¬ [ \ ] ♣ ♦ ♥ ♠
\forall \exists \neg or \lnot \flat \natural \sharp \clubsuit \diamondsuit \heartsuit \spadesuit
Simboluri interna¸tionale (caractere unite) - modul text ff
−→ ff
fi
−→ fi
ffi
−→ ffi
ffl
−→ ffl
‘‘
−→ ‘‘
!‘
−→ ¡
\oe, \OE−→ œ, Œ
\aa, \AA−→ ˚ a, ˚ A
\ae, \AE−→ æ, Æ
\o, \O −→ ø, Ø
fl
−→
fl
’’
−→
’’
?‘
−→
¿
\l, \L
−→
\ss
−→
l, L ß
cratima: -, liniu¸ta “en-dash”: --, liniu¸ta “em-dash”: ---, semnul minus:
−.
BIBLIOGRAFIE
a, [1] P.A. Blaga, H.F. Pop, LATEX 2ε , Editura Tehnic˘ Bucure¸ sti, (1999). [2] M. Goossens, F. Mittelback & A. Samarin, The LATEX 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¸ sanu, Elemente de baz˘ a ale sistemului TEX¸si plain TEX, Editura Univ. "Al.I. Cuza" Ia¸ si, ISBN 973-9312-99-3, Edi¸ tia I, (2001); [7] A. Pusztai, Gh. Ardelean, LATEX, Ghid de utilizare, Editura Tehnic˘ a, Bucure¸ sti, (1994). [8] R. Seroul, S. Levy, A Beginner’s Book of Springer-Verlag, New York Inc. (1991).
TEX,
178
BIBLIOGRAFIE
[9] M. Spivak, The Joy of TEX, 2nd ed., American Mathematical Society, Providence, R.I., (1990).