TeX és LaTeX

Írta: Mayer Gyula - Sudár Csaba - Wettl Ferenc

(A PANEM Kiadó gondozásában megjelent LINUX-könyv 20. fejezetének kicsit módosított változata.)
 
 

Bevezetés

A TeX nyomdai minőségű dokumentumok előállítására alkalmas szedő- és tördelőprogram. Lelke a dokumentumok leírására alkalmas programnyelv, melyet a híres stanfordi matematikus Donald E. Knuth fejlesztett ki. A TeX-re úgy tekinthetünk, mint a tipográfia assemblerére, melyben minden tipográfiai feladat megoldható, de gyakran csak fáradtságos programozói munkával. A TeX-ben makrók is írhatók, ez viszont lehetővé teszi, hogy a TeX-re egy magasabb szintű, barátságosabb programnyelv épüljön. Egy ilyen nyelv a LaTeX, melyet Leslie Lamport fejlesztett ki. Mára e program a tudományos, műszaki szövegszerkesztésben meghatározóvá vált: többszáz folyóiratot LaTeX-ben készítenek, évente többezer könyv és megszámlálhatatlan mennyiségű kiadvány, dolgozat, egyetemi jegyzet, beszámoló, … készül LaTeX-ben, de használata a tipográfia egyéb területein is igen elterjedt. Az olyan bonyolult tipográfiai feladatok nyomdai minőségű megoldásában, mint amit a matematikai formulák szedése jelent, a TeX/LaTeX-rendszereknek máig sincs komoly versenytársuk a számítógépes programok között. A TeX logójáról annyit, hogy az a görög ,,tau/epszilon/khi/nű/éta'' szó (nagybetűkkel írva TEXNH) első szótagja, és így ,,tech''-nek ejtendő, nem ,,teksz''-nek. A LaTeX szokásos kiejtése ,,latech", angolosabban ,,létech''. A két logó írógép stílusban: TeX illetve LaTeX. A TeX jelenlegi verziószáma 3.14159, e verziószámot úgy képzik, hogy a ,,pi''-hez konvergáljon. 1994-ig a LaTeX verziószáma 2.09 volt. Ekkor készült el a LaTeX2e (ejtsd latech-kettő-epszilon), ami egy nagyobb projekt, a 2000-re tervezett új verzió, a LaTeX3 elkészítése felé tett első lépés eredménye.

Ebben a fejezetben röviden áttekintjük a LINUX-ban és egyúttal minden UNIX rendszerben is megtalálható, de a többi széles körben elterjedt operációs rendszer alatt is futó TeX programcsaládot, egyúttal kitérünk azokra a kevesek által ismert módszerekre is, amelyekkel kényelmesen írhatunk magyar szöveget. Azoknak, akik további ismeretekre vágynak, az INTERNET-et és a magyar nyelvű könyveket ajánljuk figyelmébe.

A TeX-hel (és így a LaTeX-hel is) kapcsolatos anyagok gyűjtőhelye a CTAN szerver (CTAN = Comprehensive TeX Archive Network). Címe:

A Nemzeti Információs Infrastruktúra Fejlesztési Programnak köszönhetően itthon is van rendszeresen frissített tükre, mely az alábbi címen található: A továbbiakban az ftp címeknek ezt az állandó elemét CTAN-ként rövidítjük. Ismertetőket a CTAN info alkönyvtárában találunk.

Magyar nyelvű könyv a TeX-ről Bujdosó Gyöngyi és Fazekas Attila TeX kezdőlépések című műve, mely a TERTIA Kiadónál jelent meg 1996-ban. A LaTeX-ről a PANEM Kiadó gondozásában Wettl Ferenc, Sudár Csaba, Mayer Gyula LaTeX kezdőknek és haladóknak című műve.

A TeX és a LaTeX

A TeX és a LaTeX programnyelve

A TeX rendszer rendkívül rugalmasan adaptálható a konkrét tördelési feladathoz és a felhasználó szokásaihoz.

A szövegformázó rendszerek egyik nehézsége az, hogyan válasszuk el a szedendő szöveget a formázási parancsoktól. A TeX-ben a kettőt ugyanabban a fájlban helyezhetjük el, és megkülönböztetésül - alapesetben - bekszlessel jelöljük a parancsszavakat, például: \par (új bekezdés).

A TeX számára egy ASCII-fájlt kell készíteni, amelyben alapértelmezésben az angol ábécé betűin és a számjegyeken kívül csak a következő jelek szerepelhetnek:

