L A TEX KÖZÉPHALADÓKNAK BERTÓK CSANÁD 2012 bertok.csanad@gmail.com 1
TARTALOMJEGYZÉK TARTALOMJEGYZÉK 2 1. BEVEZETÉS 3 2. PARANCSOK, KÖRNYEZETEK ELKÉSZÍTÉSE, ÚJRADEFINIÁLÁSA 3 2.1. A NEWCOMMAND ÉS RENEWCOMMAND UTASÍTÁSOK............... 3 2.2. A NEWENVIRONMENT ÉS RENEWENVIRONMENT UTASÍTÁSOK........... 6 3. FORMASÁGOK A L A TEX VILÁGÁBAN 8 3.1. LINKEK BEILLESZTÉSE, HIVATKOZÁSOK....................... 8 3.2. TARTALOMJEGYZÉK LÉTREHOZÁSA......................... 8 3.3. FEJEZETEK, ALFEJEZETEK ELKÉSZÍTÉSE....................... 9 3.4. LÁBJEGYZETEK, SZÉLJEGYZETEK.......................... 10 3.5. SZÖVEGDOBOZOK, MINIOLDALAK BESZÚRÁSA.................. 11 3.6. HOGYAN SZÍNEZZÜK A MEGÍRT SZÖVEGET?..................... 13 3.7. DOKUMENTUMOK ELHELYEZÉSE A MŰVÜNKBEN.................. 14 4. MATEMATIKA KÖZÉPHALADÓKNAK 15 4.1. AZ ALIGN VS EQNARRAY VITA............................ 15 4.2. KÜLÖNBÖZŐ SZÁMTÁBLÁZATOK HATÉKONY BEILLESZTÉSE............ 17 4.3. TIPPEK, TRÜKKÖK, RÖVIDEBB PARANCSOK..................... 18 5. FÜGGELÉK 21 2
1. BEVEZETÉS A kézikönyv, mint címéből is kitűnik, túlmutat az alapszintű L A TEX felhasználói ismeretek tárgyalásán, így feltételezi, hogy az olvasó képes használni az előző kötetben lévő parancsokat, beállításokat. Emiatt több helyen teszek majd rájuk utalásokat, így mindenképp ajánlott elsőként alaposan elsajátítani az abban szereplő tudást, mielőtt belevágnánk ennek a könyvnek a tanulmányozásába. Természetesen ezzel a művel sem célom, hogy az egész L A TEX dokumentációt magyar nyelvre fordítva megosszam az olvasóközönséggel, mindössze annyit kívánok elérni, hogy a leggyakrabban előforduló problémákat immár tényleg könnyedén, szinte kompromisszumok nélkül orvosolni lehessen (hisz az előző könyvben néhol kénytelen voltam több helyen is megkötni a saját kezem, mivel úgy éreztem, hogy egy alapfokú beállításokat taglaló dokumentumnak nem feladata az adott parancs/környezet részletesebb konfigurálásának ismertetése). Az olvasó a könyv végére méltán tekinthet magára haladó szintű felhasználóként, ám ahhoz, hogy igazán jól tudjuk kezelni a programot, a legfontosabb a saját stílus kialakítása (nem pedig az, hogy minden létező parancsot megtanuljunk kezelni), illetve a hatékony problémamegoldás elsajátítása, mellyel még az adott utasítás ismeretének hiánya esetén is képesek vagyunk megoldani kisebb-nagyobb kerülőkkel a felbukkanó feladatot. 2. PARANCSOK, KÖRNYEZETEK ELKÉSZÍTÉSE, ÚJRADEFINIÁLÁSA Ebben a fejezetben arról lesz szó, hogy hogyan tudunk saját magunk is elkészíteni számunkra szükséges, a gépelést, szerkesztést megkönnyítő utasításokat, vagy úgynevezett környezeteket (ezek azok a struktúrák, melyeket a \begin{}... \end{} szavak fognak közre). A szintaxisuk, mint az eddig már megszokható volt, abszolút logikus, így elsajátításuk sem okoz különösebb problémát. 2.1. A NEWCOMMAND ÉS RENEWCOMMAND UTASÍTÁSOK Elsőként az egyszerű parancsokkal fogunk foglalkozni. A newcommand egy teljesen újat hoz létre, míg a renewcommand egy már meglévő parancsot értelmez újra. Tekintsük át, hogy formailag, hogyan is néznek ki ezek: - \newcommand{\név}[argumentumok száma][opcionális argumentum]{definíció} - A név egy általunk kitalált szó lehet, mellyel a későbbiekben hivatkozni tudunk majd a parancsunkra. Fontos, hogy ékezetet, illetve speciális karaktert lehetőleg ne használjuk, illetve, ahogy azt már eddig megszokhattuk, egy visszafelé dőlő perjellel kell kezdeni. - Az argumentumok száma egy nem kötelezően megadott, 1-9 közötti szám. Ha teljesen kihagyjuk, akkor a program nullának veszi azt. Mivel a funkcióját sokkal könnyebb megérteni egy példán keresztül, mint leírni, így erre a későbbiekben térünk vissza. - Az opcionális argumentum egy szintén nem kötelező beállítás, mely azt mondja meg, hogy amennyiben nem adunk meg az utasításnak argumentumot, ám a newcommand esetén jeleztük, hogy oda mégis kéne valami, úgy az előre beállítottat használja. - Végül a def mondja meg, hogy konkrétan mit is hajtson végre az adott parancs. - \renewcommand{\név}[argumentumok száma][opcionális argumentum]{definíció} - A beállítások teljsen ugyanúgy zajlanak, mint fentebb, azzal az egy különbséggel, hogy ezt egy már létező parancs módosításához használhatjuk csak fel. 3
Ahhoz, hogy jobban megértsük a használat mikéntjét, álljon itt néhány példa: Feladat: a könyv címét (L A TEX KÖZÉPHALADÓKNAK) szeretnénk kiírni a \cim parancs segítségével. Megoldás: ez egy olyan utasítás lesz, melyhez nem szükségesek argumentumok, egyszerűen néhány formázási parancs van benne: \newcommand{\cim}{\textsc{\textbf{\latex\hspace{1mm} középhaladóknak}}} Az első kapcsos zárójelben megadtuk, hogy a \cim parancs beírásával fogjuk behozni az adott utasítást, míg a második zárójelben megmondtuk, hogy a szövegünk kiskapitális, illetve félkövér legyen. A programban előre be van építve a L A TEX logó, melyet a \LaTeX segítségével lehet kiírni, ám gyári beállításon nem tesz utána automatikusan szóközt, ezért helyeztünk el utána a \hspace{1mm} segítségével 1 mm üres helyet. Fontos megjegyezni, hogy a newcommand utasítást nem csak a preambulumban lehet elhelyezni, hanem a dokumentum tetszőleges részén, vigyázva arra, hogy még azelőtt tegyük ezt meg, mielőtt a megadott utasítást használni szeretnénk. Ha begépeltük a kívánt helyre a fenti sort, úgy már alkalmazhatjuk is, például a következő módon: A könyv címe: \cim A könyv címe: L A TEX KÖZÉPHALADÓKNAK Feladat: szeretnénk az általunk begépelt szöveget félkövér, dőlt és aláhúzott betűtípussal viszontlátni a \sajatforma{szövegünk} parancs begépelése után. Megoldás: itt már használnunk kell egy argumentumot, mely nem más, mint az általunk begépelt szöveg. Így tegyük most az alábbiakat: \newcommand{\sajatforma}[1]{\textbf{\textit{\underline{#1}}}} Itt a használni kívánt név utáni szögletes zárójelben megadtuk, hogy egy argumentumot fogunk használni, mely majd a beírt szövegünk lesz. A definícióban látható, hogy először beállítottuk, hogy félkövér, dőlt, illetve aláhúzott legyen majd amit beírunk, végül a konkrét szavak, mondatok helyére #1-et írva, megmondtuk, hogy oda majd azt illessze be a program, amit mi gépelünk be később. A használatára itt egy szemléletes példa: \sajatforma{ezt szeretnénk a korábban megadott módon viszontlátni} Ezt szeretnénk a korábban megadott módon viszontlátni Feladat: a cos 2 x + sin 2 x = 1 azonosságot írassuk ki a \trigpit-el. Megoldás: ez ismét egy argumentum nélkül megoldható feladat lesz, ám figyelni kell arra, hogy ahhoz, hogy ezt végrehajthassuk, be kell lépnünk matematikai módba, így jó választásnak tűnhetne az alábbi megoldás: \newcommand{\trigpit}{$\cos^2 x + \sin^2 x = 1$} Ez látszólag remek ötletnek látszik, hiszen beléptünk matematikai módba, ki is léptünk belőle, mégis van vele egy nagy probléma. Amennyiben már eleve matematikai módban voltunk, úgy a fentebbi parancsban az első $ kilép abból, majd a második $ ismét belép, tehát épp ellentétes hatást fogunk elérni, a program hibát jelez és a dokumentumunk nem fog megfelelően kinézni, rosszabb esetben el sem fog készülni. Ahhoz, hogy ezt kikerüljük, a dollárjelek helyett használjuk a \ensuremath{} operátort, mely automatikusan figyeli, hogy épp hol vagyunk és ennek megfelelően állítgatja a szükséges módokat: \newcommand{\trigpit}{\ensuremath{\cos^2 x + \sin^2 x = 1}} 4
Ezt követően akár saját magunk is kipróbálhatjuk, hogy fog kinézni az elkészült utasításunk: Először nézzük alapesetben : \trigpit. Majd úgy, hogy matematikai módban vagyunk: $\trigpit$. Először nézzük alapesetben : cos 2 x + sin 2 x = 1. Majd úgy, hogy matematikai módban vagyunk: cos 2 x + sin 2 x = 1. Feladat: az általunk begépelt matematikai képletet és az utána következő dőltbetűs zárójeles kommentet írjuk ki a \kepletkomment{képlet}{komment} utasítással. Megoldás: ez egy olyan feladat, amihez már két argumentumra van szükségünk. Az első a szükséges képlet lesz, míg a második a zárójeles komment. Így az alábbiakat kell tennünk (figyelve, hogy ismét használjuk a \ensuremath utasítást: \newcommand{\kepletkomment}[2]{\ensuremath{#1}\textit{ (#2)}} Mivel a képlet helyére az #1-et írtuk, míg a dőlt hozzászóláshoz a #2-t, így figyeljünk arra, hogy a parancsunkban is ebben a sorrendben hivatkozzunk rájuk: A megfelelő jelölések bevezetésével: \kepletkomment{a^2+b^2=c^2}{pitagorasz tétele} A megfelelő jelölések bevezetésével: a 2 + b 2 = c 2 (Pitagorasz tétele) Feladat: utolsó példánkban állítsuk be, hogy a bevitt szöveget olyan formázással készítse el, amit megadunk, ám ha semmit nem írunk be neki, akkor legyen csak dőltbetűs. Megoldás: jelen esetben két argumentumról lesz szó, melyek közül az első opcionális. Kiemelném, hogy a program csak és kizárólag az első argumentumot tudja opcionálisként kezelni, így figyeljünk a helyes szintaxisra. A L A TEX 3. verziójában lehetőség lesz tetszőleges számú argumentumnak megadni, hogy kötelező legyen-e, avagy sem, ám ez jelenleg viszonylag nehezen megvalósítható (fel kell telepíteni a fejlesztői és tesztfájlokat, melyek még nem feltétlenül stabilak, így okozhatnak kisebb-nagyobb fennakadásokat). \newcommand{\formazott}[2][itshape]{\begin{#1}#2\end{#1}} Miután megadtuk a nevet és a kívánt argumentumszámot, beállítottuk, hogy ha nem adunk meg semmit formázási utasításnak, akkor a dőltbetűs írásmódot (\begin{itshape}... \end{itshape}) fogja alkalmazni. Ez a használatban így néz ki (figyeljük meg a zárójelek típusát): Először nem adunk meg neki külön beállítást: \formazott{ekkor így fog kinézni a szövegünk.} Először nem adunk meg neki külön beállítást: ekkor így fog kinézni a szövegünk. Most viszont dőlt helyett kiskapitálist szeretnénk: \formazott[scshape]{ekkor ezt látjuk.} Most viszont dőlt helyett kiskapitálist szeretnénk: EKKOR EZT LÁTJUK. A renewcommand használatára, tekintve, hogy teljesen ugyanaz, mint a newcommand-é, nem írnék külön példát, ha ezt alkalmazzuk, egyedül arra figyeljünk, hogy a \renewcommand{\név}[argumentumok száma][opcionális argumentum]{definíció} Szintaxisban a név helyére egy már létező parancsot helyezzünk el (pl. a korábbiakban használt \trigpit, \kepletkomment,... ). Lényeges azonban, hogy így az előre beépített utasításokat is meg tudjuk változtatni, ám, tekintve, hogy ehhez ismernünk kell az adott parancs fejlesztők által megadott definícióját, így kevés kivételtől eltekintve ezt igen ritkán szokták használni (ilyen kivétel például az előző könyvből is ismert felsorolás jelének újradefiniálása is). 5
2.2. A NEWENVIRONMENT ÉS RENEWENVIRONMENT UTASÍTÁSOK Ebben az alfejezetben a környezetek megadását fogjuk megismerni. Az általános szintaxis szinte teljes egészében megegyezik a korábban látottakkal, így itt kevesebb példát is fog találni az olvasó. Mivel a newenvironment és a renewenvirontment használata teljesen ugyanaz, így az utóbbiról nem kívánok szót ejteni, a renewcommand esetében leírtak érvényben maradnak itt is. A helyes használat során az alábbi sorrendet kell betartanunk: - \newenvironment{név}[argumentumok száma][opcionális argumentum]{előkód}{utókód} - \renewenvironment{név}[argumentumok száma][opcionális argumentum]{előkód}{utókód} - A név, argumentumok száma, opcionális argumentum majdnem ugyanúgy használható, mint a newcommand esetén. Az egyetlen különbség, hogy itt a név elé nem kell perjelet tennünk. - Az előkód megmondja, hogy mi hajtódjon végre a \begin{név} kiadása után, míg az utókód azért felelős, hogy mi történjen, miután lezártuk az utasítást a \end{név} segítségével. - Nagyon fontos megjegyezni, hogy egy tervezési sajátosság miatt az utókódban közvetlenül nem tudunk elhelyezni az argumentumokra hivatkozásokat (#1, #2,... ). Erre szintén a L A TEX 3. verziójában lesz lehetőségünk az xparse csomag felhasználásával (melyet akár most is használhatunk, ám ahhoz, hogy hibaüzenet helyett működő dokumentumot tudjunk készíteni igen sok beállítás szükséges). Lássunk egy-két példát a jobb érthetőség kedvéért: Feladat: írjunk olyan kódot, ami a kezdő és végpont közötti szöveget félkövérre és kiskapitálisra alakítja! Megoldás: meglepő módon most nem lesz szükségünk egyetlen argumentumra sem, hiszen ennek a szerepét most a kezdő- és végpont közötti hely fogja felváltani. Előkód Utókód {}}{{}}{ \newenvironment{ujformazas}{\begin{bfseries}\begin{textsc}}{\end{textsc}\end{bfseries}} Látható, hogy az előkódban megadtuk, hogy az utasítás nyisson meg egy fékövér és kiskapitális környezetet, majd az utókódban lezártuk azt. Figyeljük meg a fentebb szereplő parancsok sorrendjét: félkövér kiskapitális; kiskapitális félkövér. Ez azért van, mert a L A TEX úgy van beállítva, hogy mindig a legutoljára kiadott utasítást kell legelőször lezárni. Nézzük meg ennek a működését a gyakorlatban: \begin{ujformazas} Ha mindent jól csináltunk, akkor az ide írt szöveg megfelelően fog kinézni. \end{ujformazas} HA MINDENT JÓL CSINÁLTUNK, AKKOR AZ IDE ÍRT SZÖVEG MEGFELELŐEN FOG KINÉZNI. Feladat: készítsünk el egy olyan környezetet, mely szögletes zárójelben lévő, középre zárt, képaláírással rendelkező, általunk megadott méretű táblázatokat hoz létre. Megoldás: ez egy klasszikus példája annak, hogy miért érdemes létrehoznunk saját környezeteket. Amennyiben a művünkben több helyen is szükségünk van arra, hogy ilyeneket megjelenítsünk, úgy ez rengeteg munkával jár, így sokkal könnyebb dolgunk van, abban az esetben, ha ezt előre megadjuk egy környezetként. A feladat összetettsége révén nézzük meg először, hogy mit kéne belesűrítenünk a parancsunkba: 6
\begin{table}[ht] \centering $\left[ \begin{tabular}{*3c} 1&2&3 4&5&6 7&8&9 \end{tabular} \right]$ \caption{első táblázatunk} \end{table} A keret megkezdése, elhelyezési paraméterek A lap közepén helyezkedjen el Belépünk matematikai módba, zárójel megadása Elkezdjük magát a táblázatot (*3c: három, középre zárt szövegű oszlop) 1. sor 2.sor 3.sor A táblázat vége Kilépünk a matematikai módból, zárójel megadása Táblázat alá írt szöveg Befejezzük a keretet 1 2 3 4 5 6 7 8 9 1. táblázat. Első táblázatunk Látható, hogy ezt igen nehézkes lenne minden egyes alkalommal begépelni, így nézzük meg, hogyan tudjuk megoldani ezt egy új környezettel: \newenvironment{tablazat}[2]{\pushqed{#2}\begin{table}[ht]\centering$\left[\begin{tabular}{*#1c}} {\end{tabular}\right]$\caption{\popqed}\end{table}} Ez a hosszú parancs lényegében a néhány sorral fentebbi utasításkészlet majdnem szó szerinti beleírása a newenvironment megfelelő helyére. A \begin{tabular}{*#1c}} adja meg, hogy hány oszlopunk legyen majd. Az egyetlen dolog, ami nem egyértelmű, a \pushqed{#2} lehet. Mint korábban említettem, egy fejlesztési sajátosság miatt az utókódban nem lehet elhelyezni argumentumhivatkozásokat, viszont, látható, hogy nekünk a \caption{} miatt szükségünk lenne erre. Így ez egy kerülőút ahhoz, hogy ezt meg tudjuk csinálni. A \pushqed{#2} eltárolja a #2 argumentumot, majd a megfelelő helyen a \popqed visszaadja azt, így érve el a kívánt hatást. Amint begépeltük a fenti parancsot, ki is próbálhatjuk: \begin{tablazat}{4}{működik?} 1&2&3&4 5&6&7&8 9&10&11&12 \end{tablazat} Beállítjuk, hogy 4 oszlop legyen, megadjuk az aláírást 1. sor 2. sor 3.sor Befejezzük a táblázatot 1 2 3 4 5 6 7 8 9 10 11 12 2. táblázat. Működik? Mint az érzékelhető, lényegesen egyszerűbb dolgunk van ezek után, ha létre szeretnénk hozni ilyen objektumokat. Tekintve, hogy szinte bármit szabadon meg tudunk határozni, így ez az eljárás lényegesen megkönnyítheti a dokumentumunk elkészítését. 7
3. FORMASÁGOK A L A TEX VILÁGÁBAN Ez az első ránézésre kissé összezsúfoltnak tűnő fejezet hivatott megismertetni a kedves olvasót a kezdő szinten túlmutató formázási parancsokkal. Tekintve, hogy ezek viszonylag rövid, mindössze néhány parancsból álló utasítások, úgy döntöttem, hogy áttekinthetőbb, ha külön-külön fejezetek helyett inkább alfejezetekbe gyűjtve tárgyalom őket. 3.1. LINKEK BEILLESZTÉSE, HIVATKOZÁSOK Mint az első könyvből már ismerős lehet, ahhoz, hogy hivatkozásokat helyezhessünk el a dokumentumunkban egy külön csomagot kell használnunk: \usepackage[unicode]{hyperref}. Ezt a sort elhelyezve a preambulumban már hozzáférhetünk a benne lévő utasításokhoz, melyek közül a legfontosabbakat ismertetném: - \url{link címe}: a zárójelbe beírt linket megjeleníti a dokumentben kattintható formátumban. - \href{link címe}{választott név}: az általunk választott nevet helyezi el a dokumentumban, melyre rákattintva az adott link jelenik meg. - \href{mailto:e-mail cím}{választott név}: teljesen megegyezik az előzővel, a különbség annyi, hogy ez megnyitja az alapértelmezésként beállított üzenetküldő klienst, hogy e-mailt küldjön a megadott címre. Ami még nagy előnye a csomagnak, hogy a tartalomjegyzéket, egyenletre, képre, táblázatokra való hivatkozásokat automatikusan kattinthatóvá alakítja, nagyban megkönnyítve ezzel a dokumentumban való navigálást. Hátránya viszont, hogy néha nem pontosan oda ugrik, ahova szeretnénk. Ezt kikerülendő, célszerű a megfelelő helyeken kiadni a \phantomsection utasítást, mely létrehoz egy ugrópontot a program számára. Erről még a későbbiekben fogok szót ejteni, így itt nem kívánom részletezni ezt. 3.2. TARTALOMJEGYZÉK LÉTREHOZÁSA Amennyiben szeretnénk a készülő dokumentumunknak tartalomjegyzéket, úgy nincs más dolgunk, mint elsőként a preambulumban meghatározni a mélységét a \setcounter{tocdepth}{szám} utasítással, ahol az 1 jelenti azt, hogy csak a fejezetcímek jelennek majd meg, a 2 a fejezet-alfejezet párost jelenti és így haladunk egyre lejjebb. Amint ezzel készen vagyunk, úgy az alkotásunk szövegtörzsébe helyezzük el a kívánt helyre az alábbi parancsokat: \tableofcontents \phantomsection \addcontentsline{\toc}{section}{tartalomjegyzék} Itt az első sor mondja meg a programnak, hogy illessze be a tartalomjegyzéket a megadott helyre. A második sor csak akkor szükséges, amennyiben használjuk az előző alfejezetben említett hyperref csomagot. Ekkor elhelyez egy hivatkozási pontot erre az oldalra. A harmadik sor szintén opcionális, mindössze annyit tesz, hogy hozzáadja a tartalomjegyzékhez magát a Tartalomjegyzék szót, méghozzá úgy, mint egy fejezetet. Természetesen, amennyiben ezt a sort nem írjuk bele, úgy fölösleges a \phantomsection utasítás is, hiszen az magára a Tartalomjegyzék szóra reagál. Amennyiben ábrák, táblázatok is szerepelnek a művünkben, melyeket szeretnénk viszontlátni a jegyzékünkben, úgy az utolsó sor után írjuk be a \listoffigures, illetve \listoftables parancsokat. Az oldal kinézetét többféleképp is meg lehet változtatni, ám tekintve, hogy a L A TEX, alapbeállításon igen szép munkát végez, így jelen könyvben csak a cím formátumának átalakítását mutatom meg. 8
Ehhez először külön kell választani azt a két esetet, amikor használunk elválasztási csomagot (\usepackage[nyelv]{babel}), avagy nem. Mivel általában ez mindig be van kapcsolva, így csak ezzel az esettel foglalkozunk most. Illesszük be a preambulumba az alábbi utasítások közül azokat, melyek szükségesek számunkra: \addto\captionsmagyar{\renewcommand{\contentsname}{kívánt név megfelelő formázással}} \addto\captionsmagyar{\renewcommand{\listfigurename}{kívánt név megfelelő formázással}} \addto\captionsmagyar{\renewcommand{\listtablename}{kívánt név megfelelő formázással}} Az első sor a Tartalomjegyzék, a második az Ábrák jegyzéke, míg a harmadik a Táblázatok jegyzéke szavakat változtatja meg. Itt a captionsmagyar szót cseréljük le arra, amilyen nyelvre be van állítva az elválasztás (pl. captionsenglish). Az utolsó kapcsos zárójelben alkalmazhatunk (majdnem) tetszőleges számú szövegformázást, így ha nagyméretű, félkövér, kiskapitális betűtípussal szeretnénk a tartalomjegyzék nevét Fejezetek listája -ra változtatni, akkor ide kerüljön \large{\textbf{\textsc{fejezetek listája}}}. Az utolsó dolog, amiről szót ejtenék az a korábban is szereplő \addcontentsline parancs. Ezt bárhol használhatjuk, ahol csak valamit hozzá szeretnénk adni a jegyzékünkhöz. A helyes szintaxis az alábbiak szerint néz ki: - \addcontentsline{hely}{mélység}{név}, ahol: - A hely segítségével adhatjuk meg, hogy hova illessze be az adott objektumot. Ez lehet: - toc: ilyenkor a fejezetek közé lesz elhelyezve. - lof: ekkor az ábrák közé. - lot: végül pedig a táblázatok közé. - A mélység adja meg, hogy miként tüntesse fel azt a tartalomjegyzékben. Ez lehet többek között: - section: ekkor fejezetnek fogja tekinteni a bejegyzést. - subsection: ekkor alfejezetnek. - chapter: ekkor könyvfejezetnek (csak könyvek esetén működik). - A név pedig az a kívánt szó/kifejezés, amit be szeretnénk illeszteni. Szövegformázást itt is lehet alkalmazni, így nem kell attól félnünk, hogy stílusát tekintve ki fog lógni a többi bejegyzés közül. 3.3. FEJEZETEK, ALFEJEZETEK ELKÉSZÍTÉSE A L A TEX segítségével fejezeteket létrehozni művünkben kimondottan egyszerű. Ahhoz, hogy így tegyünk, egyszerűen adjuk ki a dokumentumban a kívánt helyre az alábbi utasítást: \phantomsection \section{név} Ahol értelemszerűen a név a tartalomjegyzékben és az irományban viszontlátni óhajtott cím. Mint korábban is említettem már, a \phantomsection utasítást csak akkor szükséges kiadni, ha használjuk a hyperref csomagot. Könyvfejezetek, alfejezetek, al-alfejezetek kezdése a fentivel teljesen analóg módon történik, mindössze a section kifejezést kell lecserélnünk a chapter, subsection, subsubsection szavak valamelyikére. A fejezetcímben használhatunk szövegformázási beállításokat, melyek egy része (a méretezéstől eltekintve) a tartalomjegyzékben is megjelenik. Így, ha egy adott alfejezetet kiskapitális és félkövér betűvel szeretnénk látni, mind a jegyzékünkben, mind a dokumentumtörzsben, úgy használjuk az alábbi utasítást: 9
\subsection{\textbf{\textsc{alfejezet címe}}} Hasonlóan lehet színezni is, ám ennek mikéntjére a megfelelő helyen még visszatérek. Végül nézzük meg, hogyan lehet a renewcommand segítségével a preambulumban befolyásolni a különböző megjelenési beállításokat: \makeatletter \renewcommand{egység neve}{\@startsection{típus}{mélység száma}{behúzás}{előtte}{utána}{stílus}} \makeatother Az első sor egyedül arra való, hogy a @ jel használatát engedélyezi a beállításokban (az úgynevezett makrók szerkesztése a L A TEX-ben csak így lehetséges), míg az utolsó sor ismét letiltja ezt, hogy később ne legyen fennakadás belőle. A második sorból a renewcommand utasítást már ismerjük, a többi beállítási lehetőséget pedig az alábbiakban részletezem: - Az egység neve helyére annak kell kerülnie, amit épp szerkeszteni akarunk: \section, \subsection,... - A \@startsection{típus} esetén csak a típust szabad megváltoztatni, mely lehet section, subsection,..., éppúgy, mint a fentebbi sorban, ám figyeljünk arra, hogy itt nem kell perjelet használni. - A mélység száma azt mondja meg, hogy miként jelenjen meg a tartalomjegyzékben az adott bejegyzés. Ez lehet többek között: - 0: könyvfejezeteknél (chapter) - csak akkor használható, ha a preambulumban book van beállítva a dokumentum típusának. - 1: fejezeteknél (section). - 2: alfejezeteknél (subsection). - 3: al-alfejezeteknél (subsubsection). - A behúzás egy mértékegységgel ellátott szám (pl. 3cm) mely meghatározza, hogy a baloldali margóhoz képest mennyivel kezdődjön beljebb a fejezet/alfejezet/... címe. - Az előtte, illetve utána helyekre szintén egy számnak, illetve mértékegységnek kell kerülnie, melyek azért felelősek, hogy mekkora sorköz legyen a fejezetcím előtt/után. - Végül a stílus felelős azért, hogy ténylegesen, hogyan nézzen ki a fejezetcím. Ide beírhatjuk a már ismert szövegformázási parancsaink jelentős részét, figyelve arra, hogy ne tegyünk utánuk nyitó, illetve záró {... } jeleket. Például középre zárt, félkövér és dőlt címnél elég ennyit beírni a stílus helyére: \textbf\textit\centering Ezek a fentebbi beállítások voltak az úgynevezett globális opciók, melyek akkor érvényesülnek, ha azokat nem írjuk felül a \section{formázás+név} parancs kiadásával. 3.4. LÁBJEGYZETEK, SZÉLJEGYZETEK A L A TEX lehetőséget biztosít számunkra, hogy könnyen és egyszerűen helyezhessünk el láb-, illetve széljegyzeteket művünkben. Elsőként a lábjegyzetekről és az ahhoz kapcsolódó beállításokról ejtenék néhány szót. Ahhoz, hogy beszúrhassuk ezeket az oldal aljára, nincs más dolgunk, mint a szövegtörzsben a kívánt szó, vagy mondat után begépeljük a \footnote{lábjegyzet} parancsot, mely az adott szót, vagy 10
mondatot felső indexben megszámozza, illetve a lap aljára a margó területére beírja a kapcsos zárójelben szereplő kifejezést. 1 Az alábbiakban leírok néhány fontosabb beállítást, melyeket igény szerint helyezzünk el a preambulumban ahhoz, hogy hibátlanul működjenek (megjegyzés: ezek csak magyar nyelvi csomag használata esetén működnek, így ha nem ez van nekünk beállítva, akkor ne használjuk őket, mert hibát kapunk eredményül): - \footnotestyle{utasítás}: meghatározza a lábjegyzet kinézetét. Az utasítások közül néhány fontosabb: - reset=page: a L A TEX alapbeállításon folyamatosan számozza a lábjegyzeteket, így előfordulhat, hogy egy igen hosszú mű esetén az utolsó oldalakon már százas nagyságrendűek szerepelnek, ami nem esztétikus. Ezzel az utasítással ez a számláló minden oldalon 1-től indul. - reset=section: ezzel a paranccsal fejezetenként indul újra a számozás. - mark=stars-max: csillagokra cseréli a számokat. - rule=fourth: amennyiben nem rak alapból vonalat a lábjegyzet fölé, ezzel a beállítással ezt orvosolhatjuk. - rule=none: ha épp a fordított eset áll fenn, akkor segít nekünk ez a kifejezés. Amennyiben nem magyar nyelvi csomagot használunk, de szeretnénk, hogy időnként újrainduljon a számozás, úgy szúrjuk be a kívánt helyre a \setcounter{footnote}{0} parancsot és a következő lábjegyzetünk ismét az egyes számot fogja kapni. Lehetőségünk van arra, hogy több szóhoz, mondathoz is ugyanazt a számot rendeljük hozzá. Ehhez az első előfordulási helyen írjuk be, hogy \footnote{lábjegyzet}, mivel ez készíti el a tényleges lábjegyzetünket, majd azokon a pontokon, ahol szeretnénk ugyanezt a számot viszontlátni, alkalmazzuk a \footnotemark[szám] parancsot, ahol a szám helyére írjuk be az előző utasítás által generált értéket. Az alfejezet végén néhány mondat erejéig rátérnék a széljegyzetek kérdésére. Alapbeállításon ezek a jobboldali margóra kerülnek, mégpedig a \marginpar{széljegyzetek} segítségével. Ha balra szeretnénk helyezni őket, akkor adjuk ki valahol a a \reversemarginpar utasítást, melyet követően az első parancs használatával automatikusan az ellenkező oldalra kerülnek jegyzeteink. Amennyiben szeretnénk visszatérni a jobboldali margó használatához, úgy írjuk be, hogy \normalmarginpar. Tekintve, hogy széljegyzetet viszonylag ritkán készítenek, így nem kívánok foglalkozni a különböző beállítási módokkal. 3.5. SZÖVEGDOBOZOK, MINIOLDALAK BESZÚRÁSA Előfordulhat, hogy az éppen begépelt szövegünket szeretnénk kiemelni, valamelyest elkülöníteni a többitől, netán hasábokba rendezni. Ehhez lehet megfelelő a szövegdobozok, vagy az úgynevezett minioldalak (minipage) használata. Az alábbi lista példákkal együtt szemlélteti ezeknek a használatát: - \mbox{szöveg}: egyszerűen egy keret nélküli dobozt hoz létre, melynek mérete automatikusan igazodik a benne lévő szöveg méretéhez. Ha folyószövegben használjuk, akkor nem is lehet észrevenni. 1 Ha alkalmazzuk a hyperref csomagot, akkor még kattintható hivatkozásként is megjelenik, amit beírtunk. 11
- \makebox[szélesség][pozíció]{szöveg}: egy előre meghatározott szélességű, keret nélküli dobozt készíthetünk ezzel, melyben a szöveg pozícióját is beállíthatjuk: - c: középre zárt. - l: balra zárt. - r: jobbra zárt. - Példa: ha ezt szeretnénk egy 5 cm széles, középre zárt szövegű dobozban elhelyezni, használjuk a \makebox[5cm][c]{ezt szeretnénk} utasítást a megfelelő helyen. - \fbox{szöveg}: teljesen megegyezik az mbox használatával, az egyetlen eltérés, hogy ez egy vékony keretet helyez a begépelt szavak köré. - \framebox[szélesség][pozíció]{szöveg}: ld. makebox, csak kerettel. - Példa: ha ezt szeretnénk egy 5 cm széles, középre zárt szövegű, kerettel ellátott dobozban elhelyezni, használjuk a \framebox[5cm][c]{ezt szeretnénk} utasítást a megfelelő helyen. - \raisebox{méret}{szöveg}: a méret helyére írt, mértékegységgel ellátott számnak megfelelően megemeli, vagy negatív szám esetén lejjebb tolja a megadott mondatot. - Példa: ha szeretnénk megemelni ezt a néhány szót pontosan 2 mm-el, akkor használjuk a \raisebox{2mm}{ezt a néhány szót} parancsot. Az általam fontosnak ítélt típusok közül az utolsó három jelentős mértékben összekapcsolódik. Ezeknek a lényege, hogy elmenthetünk egy bizonyos szövegrészletet, hogy a későbbiekben, ahol csak szükségünk van rá, felhasználhassuk. Nézzük, hogyan tehetjük ezt meg: - Első lépésként kiadjuk a \newsavebox{\név} utasítást, ahol a \név helyére beírjuk, hogy később, hogyan szeretnénk majd a dobozra hivatkozni (figyeljünk a perjel használatára). - Ezt követően begépeljük az elmenteni kívánt szöveget az alábbi parancsok valamelyikét felhasználva: - \savebox{\név}[szélesség][pozíció]{szöveg}, ahol a \név az előzőekben megadott, míg az összes többi beállítás megegyezik a fentebb felsoroltakkal. - \sbox{\név}{szöveg}. Ez éppúgy, ahogy az mbox, fbox esetén láthattuk, automatikusan a szöveg méretéhez állítja a dobozt. - Legvégül a megfelelő helyen használjuk a \usebox{\név} parancsot, mely automatikusan beilleszti a kívánt helyre a szöveget. Az utolsó fontos dolog, amiről az alfejezetben még szót ejtek a minioldalak létrehozása a művünkben. Ezek olyan kis szerkezeti egységek, melyek nevükhöz hűen egy teljes oldalként viselkednek annak ellenére, hogy a méretüket mi szabhatjuk meg, így akár egymás mellé is elhelyezhetünk belőlük többet. Az általános szintaxis a következőképp néz ki: \begin{minipage}[elhelyezés]{szélesség} IDE KERÜL A SZÖVEG, KÉP, TÁBLÁZAT,... \end{minipage} 12
Ahol az elhelyezés a minioldalak és az azokat körülvevő szöveg körbefuttatásáért felelős - t: ekkor a hozzá közvetlenül kapcsolódó szöveg a tetejéhez lesz zárva. - c: ekkor a szöveg közepéhez. - b: míg végül az aljához. Őszintén szólva a fentebbi három beállítással rengeteget lehet vesződni, mert az esetek jelentős részében nem úgy viselkedik, mint ahogy mi azt elvárnánk tőle, így célszerű ráállni egy adott stílusra, melyet használunk. Ha egymás mellé kívánjuk helyezni a minioldalakat, akkor ahányat szeretnénk, annyit készítsünk el, ügyelve arra, hogy pl. az elsőhöz tartozó \end{minipage} és a másodikhoz tartozó \begin{minipage}[elhelyezés]{szélesség} között ne legyen üres sor, különben két teljesen független objektumként kezeli őket a program. Zárásként nézzünk egy példát a működésére: Feladat: szeretnénk létrehozni két egymás melletti minioldalt, melyek szélessége pont kitölti a rendelkezésre álló sorszélességet. \begin{minipage}[t]{0.5\textwidth} \begin{minipage}[t]{0.5\textwidth} Amennyiben azt szeretnénk, hogy a minioldalunk Fontos megjegyezni, hogy a program forráskódjában nem hagytam üres sort a baloldali szélessége egy rögzített érték legyen, úgy természetesen az is megadható egy mértékegységgel ellátott szám segítségével (pl. 7cm). \begin{minipage}[t]{... } utasítások között. minioldalt lezáró \end{minipage} és az ezt kezdő \end{minipage} \end{minipage} Tekintve, hogy ezek a struktúrák úgy viselkednek, mint egy teljesen új oldal, így ugyanúgy helyezhetünk el bennük képeket, ugyanúgy formázhatjuk a szövegünket, használhatunk lábjegyzeteket, matematikai módot,... stb. 3.6. HOGYAN SZÍNEZZÜK A MEGÍRT SZÖVEGET? A könyv ezen alfejezete egy olyan témát jár körül, melynek - annak ellenére, hogy használati értéke nem túlzottan magas - célszerű legalább alapszinten elsajátítani a kezelését, hisz pl. bemutatókban igen jól jöhet, ha segítségével hatékonyabban ki tudunk emelni egy-egy vázlatpontot. Ahhoz, hogy biztosan működjön minden parancs, hasznos a preambulumban elsőként kiadni a \usepackage{color,colortbl} utasítást, melyek közül az első engedélyezi a különböző színek, illetve színezési opciók használatát, míg a második a táblázatok dekorálását hivatott segíteni. A következő sorba gépeljük be, hogy \usepackage[dvipsnames]{xcolor}. Itt a dvipsnames lehetővé teszi számunkra, hogy 60-70 új színt használjunk. Természetesen, a L A TEX-ben több száz szín is rendelkezésünkre áll a megfelelő csomagok engedélyezésével, ám úgy vélem, hogy ez a néhány is több, mint elegendő lesz számunkra. Nézzük, milyen alapvető lehetőségeink vannak a szövegünk díszítésére: - A leggyakrabban használt parancs, mely egyszerűen a megadott színre festi a beírt szöveget a \textcolor{szín}{szöveg}. - Ugyanennek az utasításnak a környezetként használható verziója a \begin{color}{szín}, illetve az ezt lezárandó \end{color} utasításokból áll. - Az előző alfejezetben írtakhoz hasonlóan hozhatunk létre színezett szövegdobozokat is. A megfelelő utasítások ezekhez: - \colorbox{szín}{szöveg}, mely egy keret nélküli, pontosan szöveg szélességű, adott színű dobozt hoz létre (melyben tetszőlegesen még a szavakat is színezhetjük a fentebbi parancsokkal). 13
- \fcolorbox{keret színe}{háttér színe}{szöveg}, ami egy adott keret-, illetve háttérszínnel ellátott dobozt készít el. - Végül, ha az egész oldal színét meg kívánjuk változtatni, akkor helyezzük el a szövegünkben a megfelelő helyen a \pagecolor{szín} parancsot. Az alfejezet utolsó részében ejtenék néhány szót a táblázatok színezéséről is. A sorok, illetve cellák elkészítése egyszerűen történik, mindösszesen be kell szúrnunk az adott helyre a \rowcolor{szín} (sorokhoz), illetve \cellcolor{szín} (cellákhoz) parancsokat: \begin{tabular}{ccc} \rowcolor{gray} 1&2&\cellcolor{red}3 \rowcolor{blue} 4&\cellcolor{green}5&6 \end{tabular} 1 2 3 4 5 6 Az oszlopok színezése legegyszerűbben úgy történhet, ha megadunk egy új oszloptípust, melynek meghatározzuk a színét és később ezt használjuk, ha szükség van rá. Ehhez nézzük az alábbi parancsot: \newcolumntype{név}{>{\columncolor{szín}}igazítás} Ahol a név egy általunk megadott oszlopnév lehet (célszerű egy betűt használni, majd meglátjuk, hogy miért), az igazítás pedig az előző könyvből már megismert l, c, r attól függően, hogy az oszlopban lévő szöveget balra, középre, vagy jobbra szeretnénk elhelyezni. Fontos, hogy a fenti sort a táblázatunk megkezdése előtt helyezzük el valahol, majd a táblázatban az oszlopok igazításának helyénél használjuk a most definiált új oszlopunkat: \newcolumntype{o}{>{\columncolor{gray}}c} \begin{tabular}{coco} 1&2&3 4&5&6 7&8&9 \end{tabular} 1 2 3 4 5 6 7 8 9 10 11 12 A könyv végén a függelékben található egy lista, mely a dvipsnames, svgnames használata után elérhető több száz színt tartalmazza nevekkel együtt (megjegyzés: figyeljünk a nagybetűs kezdőnevekre, mert nem működik az összes csupa kisbetűvel). 3.7. DOKUMENTUMOK ELHELYEZÉSE A MŰVÜNKBEN Ez az alfejezet egy igen tág témakört próbál egy igen szűk helyen összefogni, mely nem más, mint különböző PDF dokumentumok, előre megírt szövegrészletek elhelyezése a fő dokumentumtörzsünkben. Annak ellenére, hogy rengeteg lehetséges beállítás, parancs található ilyen téren, arra törekedtem, hogy csak a legfontosabb két utasítást ismertessem meg az kedves olvasóval, hiszen ezek birtokában képes lesz elvégezni a beillesztések túlnyomó többségét. Elsőként vizsgáljuk meg az egyszerű L A TEX fájlok elhelyezésének módját a szövegünkben: Ehhez használjuk a \input{fájl helye/fájlnév.tex} parancsot (pl. a fájl helye/fájlnév.tex helyére jelen könyvben a /home/csanad/dokumentumok/tex/fejezet3.7.tex került). Fontos megjegyezni, hogy a fájlnév.tex egy olyan dokumentum, melynek nincs preambulum része, csak maga a L A TEX segítségével formázott szöveg, hisz a fenti sor segítségével a fájlunk a fő dokumentumtörzsben lévő beállításokat fogja használni. Nem egy esetben láttam már olyat, hogy egy-egy hosszabb mű szerzője elkészítette a dokumentum preambulumát, melyben a \begin{document}, illetve \end{document} 14
környezetek között csak és kizárólag input parancsok helyezkedtek el, míg az egyes fejezetek különkülön, preambulum nélküli,.tex fájlokban voltak elehelyezve, így segítvén a könnyebb áttekinthetőséget, szerkeszthetőséget. Természetesen ezek a beékelt dokumentumok formázástechnikailag semmiben sem különböznek az eddig használtaktól, így a korábban megismert összes parancs alkalmazható azokban. Ezen rész második felében néhány szó erejéig kitérek a külső PDF oldalak beszúrásának kérdésére. Elöljáróban szeretném megjegyezni, hogy amennyiben rendelkezünk a beillesztendő dokumentum.tex verziójával, úgy mindenképp a fentebb látott utasítást használjuk ehhez a feladathoz, hisz sokkal jobban beépül akkor a bemásolni kívánt szöveg. Amennyiben erre nincs lehetőségünk, úgy a preambulumban helyezzük el a \usepackage{pdfpages} sort, mely segítségével lehetőségünk lesz kész PDF dokumentumok beszúrására a szövegünkben. Ahhoz, hogy ezt megtegyük, használjuk a \includepdf[beállítások]{fájl helye/fájlnév.pdf} parancsot. A beállításokat vesszővel elválasztva, szóköz nélkül egymás mellé kell írni a szögletes zárójelben. Nézzük, hogy mi az a két parancs, melyeket feltétlenül ismernünk szükséges: - pages={... }: itt a kapcsos zárójelen belül megadhatunk egy intervallumot (pl. 15-20), konkrét oldalakat vesszővel elválasztva (pl. 7,11,13), illetve ezek kombinációját (pl. 7,11-16,17,{},43,46-48, ahol a {} segítségével tudunk egy üres oldalt beszúrni). - nup=számxszám: ennek segítségével egy oldalra több oldalnyi PDF dokumentumot is beszúrhatunk. A számxszám mondja meg, hogy egy oldalon hány sornyi és oszlopnyi PDF lap legyen elhelyezve (pl. 3x4 esetén egy oldalra 12-t rak be a parancs). Természetesen ennél lényegesen több beállítási lehetőség létezik, azonban azok annyira speciálisak, hogy a felhasználók igen kis hányadának van rájuk szüksége, így ezeket itt nem részletezném, ám aki mélyebb ismeretekre szeretne szert tenni ilyen téren, annak bátran ajánlom a pdfpages csomag dokumentációjának (és úgy általában véve, minden, a könyveimben előforduló csomag dokumentációjának) forgatását. 4. MATEMATIKA KÖZÉPHALADÓKNAK Ezen fejezetben többek között igyekszem néhány újabb hasznos - a matematikai módhoz kapcsolódó - ismeretet megosztani a kedves olvasókkal, továbbá annak ellenére, hogy nem tartom célomnak a saját módszereim rákényszerítését senkire, mégis igyekszem objektíven összehasonlítani az előző könyvben is szereplő eqnarray, illetve align utasításokat, annak érdekében, hogy mindenki hatékonyan ki tudja választani a számára legmegfelelőbb parancsot. Tekintve, hogy előző művemből elsajátíthatóak a legfontosabb általános formázási eszközök, így igyekszem ezt a fejezetet a lehetőségekhez mérten lerövidíteni, mivel nem áll szándékomban túlzottan speciális, mindössze néhány olvasó által használandó utasításokat oktatni, hiszen ez nagymértékben megnövelné a könyv hosszát amellett, hogy ténylegesen használható ismereteket az olvasóközönség túlnyomó hányada számára nem jelentene. 4.1. AZ ALIGN VS EQNARRAY VITA Mint néhány sorral fentebb említettem, ebben a fejezetben azt a klasszikus kérdést fogom elemezni, hogy a címben szereplő két környezet közül melyiket használjuk inkább. Én személy szerint a voksomat az align mellett teszem le, ám természetesen mindenki használja azt, ami számára kedvezőbb. Nézzük elsőként a parancsok hátrányait: 15
EQNARRAY - Hosszú egyenleteknél összecsúszik az adott egyenlet és annak számozása. - Furcsán kezeli az egyenlőségjel körüli szóközöket. ALIGN - Nincs benne az alapcsomagban, így ha valamiért nincs lehetőségünk az amsmath csomag használatára, akkor nem tudjuk alkalmazni ezt a környezetet. - Majdhogynem lehetetlen megváltoztatni az egyenletek végén lévő számozást (pl. betűkre, római számokra,... ) anélkül, hogy a dokumentumunkban mindenhol meg ne változna. Lássuk most az előnyöket: EQNARRAY - Az alapcsomag részét képezi, így olyan cikkben is nyugodtan használhatjuk, ahol a folyóirat kiadója nem engedélyezi az amsmath csomag használatát. - Beszédes a parancs neve, így könnyen megjegyezhető kezdőknek is. ALIGN - Akármilyen hosszú egyenletünk is van, sosem fog összecsúszni a számozással. - Nem tesz speciális szóközöket az egyenlőségjelek köré. - Könnyen és gyorsan megváltoztathatjuk az egyenletek címkéjét, számozását. Ahhoz, hogy jobban megértsük a fentebb írtakat, vizsgáljuk meg az alábbi egyenletrendszereket: EQNARRAY ALIGN 45 = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + (1) 9 1 2 3 = 6 = 3 + 2 + 1 (2) 45 = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 (3) 1 2 3 = 6 = 3 + 2 + 1 (4) Figyeljük meg, hogy míg az eqnarray esetében az első egyenlet vége belecsúszott a számozásba, addig az align automatikusan, mindenféle beavatkozás nélkül lejjebb rakta kicsit a számot, így nem keletkezett torlódás. A második egyenletnél pedig az eqnarray az első egyenlőség előtt és után kicsivel nagyobb szóközt hagyott, mint a másodiknál, ellentétben az align egyenlő méretű szóközeivel. Egyenletrendszereink számozását sajnos nem tudom összehasonlítani, tekintve, hogy az eqnarray környezetet jelentős ideig tartó internetes keresgélés után sem sikerült rábírnom a jelölések megváltoztatására, így lentebb csak az align utasításon belül elvégezhető művelet egyszerűségére mutatnék egy példát: ALIGN \begin{align} 1+2+3&=6 \notag 4-3-2-1&=-2 \tag{masodik} \end{align} ALIGN 1 + 2 + 3 = 6 4 3 2 1 = 2 (Masodik) Látható, hogy a \tag{címke} utasítással tudunk megadni akár az összes egyenlethez saját elnevezést, míg a \notag letiltja azt az adott sorban. Az egyenlő bánásmód jegyében azonban megjegyzem, 16
hogy az eqnarray esetén is működik a letiltás, méghozzá teljesen ugyanolyan módon, mint fentebb látható, ám a \tag{címke} parancs használatakor ott hibautasítást kapunk. Ezek alapján úgy vélem célszerű a sokkal könnyebben használható és esztétikusabb eredményt is nyújtó align környezetet alkalmazni, ha egyenletrendszereket kívánunk elhelyezni dokumentumunkban, hiszen a másik alternatíva túl sok hátránnyal rendelkezik ahhoz, hogy előnyei mérsékelni tudják ezeket. 4.2. KÜLÖNBÖZŐ SZÁMTÁBLÁZATOK HATÉKONY BEILLESZTÉSE Annak ellenére, hogy az első könyvben már szót ejtettem a táblázatok, mátrixok létrehozásáról, illetve jelen mű elején megtanultunk egy gyors módszert azok automatikus elkészítésére, néhány olvasó jobb szereti a beépített parancsokat használni ahelyett, hogy sajátok létrehozásával vesződne, így ez a fejezet számukra nyújt segítséget. A L A TEX lehetőséget teremt arra, hogy bizonyos, gyakran használt táblázattípusokat előre definiált utasításokkal hozhassunk létre, ezáltal megspórolva számunkra nem kevés időt és energiát. Nézzük, hogy mily módon tudjuk alkalmazni ezeket: - \begin{matrix}: egy egyszerű, határoló vonalak nélküli számtáblázatot hoz létre. Ne felejtsük el a végén lezárni a \end{matrix} paranccsal. - \begin{pmatrix}: ugyanaz, mint a fentebbi, de a határolók közönséges zárójelek. - \begin{bmatrix}: szögletes zárójelek határolják. - \begin{bmatrix}: kapcsos zárójelek határolják. - \begin{vmatrix}: egyenes zárójelek határolják. - \begin{vmatrix}: mindkét oldalon két-két egyenes zárójel határolja. Fontosnak tartom kiemelni, hogy az eddig tapasztaltakkal ellentétben nem szükséges megadnunk az oszlopok számát, azt a program automatikusan megoldja helyettünk. Hátrány azonban, hogy oszlopok közötti határolókat sem tudunk beállítani. Megjegyzendő még, hogy ezen utasítások kizárólag matematikai módban alkalmazhatóak. Lássunk egy-egy példát a fentebbi környezetekre: \begin{matrix} 1&2&3\\ 4&5&6 \end{matrix} \begin{bmatrix} 1&2&3\\ 4&5&6 \end{bmatrix} \begin{vmatrix} 1&2&3\\ 4&5&6 \end{vmatrix} 1 2 3 4 5 6 \begin{pmatrix} 1&2&3\\ 4&5&6 \end{pmatrix} [ 1 ] \begin{bmatrix} 2 3 1&2&3\\ 4 5 6 4&5&6 \end{bmatrix} 1 2 3 4 5 6 \begin{vmatrix} 1&2&3\\ 4&5&6 \end{vmatrix} ( 1 2 ) 3 4 5 6 { 1 2 } 3 4 5 6 1 2 3 4 5 6 Lehetőségünk van arra is, hogy folyószövegben helyezzünk el kisméretű mátrixokat, azonban itt nekünk kell megadnunk a határoló zárójel fajtáját. A létrehozásukra a megfelelő parancs a \begin{smallmatrix}. Erre egy szemléletes példa alább látható: 17
Ha mátrixokat illesztünk be a szövegbe, (pl. így: $\left( \begin{smallmatrix} 1&2\\ 3&4 \end{smallmatrix} \right)$) akkor figyeljünk arra, hogy először lépjünk be matematikai módba, majd lépjünk is ki onnan. Ha mátrixokat illesztünk be a szövegbe, (pl. így: ( 1 3 2 4 )) akkor figyeljünk arra, hogy először lépjünk be matematikai módba, majd lépjünk is ki onnan. Látható, hogy hátrányaik mellett (nem, vagy csak igen nehezen lehet megadni a cellák közötti határolókat, nem minden zárójelre van beépített parancs, csak matematikai módban működnek) számos előnnyel is bírnak (gyorsan lehet elkészíteni, nem kell az oszlopok számának megadásával foglalkozni), így használatukat mindenképp javaslom elsajátítani. 4.3. TIPPEK, TRÜKKÖK, RÖVIDEBB PARANCSOK A FÜGGELÉK előtti utolsó alfejezet célja, hogy néhány oldalban összefoglalja azon utasításokat, melyek rövidségükből kifolyólag nem érdemelnek külön szakaszt. Egységes bennük, hogy egyrészt matematikai módban kell őket használni, másrészt hatásukat általában máshogy is el lehet érni, így egy részüknek inkább csak esztétikai (vagy gépeléstechnikai) szempontból van haszna. További magyarázat helyett úgy vélem hatékonyabb, ha egyből el is kezdjük megismerni őket, amolyan kissé ömlesztett verzióban: Hatás Parancs Példa Eredmény Alá-fölé helyezés \stackrel{fölé}{alá} \stackrel{5}{=} Alá-középre-fölé helyezés \mathop{közép}_{lent}^{fent} \mathop{=}_{2}^{1} Több sor a szumma alatt \sum_{\substack{sor 1 \\sor 2 \\... }} \sum_{\substack{i=1\\j=2}} Kettős integrál \iint \iint f f Hármas integrál \iiint \iiint f f Távolság csökkentése 1. \! A\!B AB Távolság csökkentése 2. \negmedspace A\negmedspace B AB Távolság csökkentése 3. \negthickspace A\negthickspace B AB Távolság növelése 1. \, A\,B A B Távolság növelése 2. \: A\:B A B Távolság növelése 3. \; A\;B A B Három pont 1. \ldots -... Három pont 2. \cdots - Három pont 3. \vdots -. Három pont 4. \ddots -... Szorzásjel \cdot - Aláhúzás \underline{szöveg} \underline{5x+2} 5x + 2 Alsó kapcsos zárójel \underbrace{szöveg} \underbrace{5x+2} 5x }{{ + 2 } Alsó bal nyíl \underleftarrow{szöveg} \underleftarrow{5x+2} 5x + 2 Alsó jobb nyíl \underrightarrow{szöveg} \underrightarrow{5x+2} 5x + 2 5 = 1 = 2 i=1 j=2 18
Bár külön nem jelöltem, de a fentiek túlnyomó része kizárólag matematikai módban működik, ám, annak kiderítését, hogy pontosan melyek ezek, az olvasóra bízom. A mathop, illetve a szummára vonatkozó sor kizárólag akkor ad megfelelő eredményt, ha vagy az előző könyvben megismert displaystyle operátoron belül, vagy kiemelt egyenletekben (equation, align, eqnarray) alkalmazzuk őket. Az utolsó négy parancsnak természetesen van olyan verziója is, ahol az adott jel a szöveg fölé kerül. Ehhez egyszerűen cseréljük le az under szót over-re az utasításban. Amennyiben csak egyszerűen megjeleníteni szeretnénk a balra, illetve jobbra nyilakat, úgy a \leftarrow, illetve \rightarrow a megfelelő választás. Oda-vissza nyílhoz alkalmazzuk a \leftrightarrow utasítást, melynek létezik over és under felhasználása is (ld. fentebb). Sok esetben szükségünk lehet arra, hogy függvényeket esetszétválasztással definiáljunk. Erre szolgál a cases környezet: $f:=\begin{cases} -1,&\textrm{ha a szám negatív}\\ 0,&\textrm{ha a szám nulla}\\ 1,&\textrm{ha a szám pozitív} \end{cases} 1, ha a szám negatív f := 0, ha a szám nulla 1, ha a szám pozitív Előfordulhat az is, hogy egy kiemelt egyenletet be szeretnénk keretezni. Ehhez használjuk a boxed parancsot, mely folyószövegben automatikusan belépteti matematikai módba a benne lévő szöveget, így ezzel nem kell nekünk foglalkoznunk: \fbox{1+2+3+4=10} \boxed{1+2+3+4=10} \begin{align} \boxed{1+2+3+4=10} \end{align} 1+2+3+4=10 1 + 2 + 3 + 4 = 10 1 + 2 + 3 + 4 = 10 (5) Figyeljük meg a számok, illetve jelek eltérő írásmódját fbox, illetve boxed használatánál. Nem meglepő módon ugyanazt a hatást érjük el mindkét utasítás segítségével, ha fbox-on belül külön belépünk matematikai módba, ám úgy vélem célszerűbb a boxed alkalmazása, ha épp matematikai szöveget szerkesztünk. Az utolsó előtti témakör, amivel a fejezet során még foglalkozni kívánok, a lánctörtek kérdése. Ha az előző könyvből is megismert \frac{számláló}{nevező} módon próbáljuk létrehozni őket, akkor igazi displaystyle mesternek kell ahhoz lennünk, hogy megkíméljük magunkat egy igen gyatra végeredménytől. Ellenben, ha a frac szavakat lecseréljük cfrac-ra, akkor könnyen és gyorsan elérhetjük a kívánt hatást: FRAC FRAC CFRAC CFRAC \begin{align*} \frac{1}{1+ \frac{1}{1+ \frac{1}{1+\ldots}}} \end{align*} 1 1 + 1 1+ 1 1+... \begin{align*} \cfrac{1}{1+ \cfrac{1}{1+ \cfrac{1}{1+\ldots}}} \end{align*} 1 + 1 1 1 + 1 1 +... Végül, de nem utolsó sorban betölteném azt az űrt, amit ezen mű elődjénél szándékosan meghagytam. Ez nem más, mint a tételek, definíciók, megjegyzések különböző írásmódja. Logikus elvárásnak tűnik, hogy elkészült alkotásunkban ne ugyanúgy nézzen ki ez a három környezet, ám tekintve, hogy ugyanazzal a paranccsal kell mindegyiket definiálni, így célszerűbbnek láttam a módosításukat későbbre, egész pontosan mostanra halasztani. 19
A legegyszerűbb módja annak, hogy megváltoztassuk a kinézetüket, nem más, mint a preambulumban megkeresni az értelemszerűen kitöltött \newtheorem{hivatkozás}{név}[mélység] sorokat, majd a tételek, lemmák fölé közvetlenül beszúrni egy új sorba a \theoremstyle{plain}, a definíciókat megadó sor fölé közvetlenül a \theoremstyle{definition}, míg a megjegyzéseket tartalmazó fölé a \theoremstyle{remark} utasításokat. Ezek felülírják egymást, így mindegyik addig tart, ameddig a következő el nem kezdődik (pl. abban az esetben, ha négy különböző sorunk van a tételekre, melyek alatt a definíciók kezdődnek, akkor, ha a legelső tételes mondat fölé beszúrjuk a plain szót tartalamazó parancsot, majd a legutolsó után a definition beállításút, akkor a négy sorunk a tételeknek megfelelő beállítást kapja, míg a definíciós már nem). Nézzük, hogy milyen eredményt érünk el ezekkel: 4.1. Definíció. Egy egész számot pozitívnak/negatívnak nevezünk, ha nagyobb/kisebb, mint nulla. 4.1. Tétel. Megszámlálhatóan sok pozitív egész szám létezik. Megjegyzés. Hasonlóan belátható az állítás negatív számok esetén is. Figyeljük meg a fenti mondatok eltérő formázását. Természetesen lehetőségünk van saját stílus kialakítására is, azonban mivel egyrészt a beépítettek általában kielégítik igényeinket, másrészt pedig ez már túlmutat a középhaladó szintű beállításokon, így ennek mikéntjére jelen dokumentum keretei között nem térek ki. Sajnos ismét elérkezett az a pont, ahol búcsút kell intenem a kedves olvasónak, emlékeztetve rá, hogy természetesen nem csupán ennyi az, melyet a L A TEX-ről tudni lehet, így ahhoz, hogy hibátlanul meg tudjon oldani minden felmerülő problémát, elengedhetetlen a folyamatos önképzés. Remélem hasznos volt ez a rövid kézikönyv ahhoz, hogy az előzővel karöltve segítse az eligazodást a program rögös útjain. 20
5. FÜGGELÉK AZ ALAPSZÍNEK A DVIPSNAMES BEÁLLÍTÁSSAL ELÉRHETŐ SZÍNEK AZ SVGNAMES BEÁLLÍTÁSSAL ELÉRHETŐ SZÍNEK 21
22