` ' " ; : . , ? ! @ # $ % ^ & * ( ) ~ - _ = + [ ] { } < > \ / |
A későbbiekben megmutatjuk, hogy egyetlen paranccsal hogyan terjeszthető ki a fent megadott karakterkészlet úgy, hogy például a magyar ékezetes betűket is tartalmazza.

A fenti jelek közül 10-nek speciális jelentése van, ezért szövegben önálló betűként csak egy parancs segítségével adhatóak meg.
 
A KARAKTER A KARAKTER JELENTÉSE MEGJELENÍTÉSE
\ a parancsok kezdőkaraktere $\backslash$
$ matematikai környezet határa \$
#   \#
% megjegyzés \%
& tabulátor karakter \&
~ nem törhető szóköz \~{}
_ alsó index \_
^ felső index \^{}
{ blokk illetve argumentum határai $\{$
} blokk illetve argumentum határai $\}$
A TeX parancsok kétfélék lehetnek: vagy a \ karakter és utána néhány alfabetikus jel (például \hskip), vagy a \ karakter és utána egyetlen speciális karakter (például \"). A LaTeX-ben van egy harmadik típus, amikor a \ karakter után néhány alfabetikus jel, majd végül egy * karakter következik (például \section*, az ilyen parancsok mindig a * nélküli parancsok módosított változatai).

A parancs után { és } közé kerül az argumentum. A zárójelek elhagyhatók, ha az argumentum egyetlen jelből áll (pl. \sqrt2 és \sqrt{2} ugyanazt eredményezi). Egy parancsnak több argumentuma is lehet (legföljebb 9). Az is lehet, hogy nincs argumentuma, mint pl. a \par és \it parancsoknak. Egy argumentuma van az ékezet-parancsoknak, akárcsak a \centerline (középre zárás) és \underbar (aláhúzás) parancsoknak. A LaTeX-ben vannak opcionális argumentumok is, ezeket a [ és ] közé kell írni (pl. \sqrt[3]{2} a köbgyök kettőt megjelenítő LaTeX-parancs).

Kapcsos zárójelekkel valójában környezetet jelölhetünk ki. Pl. a \it parancs kurzívra váltja a betűtípust, s ennek érvényességi körét korlátozhatjuk valamely környezetre. (Egyszerűség kedvéért a példáinkban ezentúl ékezetes betűket írunk; sima angol TeX-hel való fordításkor azonban ezek nem használhatók, csak a később ismertetendő módszerek valamelyikének alkalmazásával!) Normál szövegbe

azt kapjuk, hogy: … Egy másik példa: Eredménye:
Középre helyezett, részben aláhúzott cím
Az egymás melletti szóközök és tabok egyenértékűek egyetlen szóközzel (hogy pontosan mennyi helyet hagy ki, azt a TeX a finoman szabályozható tipográfiai előírások alapján számolja ki), egy sorvége egyenlő egy szóközzel, több sorvége pedig az új bekezdést jelöli, amit egyébként a \par paranccsal is létrehozhatunk.

A hullám karakter (~) a sortörés finomhangolását segíti: ha két szó közé ezt írunk a szóköz helyett, akkor látszatra közönséges szóköz az eredmény, azonban e helyen nem tör sort a program. Jól használható tehát a magyarban a mondat elején álló névelő és az azt követő szó között.

A % jeltől a sor végéig tartó részt a TeX nem veszi figyelembe; így helyezhető el kommentár a fájlban.

Matematikai formulák szedése

A matematikai képletek szedése a TeX/LaTeX külön erőssége, melyet külön ún. matematikai mód támogat. TeX-ben a szövegközi matematikai képleteket $-jelek közé kell tenni (pl. $a+b$), míg a kiemelt, sorok közötti képleteket $$-jelek közé (pl. $$a+b$$). LaTeX-ben a szövegközi matematikai képletek a $-jelek helyett a \( és \) jelek közé is zárhatók. A kiemelt képletekre ugyan a LaTeX is elfogadja a $$-jeleket, de nem mindig működik tökéletesen, ezért használatukat jobb elkerülni, és helyettük a \[ és \] jelek közé írni a formulát (pl. \[ a+b \]).

A ^ és _ vezérlőkarakterek matematikai módban a felső ill. alsó indexek elhelyezésére szolgálnak:

ha $a_{12} = 3 $ és $b_7 = 4$ akkor $a_{12}^{b_7} = 9 \times 9$
Ezzel a lehetőséggel folyó szövegben is élhetünk, azonban a fenti példából látszik, hogy matematikai módban - a matematikában megszokott módon - a betűket változónak értelmezi a program és kurzív (pontosabban sajátos, kissé eltérő metszésű matematikai kurzív) típussal szedi ki. Ezért a kitevő környezetében vissza kell váltanunk az antikva betűtípusra a \rm (roman) paranccsal. Szintén a képletszedés hagyománya, hogy az ékezeteket másképpen kell elhelyezni matematikai ill. szövegmódban; ezt a TeX azzal is hangsúlyozza, hogy matematikai módban nem használhatók a fönt megismert ékezet-parancsok. Hogy tehát repülő-ékezetes szöveget tehessünk ,,kitevőbe'', ki kell lépnünk a matematikai módból. A $ jelnek ebből a szempontból ellentéte a \hbox (horizontális doboz) parancs: az argumentumát vízszintes sorba szedendő közönséges szövegként kezeli:
Az~1997$^{\rm dik}$ esztendőnek is január volt az 1$^{\hbox{s\H o}}$ hónapja.
A \hbox-on belül automatikusan a szöveg típusára vált a TeX, azonban a kitevők automatikus kicsinyítését is elhagyja ilyenkor; a betűfokozatot tehát külön át kell állítani a \sevenrm paranccsal a kitevőben szokásos hét pontra:
Idén is január volt az 1$^{\hbox{\sevenrm s\H o}}$ hónap.

A TeX és a LaTeX futtatása

Legyen egy TeX- illetve LaTeX-fájl neve file.tex; ekkor az előbbi esetben a >tex file az utóbbi esetben a >latex file parancs hatására újabb fájlok keletkeznek: a file.log (mely persze a logfájl, ami a fordítással kapcsolatos részleteket tartalmazza), és a kiszedett oldal megjelenítőeszköztől független leírását binárisan kódolt formában tartalmazó file.dvi (device independent). LaTeX-ben általában még több további fájl is keletkezik, ezek táblázatát e rész végén megadjuk. Ha a dokumentumban belső hivatkozások vannak, akkor a >latex file parancsot akár kétszer is meg kell ismételni. (Ha az erdeti fájl nem .tex végződésű, akkor a teljes fájl nevét ki kell írni).

További programok szükségesek ahhoz, hogy a TeX/LaTeX munkájának eredményét (a dvi-fájl tartalmát) megtekinthessük. Ezeket meghajtóknak (driver) szokás nevezni, és nevük egyik (általában első) fele a meghajtott eszközre utal. A képernyőn, az X grafikus felület alatt, az xdvi interaktív megjelenítő használható. Szokás szerint >man xdvi tájékoztat a használatáról. Paraméterként a dvi-fájl nevét kell megadni; a .dvi végződés elhagyható. Több egyetlen gombnyomásból álló parancsot ismer (x ki-be kapcsolja egy egérrel vezérelhető panel megjelenítését, q pedig kilép).

A nyomtatómeghajtók egy állományt hoznak létre (a PostScript-et kivéve binárisat), melyet változtatás nélkül kell a nyomtatónak továbbítani. A különféle típusú HP lézernyomtatók saját nyelvére a dvilj, dvilj2p, dvilj4 és dvilj4l programok fordítanak, PostScript fájlt pedig dvips hoz létre ( http://www.radicaleye.com e kiváló program kanonikus URL-je, itthon tükrözve a CTAN: dviware/dvips alkönyvtárban). Ha egyéb típusú nyomtatónk van, akkor a PS nyelvről való újabb konverzióra van szükség: erre a feladatra alkalmas a GhostScript program, mely ismeri a legtöbb mátrixnyomtatót is. Néhány év óta a gnu archívumokban található GhostScript verzió elavult, ezért célszerű a friss 4.x Aladdin verziót használni (CTAN: support/ghostscript/aladdin). (Erre ugyan más licensz érvényes, azonban szintén szabad szoftver.) Pl. a

gs -sDEVICE=epson -r180x180 -sOutputFile=file.epson -dNOPAUSE file.ps quit.ps
paranccsal létrehozható egy kisfelbontású 24-tűs mátrixprinterre való állomány.

A dvips és gs egyaránt működhet szűrőként, így kimenetük közvetlenül is irányítható lpr-re.

Összefoglalva, a leggyakrabban használatos parancsok a következők:

> tex file                  TeX program fordítása

> latex file                LaTeX-program fordítása, ha kell többször is

> xdvi file                 dvi fájl megtekintése

> dvilj file                dvi fájl konverziója LaserJet számára

> lpr -Pnyomtató file.lj    nyomtatás LaserJet-en

> dvips file.dvi -o file.ps  dvi-ből ps-be alakítás

> ghostview file.ps         PostScript fájl megtekintése

> lpr -Pnyomtató file.ps    PostScript fájl kinyomtatása

A feldolgozás közben használt fájlok nevének kiterjesztései, és azok jelentése:

.tex .ltx              TeX/LaTeX forrásfájl

.dvi                   TeX/LaTeX outputja (device independent)

.log                   TeX/LaTeX-üzenetek fájlja

.clo .cls .sty         LaTeX osztályok és csomagok

.dtx                   dokumentált program

.aux                   segédfájl pl. hivatkozásokhoz (auxiliary)

.toc                   tartalomjegyzék (table of contents)

.lof                   ábrajegyzék (list of figures)

.lot                   táblázatjegyzék (list of tables)

.bib .bbl .blg .bst    bibliográfia

.ind .idx .ilg .ist    indexek

.tfm .mf .fd .pk       fontok betűinek méretei, és egyebek

.fmt                   formátum fájl

.poo .pol .pool        karakter pool fájl

Fontok

Történeti áttekintés

Egészen a TeX 2.98 verzióig nem létezett jó megoldás az ékezetes betűket tartalmazó szavak bevitelére és helyes elválasztására. (Ennek ellenére természetesen élelmes magyarok megkeresték a megoldást, és a Faggyas T. - Miklós D. kettős 1988-ban megjelentette a MaTeX-et.)

Nem sokkal később az európai felhasználóknak sikerült a TeX alkotójának, D. E. Knuthnak ellenállását megtörniük, és a 3.x verzió megteremtette a lehetőséget az angolnál bővebb betűkészletű nyelvek kezelésére is.

A konkrét megvalósítás nélkülözhetetlen eleme a betűkiosztás szabványosítása, erre a corki konferencián került sor 1990-ben. Ezt követően született meg az a fontleíró programcsomag (azaz METAFONT kód), mely a Knuth-féle cm betűkészletet kibővítve és némiképp módosítva meg is valósítja ezt a kiosztást. Ezen új fontok dc kezdetű neveket kaptak, mint a későbbi ec, azaz European Computer Modern fontok teszt-változatai. (Természetesen ezen eseményekkel párhuzamosan és sajnos tőlük függetlenül a MaTeX-nek az új helyzethez való adaptációja is megjelent Mayer Gyula révén.)

Az egységes európai kódolásra különböző összefüggésekben a Cork, dc, ec, T1, 8t jelöléseket alkalmazzák.

Sajnos máig sem készült el a plain.tex-nek olyan egységes módosítása, mely lehetővé teszi, hogy felhasználói nemzetközileg egységesen éljenek az új lehetőségekkel; a legnagyobb lépést a rendkívül aktív német szervezet tette, létrehozva a german.sty által megvalósított szabványt, ezt vette alapul Kiss Emil magyar adaptációja (http://www.cs.elte.hu/~ewkiss/software/echun.html).

Másrészt viszont az új LaTeX fejlesztői megírták és a törzskészletbe integrálták az európai nyelvek és az igen elterjedt PostScript fontok használatát lehetővé tevő kódot, s a képernyőn és a nyomtatón való megjelenítéshez szükséges segédprogramok is elkészültek.

A magas színvonalú PostScript fontok egy része az utóbbi években néhány cég ajándékaként már ingyenesen is használható.

A jelen helyzet tehát az, hogy a latin betűs európai nyelvek nagy többségét nemzetközi megállapodás alapján egységesen lehet kódolni, szavaikat a TeX helyesen el tudja választani (a nyelvváltásra bekezdésen belül is lehetőség van!), és a megjelenítéshez mind a Computer Modern, mind pedig egyéb fontok rendelkezésre állnak.

Az alábbiakban e rendszer elemeit ismertetjük, hogy azt az olvasó maga is felépíthesse és az újabb fejlesztéseket (vagy megvásárolt betűkészleteket) be tudja építeni.

Sajnos az új TeX-ben sem lehetséges az elválasztási algoritmusok futás közbeni betöltése, ezért a TeX-elést megelőzően el kell dönteni, hogy a lehetséges három tucat nyelv közül melyeket kívánjuk személyes TeX-ünk által elválaszttatni (a ma szokásos implementációk legalább féltucat nyelv elválasztási szabályait képesek egyszerre tárolni.)

Fontok installálása

Valamely font installálásakor a metrikus adatokat tartalmazó tfm, valamint a betűképeket tartalmazó pk (korábban pxl azaz pixel) fájlokat úgy kell elhelyezni, hogy szedőrendszerünk különböző elemei megtalálják azokat.

Ez az alapséma különféleképp módosul, egyszerűsödik, vagy bonyolódik a különféle fontformátumok szerint. A TeX-hez saját fontleíró programnyelv (METAFONT) társul, a nagy betűforgalmazók viszont ettől és egymástól is eltérő rendszereket hoztak létre.

Ha a font mf forráskódja megvan (mint pl. a cm fontok esetében [a nyilvánosan hozzáférhető fontoknak a teljesség igényével összeállított listája havonta olvasható a comp.fonts és a comp.text.tex newsgroupokban]), akkor újabb rendszer esetében elegendő a tfm fájlokat (Unix alatt ma már ezek is automatikusan generálódnak és a helyükre kerülnek) és a mf forráskódot elhelyezni, melyből a pk-fájlok automatikusan generálódnak.

PostScript fontok esetében a metrikus adatokat az afm (Adobe font metrics), a körvonalleírásokat pedig a pfa (printer font ascii) vagy pfb (printer font binary) fájlok tartalmazzák.

A TrueType fontokból vagy szintén a grafikus rendszer (M$ Windows ill. Mac OS), vagy pedig a Ghostscript közvetítésével nyerhetők bittérképek.

PS fontok esetén a legelterjedtebb és hagyományos 35 tagú alapkészlet (klónja) valamint néhány egyéb ingyen is kapható.

Minthogy a fontok és fontfájlok elnevezései igen tarka képet mutatnak (még egy gyártó is több különböző néven terjeszti azonos fontjait), a TeXesek általános szabványt dolgoztak ki a fontfájlok elnevezésére, melyet a fontname csomag tartalmaz. A jelenleg érvényes rendszer (v. 2.x) lényege, hogy a nyolc (case-insensitiv) karakterre korlátozott név első karaktere a gyártóra utal (p = Adobe, u = URW), a következő kettő a típusra (tm = Times, pl = Palatino), ezután jön a változat (r = regular, i = italic, o = oblique) jele, végül a kódkiosztásé (7t = hét bites cm, 8t = nyolc bites Cork).

Magában az installálásban a fontlist LaTeX-csomagnak van fő szerepe (CTAN: fonts/psfonts/tools/finst)!

TeX/LaTeX a LINUX-ban a teTeX

A mai LINUX rendszerekben a teTeX disztribúció a kurrens verzió 0.4 patchlevel 8, címe CTAN: systems/unix/teTeX használatos, mely a Karl Berry által karbantartott WEB2C implementáción (http://www.tug.org/web2c) alapszik: ez egy speciális (yacc és flex segítségével készített) PASCAL -> C fordítórendszer, és természetesen jól kihasználja a korszerű unixok nyújtotta lehetőségeket (1997 februárjában jelent meg a régóta várt 7.0-ás verzió CTAN: systems/unix/web2c).

Az installálás megkezdése előtt célszerű ellenőrizni, nincs-e valamilyen korábbi TeX-installáció a gépünkön (PATH, TEXINPUTS környezeti változók, stb…).

Még ha működő rendszerünk van, akkor is ajánlatos legalább az új európai (ec) fontokat, s az ezeket támogató új LaTeX verziót föltenni. Az ec fontok megléte a >mf ecrm1000 paranccsal ellenőrizhető.

A disztribúció összeállításakor az egyik legfőbb cél éppen az installálás megkönnyítése volt, és a szerző ezt a célt el is érte. A tudnivalók a distrib/INSTALL.bin (illetve kompilálni vágyók részére az INSTALL.src) fájlban olvashatók, illetve kicsit részletesebben a TETeXDOC.tex fájlban, mely installálás során a teTeX/texmf/doc/tetex könyvtárba kerül. Az ideiglenes installáló könyvtárban létre kell hozni a distrib alatti fát. A platformfüggetlen alapkészletet a distrib/base könyvtár két tar.gz-je tartalmazza. Ezután ki kell választani a processzorunknak megfelelő bináris csomagot (azaz általában distrib/binaries/i386-linux.tar.gz-t). A doc, fonts és goodies alkönyvtárak anyagából legalább fonts/ec-fonts.tar.gz szükséges a magyar szedéshez. A distrib/install.sh burokprogram ezután az installálás nagy részét levezényli, majd a texconfig confall parancsot kell kiadni.

Érdekességként megemlítjük, hogy a Linux Documentation Project (rövidítve LDP) keretében létrejött könyveket is LaTeX-ben írják (az LDP hivatalos honlapja a http://sunsite.unc.edu/LDP/ címen található).

A TeX rövid ismertetése

Elsőként azt a sima (plain) változatot ismertetjük, melyet még maga Knuth tervezett és írt le, s megléte bármely installáció esetén biztosra vehető.

A csomag tördelőprogramja, a tulajdonképpeni TeX, karakteres módban futó alkalmazás, melyet szokásos módon a tördelendő fájl nevével mint első és egyetlen paraméterrel hívunk meg.

Ha a fájlban a tördelési feladat végét nem jelöljük az \end vagy inkább a \bye paranccsal, akkor a TeX interaktív módba kerül és * prompttal kerülünk szembe. (ENTER-re válaszul azért elárulja, hogyan szabadulhatunk tőle meg békésen.) Így tehát a legegyszerűbb TeX-fájl:

Elso, ekezet nelkuli muvem.\bye
Természetesen az összes valaha elképzelt ékezettel elláthatjuk betűinket, mégpedig többféleképpen is.

Ha arra törekszünk, hogy a világ bármely pontján egyértelmű legyen, milyen ékezeteket szántunk betűinkre, és egyúttal a legbutább levelezőprogram sem tudjon bennük kárt tenni, akkor a hét leggyakoribb ékezettípus a bekszlesen kívül egyetlen nem-betű karakterből álló rövid parancsjellel tehető a betűkre, pl. \^ a háztető vagy kalap ékezet. Minthogy a parancsjelek vége egyértelmű, ezek után nem kötelező (de szabad) szóközt tenni. A három magyar ékezet a betű elé tett \' (acute accent, azaz éles ékezet), \" (német umlaut, azaz dupla pont) ill. \H (long Hungarian umlaut) parancsokkal hozható létre:

M\'asodik, nem \'ekezet n\'elk\"uli m\H uvem.\bye
Plain TeX-ben a magyar írásra az egyik lehetőség az, hogy ISO-Latin2-ben kódolt szövegünket az új ec fontokkal szedetjük. Ezek közül a cmr10-nek a 8 bites készletben ecrm1000 felel meg. Ha mást nem teszünk, akkor a kettős magyar ékezetek helyett az ISO-Latin1-ben az illető helyen lévő karaktereket kapjuk, azaz az alábbi program eredményeként azt kapjuk, hogy "Első ékezetes művem" (vagyis az ő betűn egy tilde (~), az ű betűn egy kalap/tető (^) van).
\font\tenrm=ecrm1000
\tenrm
Első ékezetes művem.
\bye
Ezen többféleképp segíthetünk. Az egyik lehetőség az, hogy a TeXen belül paranccsá tesszük ezt a négy karaktert (tehát az eddig ismertetetteken kívül létezhet olyan parancs is, mely egyetlen karakterből áll, amennyiben az ún. kategória-kódja 13!), méghozzá legyen jelentésük egyszerűen egyetlen, a megfelelő másik pozíción található magyar ékezetes karakter. Írjuk át a kategória kódokat!
\font\tenrm=ecrm1000
\tenrm
\catcode`\ű=13
\def ű{\char'266 }
\catcode`\Ű=13
\def Ű{\char'226 }
\catcode`\ő=13
\def ő{\char'256 }
\catcode`\Ő=13
\def Ő{\char'216 }
Első ékezetes művem.
\bye
A másik módszer az ő és ű betűk problémájának megoldására az lehet, ha például egy rövidke flex programmal kicseréljük ezt a négy karaktert a T1 kódolás szerint szükségesre (azaz elvégezzük az oktális 0373 -> 0266, 0333 -> 0226, 0325 -> 0216, 0365 -> 0256 cseréket).

%option noyywrap

%%

\325 {printf("\216"); }

\365 {printf("\256"); }

\333 {printf("\226"); }

\373 {printf("\266"); }

%%

main()

{

yylex();

}

Paraméterek

Egy szöveg tördelését számos paraméterrel befolyásolhatjuk: tükörméret (szélesség: \hsize, magasság: \vsize), sortávolság (\baselineskip), bekezdés mélysége (\parindent), bekezdések közötti extra távolság (\parskip) stb. Ezeket többféle mértékegységben adhatjuk meg, melyek mindegyikének két betűs a rövidítése (didot pont = dd, ciceró = cc, angol pont = pt, pica = pc, hüvelyk vagyis inch = in, valamint cm, mm és az igen apró sp. Részletesen lásd a LaTeX mintapéldában a fejezet végén). Európában és Magyarországon is a dd (=0,38 mm) és a ciceró (=12 dd) a leggyakrabban használt egységek.

Pl. a \parindent = 10 dd parancs (globálisan) tíz pontra állítja a bekezdés mélységét; az egyenlőségjel és a szóközök elhagyhatók még a mértékegység jele után is.

Vannak más típusú értékeket felvevő paraméterek is. Előjeles egész szám pl. \looseness: azt jelöli, hogy a kurrens bekezdés sorainak számát az ideálistól (vagyis a legszebb eredményt adótól) mennyivel kívánjuk eltéríteni. Értékét minden paragrafus elején visszaállítja a TeX az alapértelmezésre, ami - persze csak ha át nem állítjuk - nulla. (A paraméterek nagy többségének globálisan adhatunk értéket, azaz ha nem valamilyen környezetben történik az értékadás, akkor a kapott érték végig megmarad, a program magától nem változtat rajta.) A \year, \month és \day paraméterek indításkor átveszik az operációs rendszertől a kurrens értékeket; utána ezeket is megváltoztathatjuk. Bármely paraméter értékét kiszedethetjük a \the parancsnak a paraméter neve elé helyezésével:

Ezen írás az \the\year.\ évben készült,  s a sorok távolsága \the\baselineskip-nyi.
Az angolszász szedésben a mondatvégi pont után kissé nagyobb szóközt hagynak. Illendő hát mondat közepi pont után jelölni, hogy oda csak normális köz kell: erre szolgál a kontrol-szóköz, vagyis az a parancsjel, melyben a bekszlest szóköz vagy újsor karakter követi.

A \parindent és a \baselineskip lehetséges értékei között érdekes különbség van. A sortávolság esetében engedélyezhető bizonyos rugalmasság, azaz megadható, hogy fölfelé és lefelé mekkora eltérést engedélyezünk az alapértéktől.

Pl. \baselineskip 10dd plus 3.5 dd minus 4.99 dd
Ezzel a lehetőséggel könyvek szedésében nem szoktunk élni, hasznos azonban, ha például valamilyen megadott helyet kell adott mennyiségű szöveggel kitölteni egy plakáton.

Ilyen rugalmas távolságok még a \leftskip, a bekezdések minden sorára vonatkozó bal margó és párja, a \rightskip, s a bekezdések utolsó sorának jobbján kihagyandó távolság, a \parfillskip. Az előbbi kettő alapértéke nyilván nulla (pont), az utóbbi lehet nulla is, de lehet akármilyen nagy is. Erre a tetszőlegesen nyúló távolságra külön mértékegység van, a fil. A paraméter alapértéke tehát

\parfillskip = 0dd plus 1 fil
Végül van a paramétereknek egy különleges típusa, amelynek lista lehet az értéke, pl. az \everypar paranccsal meghatározhatjuk, milyen elemeket helyezzen el a TeX minden bekezdés elején: ezzel lehet a paragrafusok alakját egységesen módosítani, vagy éppen mindegyiket gondolatjellel kezdeni:
\everypar{-- }
Üres helyet nemcsak a paragrafusok szélein, hanem akárhol hagyhatunk. Vízszintes közt hagy \hskip rugalmas_mérték, függőlegeset pedig pl. \vskip 11dd plus 2dd minus 5dd. Ezek a spáciumok egyúttal alkalmas sor- illetve laptörési pontokul is szolgálnak, s ha éppen oda esik a töréspont, akkor a spácium elvész, hiszen nincs értelme sorok közötti vízszintes ill. lapok közötti függőleges spáciumnak.

Ha ezzel szemben olyan közt akarunk hagyni, melynél nem engedhető meg a törés - pl. a kihagyást jelölő három pont közökkel követi egymást, de nem választhatók el - akkor a \kern mérték parancs alkalmazható.

Új parancsok definiálása

A meghatározható új parancsok vagy makrók legegyszerűbb típusának nincsen argumentuma. Ilyen például a program nevét jelölő \TeX parancs, melyet a következő utasítás hozott létre:
\def\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX}
A \def parancs vezeti be a definíciót, utána az új parancsszó (vagy jel) következik, végül kapcsos zárójelek között a meghatározás. Az egyik újdonság az em mértékegység. Az említett abszolút egységeken kívül két relatív, az adott fonttól függő is rendelkezésünkre áll, melyet a betűtervező határoz meg: ex az x, vagyis a föl-le nyúló szárak és gömbölyületek nélküli betűk magassága, és em, (elvileg) az M betű szélessége. Gátlástalan lelkek e paramétereket a \fontdimen5\fontnév=mérték, illetve pl. \fontdimen6\sevenrm=9.7dd parancsokkal írhatják át. A valóságban, pl. a \tenrm (azaz cmr10, tíz angol pontos Knuth-féle computer modern antikva) esetében em a normál szóköz háromszorosa és kb. 10%-kal több az M betű szélességénél. Ha már a betűkkel kapcsolatos méretekről esett szó, a névleges törzsméret a cm (és a belőlük származó ec) fontok esetében a legalacsonyabb és a legmagasabb pont távolsága, azaz a kerek zárójelek teljes magasságával egyezik meg.

A másik újdonság a \lower mérték \hbox{vízszintes szedés} parancs, mely az adott dobozt lesüllyeszti (vagy negatív mérték esetén fölemeli). A relatív mértékegységek használatának előnye tehát, hogy egységes eredményt kapunk különböző betűtípusokban és méretekben is:

{\TeX\ \it\TeX\ \sevenrm\TeX\ \sevenbf\TeX\ \tt\TeX\ \fivebf\TeX}

A LaTeX rövid ismertetése

A LaTeX a TeX egy kiterjesztése, pontosabban egy TeX makrocsomag, mely alkalmas az egész dokumentum szerkezetének leírására is. Így LaTeX-ben elérhető, hogy a szerző művének csak logikai szerkezetével foglalkozzék, a vizuális megjelenés problémáival ne.

Számtalan különleges képességgel rendelkezik, ilyen például az automatikus sorszámozás, vagy az automatikus kereszthivatkozás készítés. A következőkben felvillantjuk a LaTeX néhány elemét.

LaTeX-fájlok szerkezete

A LaTeX-fájlok szerkezete a következő:

\documentclass[opciók]{osztály}

    bevezető rész (preambulum)

\begin{document}

    a dokumentum teste

\end{document}

Általában egy LaTeX-program első sorában a \documentclass parancs szerepel. Egy kivétel van, nevezetesen a \documentclass sor elé beírható bármely, a programunk által használt fájl, például grafika fájlja, stílusfájl, …. Ennek módja a filecontents környezet alkalmazása:

\begin{filecontents}{fájlnév}

    fájl tartalma

\end{filecontents}

A LaTeX látva e parancsot a fájl tartalmá-t átírja a fájlnév nevű fájlba néhány megjegyzéssorral együtt, amennyiben ilyen nevű fájl még nem létezik. (Ha létezik, nem csinál semmit). Így a dokumentum feldolgozásakor már a fájlnév nevű fájl is rendelkezésre fog állni. A filecontents környezet helyett a filecontents* használandó, ha nem akarjuk, hogy TeX megjegyzéssorok kerüljenek a fájlba (pl. egy grafikai fájl esetén ezt kell alkalmaznunk).

Térjünk vissza a \documentclass parancsra. Ebben a parancsban adjuk meg, hogy a LaTeX-dokumentum milyen dokumentumosztályba tartozzék (a LaTeX 2.09-ben az első sorban a \documentstyle parancs szerepelt, amit a LaTeX2e is megért, de ekkor az újabb verzió többlettudása nem használható). A LaTeX2e standard osztályai: article (cikkírásra szolgál, ennek verziói a proc, ami konferenciacikkekhez készült, a LaTeX programok dokumentálásához készült az ltxdoc, valamint az ltxguide, amit néhány ismertető használ), book (könyvírásra), report (beszámolókhoz), letter (levélíráshoz), slides (fóliákhoz). Például egy egyszerű cikk írását a

\documentclass{article}
sorral kezdhetjük. Felsoroljuk a parancsban használható standard opciókat, az alapértelmezést aláhúzzuk. Ezek vonatkozhatnak a papír méretére: a4paper (297x210mm), a5paper (210x148mm), b5paper (250x176mm), letterpaper (11x8.5in), legalpaper (14x8.5in), executivepaper (10.5x7.25in), vagy kifejezhetik a betűk méretét: 10pt, 11pt, 12pt, a lap fekvését: landscape, hogy a dokumentum egy- vagy kétoldalas, egy- vagy kéthasábos legyen: oneside, twosideonecolumn, twocolumn, hogy legyen-e külön címlap: titlepage, notitlepage. A matematikai képletek a fleqn opció esetén nem középre, hanem a bal margótól beljebb, azonos távolságra kerülnek, míg a leqno opció használatakor a képletek sorszámai a lap bal oldalára kerülnek, nem jobbra. Például egy egyszerű cikk írását külön címlappal, 11 pontos betűmérettel, A4-es papírmérettel a
\documentclass[titlepage,11pt,a4paper]{article}
sorral kezdhetjük.

Csomagok

Ezután következik a felhasznált csomagok felsorolása, erre a \usepackage parancs szolgál. Alakja:

\usepackage[opciók]{csomag neve}[release dátuma]

Néhány a gyakran használt csomagok közül: inputenc (=input encoding: az input karakterek kódolásának módja), fontenc (a belső kódolás kiválasztása), makeidx (indexek kezelésének megkönnyítése), showidx (az indexek megjelenítése az előfordulásuk helyén, a lap margóján), array, delarray, hhline, longtable, tabularx (táblázatok kezelését segítő csomagok), multicol (többhasábos szedés), graphics, graphicx (grafikai parancsok), color (színes dokumentum készítéséhez), mfnfss, psnfss (Metafont illetve PostScript fontok kezelése). Vannak csomagok, melyek a legtöbb disztribúcióban szerepelnek:  babel (többnyelvű LaTeX), amsmath (az Amerikai Matematikai Társaság AMS-TeX-verziójának LaTeX-re átírt változata).

Például ha azt akarjuk, hogy a babel programcsomagnak a LaTeX-et magyarító lehetőségeit használhassuk (pl. a Contents helyett Tartalom, Part helyett Rész, … legyen kiírva, a dátum automatikusan magyar formátumú legyen, stb …) a következőt kell megadni:

\usepackage[magyar]{babel}
Ha szeretnénk magyar ékezetes betűket használni az inputban (pl. az olvashatatlan t\'{\i}zb\H{o}l, esetleg a t\'\i zb\H ol karaktersorozatok helyett azt írnánk inkább, hogy tízből), és a UNIX gépek által ismert ISO-Latin2 (azaz az ISO-8859-2), vagy a WINDOWS szabványos magyar (azaz CE jelű, közép-európai ) betűkészletét használnánk, akkor hívjuk meg az inputot kódoló inputenc csomagot:
\usepackage[latin2]{inputenc}
Ez a parancs akkor is jó, ha LINUX alatt csak a ISO-Latin1-es karakterkészlet áll rendelkezésünkre, vagy ha WINDOWS alatt a nyugat-európai betűkészletet használtuk. E karakterkészletek és az ISO-Latin2-es, közép-európaiak a magyarban használt betűket tekintve csak 4 helyen térnek el: a ISO-Latin2 ő, Ő , ű és Ű betűi helyén a ISO-Latin1-ben ő, Ő, ű illetve Ű jelenik meg (hullámos o, kalapos u), mint azt már korábban is említettük. Így ezeket a betűket használva a fenti parancs után a ISO-Latin1-ben írt szöveg is helyesen kódolódik.

A belső kódolásban a kiterjesztett T1 (Cork) kódrendszer használatához a

\usepackage[latin2]{inputenc}
parancsot kell megadni.

A \documentclass és a \usepackage parancsok után további, az egész dokumentumra vonatkozó parancsok adhatók ki. Itt szokás egyes méreteket (pl.: margókat) átállítani, új parancsokat definiálni, a cikk címét, szerzőjét, a dátumot … megadni. Például:

\documentclass[10pt,a4paper]{article}
%
\usepackage{t1enc}
\usepackage[latin2]{inputenc}
\usepackage[magyar]{babel}
%
\title{\LaTeX\ teljesen kezdőknek}
\author{Szerző János}
\date{1997. március 30.}


A dokumentum teste

Ez után következik maga a dokumentum, ami a \begin{document} és az \end{document} parancsok közti része a fájlnak. Logikailag három részre oszlik, az első részben a cím, szerző, dátum, tartalomjegyzék, … kiírását szabályozzuk, a középrészbe kerül maga a mű, míg a harmadik részben gondoskodunk az indexek, irodalmi hivatkozások, … kiíratásáról. Például az előbb megadott preambulum után cikkünk a következő sorokkal folytatódhat:
\begin{document}
\maketitle


A dokumentum fejezetekre osztása

A fejezetek hierarchiájában az alábbi szintek adhatók meg: \part, \chapter (article esetén nem használható), \section, \subsection, \subsubsection, \paragraph, \subparagraph. (A letter osztályban egyik fenti parancs sem használható.) Ezek automatikus számozása előre adott módon történik, de átprogramozható. A sorszám elnyomása a címben a parancs után tett * karakterrel érhető el a legegyszerűbben. Példa:
 \documentclass{article}
     ...
 \begin{document}
 \section{Első fejezet címe}
     ...
   \subsection*{...}
       ...
      \subsubsection*{...}
         ...
 \section{...}
     ...
 \end{document}
Nagyobb dokumentumokat érdemes több külön fájlba írni, és a fődokumentumba csak a fájlok neveit írni. Erre az \include parancs szolgál. Ha az egész dokumentumnak egy részét akarjuk csak újrafordítani, használjuk a \includeonly parancsot. Az alábbi példában szereplő könyv 4 fejezetből áll, és most a harmadikat fordítjuk le. A fordítás a hivatkozások, indexek, oldalszámozás … elkészítése miatt a többi fejezeten is végighalad.
 \documentclass{book}
    \includeonly{fejezet3}
 \begin{document}
    \include{fejezet1}
    \include{fejezet2}
    \include{fejezet3}
    \include{fejezet4}
 \end{document}

Táblázatok

Táblázatok és mátrixok készítésére használható a
\begin{tabular}[pozíció]{oszlopok}
        a táblázat sorai
\end{tabular}
illetve
\begin{array}[pozíció]{oszlopok}
        a mátrix sorai
\end{array}
környezet. A pozíció opcionális értéke t (top) ill. b (bottom) lehet, ekkor a táblázat felső ill. alsó sora lesz illesztve a környezetéhez, egyébként pedig a középső. Az oszlopok az l (left), r (right), c (centered), p {szélesség}, | vagy || jelek sorozata lehet. Az l, r, c azt mondja meg, hogy a táblázat adott oszlopa balra, jobbra ill. középre legyen igazítva. A p{szélesség} azt írja le, hogy a szöveg milyen széles sorokba legyen szedve, a | és || pedig a függőleges elválasztó vonalak számát adja meg. Például az alábbi egyszerű táblázat az utána megadott kóddal kapható meg:
 
Bevétel: 100
Kiadás: 100000
\begin{tabular}{lr}
   Bevétel: & 100   \\
   Kiadás: & 100000
\end{tabular}

Kereszthivatkozások

Egy hely címkével való megjelölésére a \label{címke} parancs szolgál. E címké-vel megjelölt hely (pl. fejezet, képlet, ábra, táblázat, ...) sorszámát a \ref{címke} paranccsal lehet kiíratni, míg a hely oldalszámát a \pageref{címke} paranccsal. Ha egy szövegben kereszthivatkozások vannak, akkor kétszer kell fordítani (azaz kétszer kell futtatni a latex programot).

Irodalomjegyzék, hivatkozások

Könyvek, cikkek írásakor nagyon gyakran előfordul, hogy valamely más könyvre, cikkre, monográfiára stb. kell hivatkoznunk. Ennek a szokásos módja a könyv, cikk végén elhelyezett irodalomjegyzék ill. hivatkozás lista. Ilyen listát a következő formában tudunk megadni, közvetlenül a \end{document} utasítás előtt.
\begin{thebibliography}{példa_név}
        \bibitem[név]{címke} hivatkozott mű
        ..........
 \end{thebibliography}
Az opcionális név paraméterrel lehet konkrét azonosítót megadni, pl. [Lamport_1994], ellenkező esetben a mű automatikus sorszámot kap. A LaTeX szövegben a \cite{címke} utasítással hivatkozhatunk a műre. A hivatkozáslista neve book osztály esetén Irodalomjegyzék, article esetén Hivatkozások. (Lásd a fejezet végén szereplő LaTeX példát.)

A szerencsétlen szerzők általában több művet is írnak azonos témában, melyek hivatkozásai között igen nagy az átfedés. (Gyerekkori barátok, főnökök, a cikk referensének műveire illik hivatkozni.) A mezei megoldás az, hogy a hivatkozáslistánkat egyik LaTeX fájlból átmásoljuk egy másikba. A probléma ezzel az, hogy olyan művek is szerepelnek majd a listánkban amire nem is hivatkozunk. Egy másik kellemetlenség akkor adódik, ha két kiadó más-más formátumot ír elő a hivatkozásokra. Ezen próbál segíteni a BIBTeX program.

Használatához létre kell hozni egy szöveges adatbázist melyben a következő példához hasonló elemek vannak:

@BOOK{Kobayashi_I,
  author = {Kobayashi, Shoshichi and Nomizu, Katsumi},
  title = {Foundations of Differential Geometry},
  year = 1963,
  volume = {I},
  publisher = {Wiley Interscience, New York - London}
}
Az adatokat tartalmazó fájl szokásos kiterjesztése .bib. A hivatkozás a korábban említett módon történik pl. \cite{Kobayashi_I}. A thebibliography környezet helyett a
\bibliography{adatbázis_fájl_név}
\bibliographystyle{stílus}
parancsokat kell használnunk. A stílus lehet plain, unsrt, alpha ill. a kiadó vagy magunk által készített stílus. A fordításhoz először ki kell adni a >latex file, majd a >bibtex file és végül újra a >latex file parancsot. Az első parancs hatására létrejön a file.aux fájl, ami a hivatkozási információkat tartalmazza. Ezt és az adatbázist felhasználva a bibtex létrehozza a file.bbl-t ami már a korábban említett formában hordozza a hivatkozáslistát. Végül a harmadik utasítással kerül a dvi fájlba a lista. Bővebben lásd a BIBTeX dokumentációt.