}w !"#$%&'()+,-./012345
M ASARYKOVA UNIVERZITA FAKULTA INFORMATIKY
Podpora kreslení obrázku˚ v LATEXu ˇ B AKALÁ RSKÁ PRÁCE
Jan Marek
Brno, jaro 2009
Prohlášení Prohlašuji, že tato bakaláˇrská práce je mým puvodním ˚ autorským dílem, které jsem vypracoval samostatnˇe. Všechny zdroje, prameny a literaturu, které jsem pˇri vypracování používal nebo z nich cˇ erpal, v práci rˇ ádnˇe cituji s uvedením úplného odkazu na pˇríslušný zdroj.
Vedoucí práce: Mgr. Jan Holeˇcek ii
Podˇekování Dˇekuji Mgr. Janu Holeˇckovi za cenné rady a za trpˇelivost, kterou se mnou mˇel.
iii
Shrnutí Práce se zabývá kreslením obrázku˚ ve zdrojovém kódu TEXového dokumentu. Zpracovává pˇrehled a popis nˇekolika nejznámˇejších a nejpoužívanˇejších nástroju˚ a porovnává jejich funkce. Následuje srovnání tˇechto nástroju˚ a je z nich vybrán jeden, pro který je popsána implementace nové funkce.
iv
Klíˇcová slova TEX, LATEX, picture, PSTricks, PGF, TikZ, PDF, kreslení ve zdrojovém kódu
v
Obsah 1 2 3
Úvod . . . . . . . . . . . . . . . . . . . . . . . . . . Srovnání vkládání a kreslení obrázku˚ . . . . . . . Pˇrehled nˇekterých vybraných kreslících nástroju˚ 3.1 picture . . . . . . . . . . . . . . . . . . . . . . 3.2 PSTricks . . . . . . . . . . . . . . . . . . . . . 3.3 PGF and TikZ . . . . . . . . . . . . . . . . . . 4 Srovnání kreslících nástroju˚ . . . . . . . . . . . . 5 Implemetace . . . . . . . . . . . . . . . . . . . . . . 6 Závˇer . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Použitá literatura . . . . . . . . . . . . . . . . . . . A Zdrojový soubor . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
2 4 6 6 9 13 18 20 22 24 26
1
Kapitola 1
Úvod V dnešní dobˇe se stále cˇ astˇeji mužeme ˚ setkat s prezentacemi cˇ i dokumentací ve formátu Adobe PDF. Tento formát je velice populární zvláštˇe díky své pˇrenositelnosti. Toho jsou si vˇedomi napˇríklad i vývojáˇri kanceláˇrských balíku, ˚ kteˇrí možnost exportu dokumentu do formátu PDF bud’to implementují pˇrímo (OpenOffice.org) nebo alesponˇ pomocí doplnk ˇ u˚ (MS Office 2007). Kromˇe kanceláˇrských balíku˚ lze použít nˇekterý z široké škály online cˇ i offline konvertoru. ˚ Podpora vstupních (a výstupních) formátu˚ bývá mnohdy obdivuhodná. Na druhou stranu výsledný dokument nemusí vypadat podle našich pˇredstav a dodateˇcné úpravy jsou mnohdy nároˇcnˇejší než vytvoˇrení nového dokumentu. Rozhodneme-li se vytvoˇrit nový dokument, který chceme uložit ve formátu PDF, mužeme ˚ si vybrat z široké škály formátu˚ podle toho, který nejlépe vyhovuje nám a našim potˇrebám. Chceme-li navíc vytváˇret více verzí dokumentu z jednoho zdroje nebo psát matematické vzorce, nejlepší volbou byl, je a zˇrejmˇe ještˇe dlouho bude TEX a jeho nadstavby, napˇr. LATEX. Dokument obvykle neobsahuje pouze text, ale i ruzné ˚ grafy, schémata, nákresy cˇ i jiné obrázky. Bohužel neexistuje žádný standard grafiky u LATEXových dokumentu. ˚ Obrázky do dokumentu˚ je možné vkládat v ruzných ˚ formátech. Obecnˇe lze obrázky v dokumentech rozdˇelit do dvou kategorií. První z nich je vkládání bitmapové grafiky, kdy dokumenty pˇrekládáme pomocí pdflatexu do formátu PDF. Muže ˚ se jednat o obrázky ve formátu JPEG, GIF, PNG, PDF cˇ i o obrázky v METAFONTu. Bitmapové obrázky nejsou obecnˇe pˇríliš vhodné, protože pˇri zmˇenˇe rozlišení cˇ i otoˇcení pˇrímo v LATEXu se výraznˇe zhoršuje jejich kvalita. Proto je vhodnˇejší pro úpravy bitmapových obrázku˚ použít externí grafické editory a do LATEXového dokumentu vložit již upravený obrázek. Pˇri pˇrekladu je pak tˇreba použít pdftex a pˇrekládat dokument pˇrímo do formátu PDF. Pokud bychom chtˇeli do dokumentu vložit i nˇejaký obrázek, který máme ve vektorovém formátu, museli bychom jej nejprve pˇrevést do bitmapového formátu. Pˇrevodem se ovšem zhorší kvalita obrázku, proto je nutné zvážit, zda se nám to vyplatí, nebo bude výhodnˇejší pˇrevést bitmapové obrázky na vektorové. 2
1. Ú VOD Další možností by bylo použití METAFONTu cˇ i METAPOSTu, u kterých nezáleží na tom, zda se na pˇreklad použije latex cˇ i pdflatex. Druhou možností je vkládat vektorové obrázky ve formátech EPS, PS nebo METAPOST a pˇrekládat latexem do formátu DVI cˇ i PS. Vektorová grafika má tu výhodu, že pˇri manipulaci s obrázky v LATEXovém dokumentu nedochází ke snížení kvality obrázku. Další výhodou plynoucí z toho, že je dokument pˇrekládán latexem, muže ˚ pro nˇekoho být to, že se dokument nepˇrekládá pˇrímo do formátu PDF. Ovšem na druhou stranu se v dnešní setkáváme témˇerˇ výhradnˇe s dokumenty ve formátu PDF, pro který existují desítky nejruznˇ ˚ ejších prohlížeˇcu. ˚ Tím, že je pˇri pˇrekladu používán latex, musíme dokument pˇreložený do formátu DVI cˇ i PS ještˇe pˇrevést do PDF. Další nevýhodou muže ˚ pro mnohé být to, že vytvoˇrení obrázku ve vektorovém formátu je složitˇejší než v pˇrípadˇe bitmapových obrázku. ˚ Výše uvedené zpusoby ˚ vkládání obrázku˚ do dokumentu mají spoleˇcné to, že obrázky jsou uloženy v externích souborech. Ovšem obrázky je také možné kreslit pˇrímo do zdrojového kódu dokumentu. Tímto zpusobem ˚ sice nemužeme ˚ do dokumentu umístit napˇr. fotografie, ale je možné „nakreslit“ ruzné ˚ grafy, schémata, náˇcrty cˇ i jednoduché obrázky. Jaké jsou výhody a nevýhody tohoto kreslení ve srovnání s vkládáním at’ už bitmapových cˇ i vektorových obrázku˚ se vˇenuji ve druhé kapitole. Pokud nás neodradí nevýhody a rozhodneme se kreslit obrázky pˇrímo do zdrojového kódu, zjistíme, že existuje více nástroju. ˚ Proto je tˇretí kapitola práce vˇenována struˇcnému pˇrehledu a popisu tˇrí vybraných základních a nejpoužívanˇejších nástroju, ˚ které umožnují ˇ kreslit obrázky ve zdrojovém kódu. Ke každému nástroji je uveden základní popis a pˇrehled alesponˇ základních funkcí. Ve cˇ tvrté kapitole jsou pak porovnávány výhody a nevýhody jednotlivých nástroju. ˚ Do nástroje, u nˇehož pˇrevažují pozitiva, budou implementovány nˇekteré nové funkce. Této implementaci se podrobnˇeji vˇenuji v páté kapitole. V závˇeru práce jsou shrnuty výsledky implementace funkcí do zvoleného nástroje. Je také nastínˇen další možný vývoj.
3
Kapitola 2
Srovnání vkládání a kreslení obrázku˚ Pokud porovnáme možné zpusoby ˚ použití grafiky podle toho, jakým zpusobem ˚ jsou obrázky do dokumentu umístˇeny, mužeme ˚ je rozdˇelit do dvou hlavních skupin. První skupinu tvoˇrí obrázky v externích souborech bez ohledu na to, jedná-li se o vektorovou nebo bitmapovou grafiku. Druhá skupina je tvoˇrena obrázky, které jsou kresleny pˇrímo ve zdrojovém kódu dokumentu. Obˇe tyto skupiny mají své výhody i nevýhody, které mohou být znaˇcnˇe individuální vzhledem k tomu, co od obrázku˚ v dokumentu oˇcekáváme. Obrázky v externích souborech je možné velice snadno procházet, prohlížet, editovat cˇ i zamˇenovat ˇ bez nutnosti jakékoli manipulace se zdrojovým textem dokumentu. Navíc je možné použít libovolný obrázek – napˇríklad fotky cˇ i mapy. Pokud je souˇcástí obrázku nˇejaký text, muže ˚ se stát, že bude napsán jiným stylem, což muže ˚ pusobit ˚ rušivˇe. Další „problémy“ mohou nastat u obrázku˚ nepravidelných tvaru, ˚ kdy požadujeme, aby se text zalamoval až u okraje obrázku. Musíme mít ovšem na pamˇeti také to, že je tˇreba mít sjednocené formáty všech obrázku, ˚ protože není možné mít v dokumentu nˇekolik bitmapových a nˇekolik vektorových obrázku. ˚ Za nevýhodou lze považovat i to, že je nutné uchovávat více souboru˚ a pˇri velkém množství vložených obrázku˚ je zapotˇrebí udržovat urcˇ itý systém. Muže ˚ se totiž stát, že pˇri pˇrenášení cˇ i kopírování dokumentu na nˇejaký obrázek zapomeneme. Ovšem je také možné, že pˇri zmˇenách ve zdrojovém kódu nˇekteré obrázky v dokumentu nepoužijeme, ale budeme je stále uchovávat spolu s dokumentem. V horším pˇrípadˇe si mužeme ˚ omylem smazat úplnˇe jiný obrázek. V pˇrípadˇe napˇr. METAFONTu je sice možné mít všechny obrázky v jediném souboru, ale i tak je nutné mít jednotlivé obrázky nˇejak organizované, napˇríklad okomentované. Pˇri kreslení obrázku˚ pˇrímo ve zdrojovém kódu odpadá problém s množstvím souboru˚ a zvláštˇe pˇri vˇetším množství obrázku˚ neztrácíme o jednotlivých obrázcích pˇrehled. S obrázky se také v textu daleko lépe manipuluje a velikost výstupního souboru je o poznání menší, než pˇri vkládání externích obrázku. ˚ Pro kreslení obrázku˚ je ale nutné se nauˇcit nové pˇríkazy, které jsou víceménˇe podobné 4
2. S ROVNÁNÍ VKLÁDÁNÍ A KRESLENÍ OBRÁZK U˚ tˇem TEXovým. Pˇri kreslení pˇrímo do zdrojového kódu dokumentu ovšem „nevidíme“ obrázek neustále pˇred sebou, takže chceme-li vidˇet, co jsme zatím nakreslili, musíme pˇreložit zdrojový kód. Další problém nastává v pˇrípadˇe, kdy chceme dokument uložit i v jiném, exotiˇctˇejším formátu. Kreslení do zdrojového kódu a vkládání obrázku˚ je možné v rámci možností také kombinovat. Tím odpadá problém se složitými obrázky, které by nebylo možné nijak namalovat. Navíc v pˇrípadˇe ruzných ˚ technických skript cˇ i studijních materiálu, ˚ kde nejsou potˇreba fotky cˇ i mapky, ale staˇcí jednoduché nákresy, je kreslení obrázku˚ do zdrojového kódu ideální.
5
Kapitola 3
Pˇrehled nˇekterých vybraných kreslících nástroju˚ Pokud se rozhodneme, že budeme kreslit obrázky pˇrímo ve zdrojovém kódu dokumentu, máme na výbˇer z nˇekolika ruzných ˚ nástroju. ˚ Ne všechny ale mohou splnovat ˇ naše požadavky. Jak vybrat ten správný? Jedním z cílu˚ této práce je zpracovat pˇrehled tˇechto nástroju, ˚ jejich principy a stav implementace. Do pˇrehledu byly vybrány 3 nejznámˇejší, nejvýznamnˇejší a nejvíce používané volnˇe dostupné nástroje, se kterými je možné se bˇežnˇe setkat. Mimo tˇechto nástroju˚ existují i další (napˇríklad mfpic, xypic cˇ i emp), ale jejich rozšíˇrení cˇ i význam je ve srovnání se zde uvedenými nástroji zanedbatelné. Informace o jednotlivých nástrojích byly pˇrevážnˇe cˇ erpány z jejich oficiálních dokumentací, volnˇe dostupných popisu˚ a vlastních zkušeností.
3.1 picture Jeden z prvních nástroju˚ umožnující ˇ kreslení ve zdrojovém kódu LATEXového dokumentu. Nejedná se o plnohodnotný kreslící nástroj, ale o prostˇredí, které je souˇcástí LATEX 2. Pomocí picture lze nakreslit jednoduché bitmapové obrázky skládající se z cˇ ar, šipek, kružnic a textu. V pozdˇejších verzích pˇribyla i možnost kreslit Bézierovy kˇrivky. S použitím balíku color lze oživit obrázek barvami. Definované barvy jsou jen cˇ erná, bílá, cˇ ervená, zelená, modrá, žlutá, azurová a purpurová, ale pomocí pˇríkazu \definecolor lze dodefinovat i vlastní barvy v režimech RGB, stupnˇe šedi cˇ i CMYK. Komu by ani to nestaˇcilo, muže ˚ sáhnout po nˇekterém z dalších rozšíˇrení pro toto prostˇredí. Je však tˇreba dávat pozor, protože rozšíˇrení založená na postskriptu jsou pdftexem ignorována, takže by nebylo možné použít pˇrímý pˇreklad do formátu PDF. Prostˇredí picture zaˇcíná vždy pˇríkazem \begin{picture}(šíˇ rka,výška) (x,y), kde (šíˇ rka,výška) udává rozmˇery obrázku a (x,y) znamená posun
6
ˇ ˇ ˚ 3. P REHLED N EKTERÝCH VYBRANÝCH KRESLÍCÍCH NÁSTROJ U
obrázku a konˇcí pˇríkazem \end{picture}. Posun není povinný a v pˇrípadˇe, že jej vynecháme, použije se výchozí nastavení, tj. (0,0). Rozmˇery nemusí být jen pˇrirozená cˇ ísla, lze tedy zadat napˇríklad -6.12, .5 cˇ i 9.1373. Výchozí jednotkou uloženou v \unitlength je 1pt. Tuto jednotku lze kdykoli zmˇenit pomocí pˇríkazu kod\setlength. Kromˇe bodu˚ (pt) lze použít ještˇe milimetry (mm), centimetry (cm), palce (in), em a ex. Všechna cˇ ísla vˇcetnˇe nuly musí mít uvedenou jednotku. Jednotky však není vhodné mˇenit pˇrímo uvnitˇr obrázku, protože se tím mohou ovlivnit ostatní nastavení a výsledný obrázek bude ruznˇ ˚ e deformovaný. ˇ Cáry jsou standardnˇe vykreslovány \thinlines, což je 0.4pt. Vykreslování tlustších cˇ ar lze dosáhnout bud’to použitím \thicklines nebo nadefinováním si vlastní tloušt’ku cˇ áry pˇríkazem \linethickness{velikost}. Pro vykreslování objektu˚ slouží pˇríkaz \put(x,y){objekt}, kde (x,y) jsou souˇradnice umist’ovaného objektu. Chceme-li nˇejaký objekt vložit vícekrát, lze použít pˇríkaz \multiput(x,y)(dx,dy){poˇ cet}{objekt}, kde (dx,dy) je posun. Výjimku tvoˇrí \qbezier, který se vkládá pˇrímo. Vykreslování je realizováno pomocí bitmapového fontu. Proto jsou nˇekteré rozmˇery nahrazovány nejbližšími existujícími cˇ i dokonce (v pˇrípadˇe malých rozmˇeru) ˚ zanedbávány, proto je napˇríklad možné do prvního kvadrantu nakreslit jen 25 úseˇcek se stˇredem v bodˇe (0,0). Pro kreslení jednoduchých obrázku˚ to však plnˇe dostaˇcuje. Dalším omezením je množství možných objektu. ˚ Dostupné objekty jsou: \circle[*]{pr˚ umˇ er}
vykreslí kružnici o zadaném prumˇ ˚ eru; hvˇezdiˇcková forma vykreslí kruh
\line(sx,sy){délka}
vykreslí úseˇcku; (sx,sy) je její smˇerový vektor, sx a sy musí být nesoudˇelná cˇ ísla z intervalu h−6, 6i
\vector(sx,sy){délka}
obdoba \line, vykreslí šipku; sx a sy musí být z intervalu h−4, 4i
\oval(šíˇ rka,výška)[ˇ cást]
vykreslí ovál o zadaných rozmˇerech; lze vykreslit i polovinu a cˇ tvrtinu urˇcením cˇ ásti (l = levá, r = pravá, t = horní, b = dolní a jejich kombinace)
7
ˇ ˇ ˚ 3. P REHLED N EKTERÝCH VYBRANÝCH KRESLÍCÍCH NÁSTROJ U
\frame{objekt}
orámuje zadaný objekt bez mezery mezi orámováním a obsahem
\qbezier[#](x1 , y1 )(xr , yr )(x2 , y2 )
vykreslí Bézierovu kˇrivku jako množinu bodu; ˚ (x1 , y1 ) je poˇcáteˇcní bod, (x2 , y2 ) koncový bod a (xr , yr ) referenˇcní bod; [#] urˇcuje, kolika body bude kˇrivka vykreslena
Kromˇe tˇechto objektu˚ je možné do obrázku˚ vkládat také text. Existuje více možností, jak toho docílit. Asi nejjednodušším zpusobem, ˚ který ale neakceptuje cˇ eské znaky, je \put(x,y){text}. Další možností je použít nˇekterý z „boxu“. ˚ V boxech lze již bez problému˚ používat cˇ eské znaky a navíc mají tu výhodu, že text cˇ i jiný objekt v nich lze i zarovnat. Pˇrehled boxu˚ dostupných v prostˇredí picture: •
\makebox(šíˇ rka,výška)[zarovnání]{objekt} – vytvoˇrí box o zadaných rozmˇerech; možná zarovnání jsou l = vlevo nebo r = vpravo a t = nahoru nebo b = dolu; ˚ výchozí zarovnání je na stˇred
•
\framebox(šíˇ rka,výška)[zarovnání]{objekt} – orámovaný box, obdoba pˇríkazu makebox
•
\dashbox{ˇ cárky}(šíˇ rka,výška)[zarovnání]{objekt} – cˇ árkovanˇe orámovaný makebox; pomocí {ˇ cárky} lze nastavit délku cˇ árek.
Pˇríkaz \shortstack[zarovnání]{vkládaný\\text} slouží k zarovnání kratších rˇ ádku˚ do sloupce. Výchozí zarovnání je na stˇred (c), lze nastavit vlevo (l) nebo vpravo (r). Jedná se tedy o jakousi obdobu boxu. Tímto jsem shrnul všechny základní funkce prostˇredí picure. Pro lepší pˇredstavu o tom, jak vypadá kreslení v tomto prostˇredí, následuje ukázka zdrojového kódu a výsledného obrázku. \setlength{\unitlength}{1cm} \begin{picture}(5,4) \put(2,1.5){\circle{.2}} \put(2,1.5){\circle{.6}} \put(2,1.5){\circle{1}} \put(2,1.5){\circle{1.4}} \put(0,0){\line(0,1){3}} 8
ˇ ˇ ˚ 3. P REHLED N EKTERÝCH VYBRANÝCH KRESLÍCÍCH NÁSTROJ U
\put(0,0){\line(1,0){4}} \put(0,3){\line(4,-3){4}} \qbezier(1.5,2.5)(4.5,4)(3,1) \qbezier(2,3.5)(2,1.5)(4,1.5) \end{picture}
Z Z
Z '$ Z Z Ze Z Z &% Z Z Z Z
3.2 PSTricks Dalším velice populárním a dnes stále hojnˇe rozšíˇreným nástrojem je PSTricks (PostScript Tricks). Jedná se o balík pˇrevážnˇe postscriptových maker. Na rozdíl od picture se jedná již plnohodnotný kreslící nástroj, se kterým lze nakreslit témˇerˇ cokoli. Je souˇcástí nˇekolika distribucí, napˇr. TEXLive, teTEX a MiKTEX. Znaˇcným „omezením“ je, že pro vykreslování využívá postskript a jeho pˇríkazy, konkrétnˇe pˇríkaz \special. Z toho plyne nutnost pˇrekladu do formátu PS. Pokud se ale nechceme vzdát pˇrímého pˇrekladu do formátu PDF, je možné toto omezení obejít použitím nˇekterých dalších balíku, ˚ napˇríklad pst-pdf nebo PDFTricks, které ovšem nezaruˇcují ve všech pˇrípadech, že pˇreklad bude úspˇešný. Nástroj PSTricks se skládá z nˇekolika desítek ucelených balíku. ˚ Každý z balíku˚ rozšiˇruje možnosti kreslení o další prvky. Pokud pro kreslení nˇejaké skupiny objektu˚ balík neexistuje, je možné pomocí postscriptových pˇríkazu˚ dopsat požadované funkce. Všechny balíky, které použijeme, je nutné zavést pomocí pˇríkazu \usepackage{balík}. Pˇri používání balíku˚ je tˇreba zavést nejdˇríve balíky pstricks, pst-plot, pst-node a pst-tree a poté teprve až další balíky. Následující pˇrehled nˇekolika vybraných balíku˚ je pouze nepatrnou cˇ ástí, na domovské stránce http://tug.org/PSTricks/ lze nalézt rozsáhlejší pˇrehled a informace o jednotlivých balících: 9
ˇ ˇ ˚ 3. P REHLED N EKTERÝCH VYBRANÝCH KRESLÍCÍCH NÁSTROJ U
pst-node pst-fill pst-coil pst-grad pst-abspos pst-func pst-tree pst-text pst-3d
balík pro práci s uzly balík umožnující ˇ výplnˇe balík pro vykreslování spirál balík umožnující ˇ barevné pˇrechody balík umožnující ˇ používání absolutních souˇradnic vykreslování speciálních matematických funkcí balík pro stromy balík pro práci s textem balík pro základní 3D operace
Kreslit je možné bud’to pˇrímo do textu (pˇrevážnˇe jednoduché tvary) nebo do prostˇredí \begin{pspicture}. Pˇri použití prostˇredí je nutné nastavit velikost obrázku. Dále je možné nastavit úˇcaˇrí. PSTricks používá jako výchozí jednotku 1cm. Pro zmˇenu výchozích parametru˚ slouží pˇríkaz \psset. Základní objekty, které lze kreslit pomocí PSTricks, jsou cˇ áry, polygony, kruhy, elipsy, výseˇce, kˇrivky, ruzné ˚ teˇcky a mˇrížky. Výchozí tloušt’ka cˇ áry (linewidth) je nastavena na .8pt a výchozí barvou je cˇ erná. Další definované barvy jsou bílá, cˇ ervená, zelená, modrá, žlutá, azurová, purpurová a 3 odstíny šedé. Ostatní barvy je možné dodefinovat pomocí \definecolor{oznaˇ cení}{režim}{složky}, kde {oznaˇ cení} je pojmenování definované barvy, {režim} je použitý barevný režim (napˇr. RGB, CMYK, . . . ) a {složky} je zastoupení jednotlivých složek barevného režimu. Hodnoty každé barvy musí být z intervalu h0, 1i. Oproti picture již existuje více zpusob ˚ u, ˚ jak vykreslit nˇejaký objekt. Následující výˇcet se týká nˇekolika základních objektu, ˚ které má nástroj PSTricks spoleˇcné s picture. Hvˇezdiˇcková forma slouží pro vykreslení plných objektu. ˚ Jako parametry lze zadat napˇríklad tloušt’ku, barvu cˇ i styl cˇ áry, otoˇcení, mˇerˇ ítko nebo barvu výplnˇe. •
\psline[parametry]{šipka}(x0,y0)(x1,y1)...(xn,yn) nakreslí cˇ áru z bodu (x0,y0) do (xn,yn) pˇres (x1,y1), (x2,y2), . . . ; {šipka} urˇcuje, má-li se vykreslit jenom cˇ ára (výchozí nastavení) nebo šipka
•
\qline(x0,y0)(x1,y1) obdoba \psline, vykreslí cˇ áru z bodu (x0,y0) do bodu (x1,y1); nemá žádná další možná nastavení
•
\pscircle[parametry](x0,y0){polomˇ er} vykreslí kruh o urˇceném polomˇeru se stˇredem v (x0,y0) 10
ˇ ˇ ˚ 3. P REHLED N EKTERÝCH VYBRANÝCH KRESLÍCÍCH NÁSTROJ U
•
\qdisk(x0,y0){polomˇ er} obdoba \pscircle* bez nastavitelných parametru˚
•
\pswedge[parametry](x0,y0){polomˇ er}{α}{β} vykreslí kruhovou výseˇc od {α} do {β}; úhly jsou ve stupních
•
\psellipse[parametry](x0,y0)(x1,y1) vykreslí elipsu se stˇredem v (x0,y0) a šíˇrkou a výškou urˇcenou (x1,y1)
•
\psarc[parametry]{šipka}(x,y){polomˇ er}{α}{β} vykreslí oblouk jako cˇ ást kruhu se stˇredem v (x,y)
•
\psarcn[parametry]{šipka}(x,y){polomˇ er}{α}{β} obdoba \psarc, vykreslí oblouk v protismˇeru hodinových ruˇciˇcek
•
\psellipticarc[parametry]{šipka}(x0,y0)(x1,y1){α}{β} obdoba \psarc, vykreslí cˇ ást elipsy
•
\psellipticarcn[parametry]{šipka}(x0,y0)(x1,y1){α}{β} obdoba \psarcn a \psellipticarc, vykreslí cˇ ást elipsy v protismˇeru hodinových ruˇciˇcek
•
\psbezier[parametry]{šipka}(x0,y0)(x1,y1)(x2,y2)(x3,y3) nakreslí Bézierovu kˇrivku z bodu (x0,y0) do bodu (x3,y3); prostˇrední 2 body urˇcují „prohnutí“
Kromˇe tˇechto pˇríkazu˚ jsou definovány napˇríklad cˇ tyˇrúhelník (\psframe), parabola (\psparabola), ruzné ˚ kˇrivky (\pscurve, \psecurve cˇ i \psccurve), polygon (\pspolygon), trojúhelník (\pstriangle), mˇrížky (\psgrid) a další. Pro vykreslení objektu vˇetšinou není nutné zadávat všechny informace. Parametry, šipky a poˇcáteˇcní souˇradnice (x0,y0) nejsou povinné a v pˇrípadˇe, že nejsou zadány, použije se výchozí nastavení. Výjimku tvoˇrí pˇríkazy zaˇcínající písmenem q, které nemají volitelná nastavení, a je nutné zadat všechny údaje. Objekty lze vykreslovat plnou cˇ arou, teˇckovanˇe i cˇ árkovanˇe cˇ i dvojitˇe. Pomocí parametru dimen je možné nastavit, zda má být objekt vykreslen na stˇred, vnˇe cˇ i uvnitˇr zadaných souˇradnic. Šipky je možné zvolit z nabídky témˇerˇ dvou desítek pˇredem definovaných, které je navíc možno mezi sebou libovolnˇe kombinovat. Pokud by ani to nˇekomu nestaˇcilo, muže ˚ si nadefinovat vlastní vzhled šipky nebo upravit parametry stávající. 11
ˇ ˇ ˚ 3. P REHLED N EKTERÝCH VYBRANÝCH KRESLÍCÍCH NÁSTROJ U
Samozˇrejmostí je také vícenásobné vykreslování objektu˚ pomocí \multiput, \multips cˇ i \multido, otáˇcení objektu˚ pomocí \rput cˇ i parametrem gangle nebo vkládání textu takˇrka kamkoli pomocí nejruznˇ ˚ ejších boxu. ˚ Oproti picture již nemusí být objekty vybarveny pouze jednou barvou, ale lze vytváˇret napˇríklad barevné pˇrechody. Také již je možné mˇenit tloušt’ky cˇ ar na libovolných místech v obrázku nebo používat polární soustavu souˇradnic. Bézierovy kˇrivky jsou definovány oproti picture ponˇekud odlišnˇe. Pomocí PSTricks je možné již vykreslovat nejruznˇ ˚ ejší grafy, diagramy, stromy, mozaiky, prostorové objekty a další. Uvedený výˇcet se týká pouze tˇech nejzákladnˇejších funkcí. PSTricks je velmi mocný nástroj, se kterým je možné nakreslit již témˇerˇ cokoli. Navíc k PSTricks vznikají stále nové balíky, at’ již oficiální cˇ i neoficiálních, které tento nástroj neustále rozvíjejí. Pro srovnání s picture je zde ukázka zdrojového kódu s výsledným obrázkem: \begin{pspicture}(5,4) \pscircle(2,1.5){.1} \pscircle(2,1.5){.3} \pscircle(2,1.5){.5} \pscircle(2,1.5){.7} \psline(0,0)(0,3)(4,0)(0,0) \pscurve(1.5,2.5)(3.4,2.9)(3,1) \pscurve(2,3.5)(2.5,2)(4,1.5) \end{pspicture}
Soustˇredné kružnice je možné vykreslit i pomocí pˇríkazu \multido. Tento pˇríkaz vyžaduje zavedení souboru multido.sty nebo multido.sty. PSTricks má pro vykreslování cˇ ar ještˇe pˇríkaz \qline, který vykresluje úseˇcky. Pokud zamˇeníme zmínˇené pˇríkazy, obrázek se nijak nezmˇení, ale zdrojový kód obrázku vypadá následovnˇe: 12
ˇ ˇ ˚ 3. P REHLED N EKTERÝCH VYBRANÝCH KRESLÍCÍCH NÁSTROJ U
\begin{pspicture}(5,4) \multido{\n=0.1+0.2}{4}{% \pscircle(2,1.5){\n}} \qline(0,0)(0,3) \qline(0,3)(4,0) \qline(4,0)(0,0) \pscurve(1.5,2.5)(3.4,2.9)(3,1) \pscurve(2,3.5)(2.5,2)(4,1.5) \end{pspicture}
3.3 PGF and TikZ ˇ Nejmladší z trojice zde popisovaných nástroju. ˚ Casto bývá oznaˇcován jako nástupce PSTricks. Zkratka PGF „znamená“ Portable Graphics Format nebo také Pretty, Good, Functional. Je souˇcástí distribucí TEXLive a MiKTEX. Pro vykreslování se v závislosti na použitém pˇrekladaˇci upravují pˇríkazy \special. Samotný nástroj se skládá z nˇekolika vrstev. Systémová vrstva má na starosti modifikaci pˇríkazu˚ \special tak, aby bylo možné nakreslené obrázky pˇrekládat nezávisle na zvoleném programu. Základní vrstva poskytuje pˇríkazy, pomocí ˇ kterých je možné snadno vykreslovat složitˇejší tvary. Celní vrstva usnadnuje ˇ vykreslování pˇríkazu˚ základní vrstvy. Chceme-li kreslit pomocí PGF, je tˇreba nejprve zavést balík tikz. Obdobnˇe jako PSTricks, je i nástroj PGF rozdˇelen do nˇekolika knihoven. Knihovny jsou zamˇerˇ eny na kreslení urˇcitých celku. ˚ K dispozici je napˇríklad knihovna pro kreslení stavových automatu, ˚ Petriho sítí, kalendáˇru, ˚ šipek, stínování cˇ i stromu. ˚ Pro zavedení knihovny slouží pˇríkaz \usetikzlibrary{knihovna}. Kreslení je realizováno uživatelsky velice pˇríjemnou vrstvou TikZ. Pˇríkazy jsou kombinací pˇríkazu˚ METAFONTu a PSTricks. V PGF, na rozdíl od ostatních nástroju, ˚ existuje více zpusob ˚ u, ˚ jak lze zapisovat pˇríkazy pro vykreslování objektu. ˚ Jednoduché obrázky lze kreslit pˇrímo do textu. Pˇred vykreslovaným objektem je zapotˇrebí uvést pˇríkaz \tikz. Obrázky se vykreslují také do prostˇredí \begin{tikzpicture}. Oproti PSTricks, kde se u prostˇredí nastavují napˇríklad parametry cˇ ar, je v PGF možné globálnˇe nastavit témˇerˇ všechny parametry vˇetšiny objektu˚ v obrázku. Vˇetšina základních objektu˚ je vykreslována pˇríkazem \path[draw]. Je však možné použít jen „zkrácenou“ formu \draw. Oproti ostatním nástrojum ˚ je v PGF každý pˇríkaz ukonˇcen stˇredníkem. Výchozí jednotkou je 1cm. Body lze zadávat nˇekolika ruznými ˚ zpusoby. ˚ Následující tˇri pˇríkazy jsou navzájem ekvivalentní: 13
ˇ ˇ ˚ 3. P REHLED N EKTERÝCH VYBRANÝCH KRESLÍCÍCH NÁSTROJ U
\draw \draw \draw \draw
(1,0)--(0,1)--(1,2)--(2,1)--cycle; (1,0)-- ++(-1,1)-- ++(-1,-1)-- ++(1,-1)--cycle; (1,0)-- +(-1,1)-- +(-2,0)-- +(-1,-1)--cycle; (1,0)--(-1,1)--(-2,0)--(-1,-1)--cycle;
Tyto zápisy je navíc možné libovolnˇe kombinovat, takže stejný objekt vykreslí i pˇríkaz \draw (1,0)--(0,1)-- +(1,1)-- ++(2,0)--cycle;. Pˇríkazy, které mají na konci cycle jsou ekvivalentní s pˇríkazy, které jsou zakonˇceny výchozím bodem. Použití cycle zjednodušuje zápis a zpˇrehlednuje ˇ kód obrázku, protože je hned na první pohled patrné, že se jedná o nˇejaký spojitý útvar. Vykreslování základních objektu˚ (ˇcar, mˇrížek, cˇ tvercu˚ a obdélníku, ˚ kruhu˚ a elips, výseˇcí cˇ i Bézierových kˇrivek) je možné pomocí pˇríkazu \draw a jejich zápis je velice podobný. •
\draw (x0,y0) -- (x1,y1) -- . . . -- (xn,yn); vykreslí cˇ áru z bodu (x0,y0) do bodu (xn,yn) pˇres všechny zadané body; je-li místo posledního bodu zadáno cycle, spojí se poslední bod s prvním;
•
\draw (x0,y0) grid (x1,y1); vykreslí mˇrížku z bodu (x0,y0) do bodu (xn,yn);
•
\draw (x0,y0) rectangle (x1,y1); vykreslí pravoúhlý cˇ tyˇrúhelník, jehož protilehlé vrcholy mají souˇradnice (x0,y0) a (xn,yn);
•
\draw (x0,y0) circle (polomˇ er); vykreslí kruh se stˇredem v (x0,y0);
•
\draw (x0,y0) ellipse (šíˇ rka and výška); vykreslí elipsu se stˇredem v (x0,y0), kde šíˇ rka je délka hlavní poloosy a výška délka vedlejší poloosy;
•
\draw (x0,y0) arc (α:β:polomˇ er); vykreslí cˇ ást kružnice se stˇredem v (x0,y0) a zadaným polomˇerem od úhlu α po úhel β;
•
\draw (x0,y0) .. controls (ref1) and (ref2) .. (x3,y3); vykreslí Bézierovu kˇrivku z bodu (x0,y0) do bodu (x3,y3); bod (ref1) (pˇrípadnˇe i nepovinný (ref2)) urˇcuje referenˇcní bod; 14
ˇ ˇ ˚ 3. P REHLED N EKTERÝCH VYBRANÝCH KRESLÍCÍCH NÁSTROJ U
Pomocí \draw lze vykreslovat stejné objekty vícekrát, kdy se postupnˇe mohou mˇenit souˇradnice objektu. V pˇrípadˇe kružnice muže ˚ sloužit jako obdoba multido v PSTricks. Napˇríklad: \draw (0,0) circle (1) circle (2) circle (3); vykreslí tˇri soustˇredné kružnice o polomˇerech 1, 2 a 3. V PSTricks by pˇríkaz pomocí multido vypadal takto: \multido{\n=1+1}{3}{\pscircle(0,0){\n}} Tento zpusob ˚ ale nefunguje u všech objektu. ˚ V PGF existuje pˇríkaz \foreach, který zastává funkci multido. Výše uvedený pˇríklad s kružnicí vypadá za pomoci foreach následovnˇe: \foreach \x in {1,2,3} \draw (0,0) circle (\x); Také je možné jediným pˇríkazem \draw nakreslit obrázek skládající se z ruz˚ ných základních objektu˚ navazujících na sebe. Pokud chceme nakreslit Bézierovu kˇrivku, obdélník a kružnici, mužeme ˚ místo: \draw (0,.5) .. controls (.75,-.5) and (1.25,1) .. (2,0); \draw (2,0) rectangle (3,.5); \draw (3,.5) circle (.3); napsat jen: \draw (0,.5) .. controls (.75,-.5) and (1.25,1) .. (2,0) rectangle (3,.5) circle (.3); Tento zpusob ˚ je vhodný v situacích, kdy nepoužíváme prostˇredí, ale objekt kreslíme pˇrímo do textu. Za \tikz muže ˚ být pouze jeden pˇríkaz. Pokud chceme do textu zapsat více pˇríkazu˚ za sebou a nepoužít prostˇredí, musíme všechny pˇríkazy dát do složených závorek. Tento zpusob ˚ není pˇríliš prakticky, protože když budeme chtít mezi pˇríkazy dopsat nˇejaký text, musíme znovu všechno uzávorkovat. Další možností je pˇred každý pˇríkaz napsat \tikz, což je zase zbyteˇcné. Každý pˇríkaz muže ˚ mít za sebou v hranatých závorkách uvedené parametry, kterými mohou být napˇríklad tloušt’ka, styl cˇ i barva cˇ áry, smˇer šipek, hustota mˇrížek, okraje, zaoblení hran, výplnˇe, umístˇení, popisy cˇ i celé objekty. Napˇríklad modrou cˇ árkovanou cˇ áru lze vykreslit pomocí \draw[dashed,blue] (x0,y0) -- (x1,y1);. Velmi duležitými ˚ prvky nástroje PGF, u kterých se používají parametry, jsou uzly. Uzly mají i tu výhodu, že je lze umist’ovat pomocí kartézské soustavy souˇradnic, polárních souˇradnic, jejich pojmenovaní cˇ i rela15
ˇ ˇ ˚ 3. P REHLED N EKTERÝCH VYBRANÝCH KRESLÍCÍCH NÁSTROJ U
tivnˇe. Uzly samy o sobˇe se nevykreslují (pouze se vypíše pˇrípadný text, který je napsán ve složených závorkách), ale právˇe pomocí parametru˚ jim lze nastavit tvar, barvu, velikost, atd. Uzly, stejnˇe jako ostatní objekty, lze zapisovat více zpusoby. ˚ Zde jsou uvedeny cˇ tyˇri základní: \node at (x,y) [parametry] {}; \node (jméno) at (x,y) [parametry] {}; \node[parametry] (jméno) at (x,y) {}; \node[parametry] (jméno) [umístˇ ení] {}; Zajímavou a užiteˇcnou vlastností PGF je možnost nastavování parametru˚ pro celou skupinu objektu˚ a vytváˇrení vlastních objektu. ˚ Slouží k tomu pˇríkaz \tikzstyle{objekt}=[parametry], který je možné použít jak uvnitˇr prostˇredí tikzpicture, tak i mimo nˇej. Napˇríklad pokud chceme kreslit pouze teˇckované kružnice, mužeme ˚ místo neustále se opakujícího \node[draw,circle, dotted] definovat \tikzstyle{dotted circle}=[draw,circle,dotted] a psát pouze \node[dotted circle]. Tímto zpusobem ˚ je možné si pohodlnˇe nadefinovat všechny použité styly. Zdrojový kód obrázku bude pak pˇrehlednˇejší a bude snazší cokoli zmˇenit. Text lze vkládat do obrázku˚ pomocí uzlu˚ dvˇema zpusoby. ˚ První z nich je napsání textu do složených závorek. Tento text bude umístˇen na stˇred uzlu. Pokud je uzlem napˇríklad kružnice cˇ i cˇ tyˇrúhelník a zadaný text by se objektu nevešel, automaticky se zvˇetší rozmˇery objektu. Druhou možností je použití parametru label a urˇcení pozice, kde se má popisek zobrazit. Pro zobrazení textu vlevo od uzlu je potˇreba zadat label=180:vlevo. Pozice (v tomto pˇrípadˇe 180) je zadána ve stupních. Další možností je použít pˇredem definované názvy, což by vypadalo takto: label=left:vlevo. Pro srovnání s pˇredešlými nástroji následuje zdrojový kód a výsledný obrázek vytvoˇrený pomocí PGF. \begin{tikzpicture} \foreach \x in {.1,.3,.5,.7} \draw (2,1.5) circle (\x); \draw (0,0)--(0,3)--(4,0)--cycle; \draw (1.5,2.5).. controls (3.2,3.5) and (4.2,3.2)..(3,1); \draw (2,3.5).. controls (2.2,1.9) and (2.4,1.8)..(4,1.5); \end{tikzpicture}
16
ˇ ˇ ˚ 3. P REHLED N EKTERÝCH VYBRANÝCH KRESLÍCÍCH NÁSTROJ U
Bez použití \foreach a cycle vypadá zdrojový kód obrázku takto: \begin{tikzpicture} \draw (2,1.5) circle (.1) circle (.3) circle (.5) circle (.7); \draw (0,0)--(0,3)--(4,0)--(0,0); \draw (1.5,2.5).. controls (3.2,3.5) and (4.2,3.2)..(3,1); \draw (2,3.5).. controls (2.2,1.9) and (2.4,1.8)..(4,1.5); \end{tikzpicture}
17
Kapitola 4
Srovnání kreslících nástroju˚ Prostˇredí picture je z popisovaných nástroju˚ nejstarší. Má tu výhodu, že je soucˇ ástí LATEX 2 a že je nezávislé na pˇrekladaˇci. Bohužel ale také obsahuje jen velice málo pˇríkazu˚ a bitmapový font není vhodný pro vykreslování šikmých cˇ ar. Pro vykreslování složitˇejších obrázku˚ je picture nevhodné. Z tˇechto duvod ˚ u˚ se jím v tomto srovnání již nebudu více zabývat a zamˇerˇ ím se na porovnávání zbývajících dvou nástroju. ˚ PSTricks je nástroj, který již existuje pˇres 10 let. Za tu dobu k nˇemu existuje velká spousta doplnk ˇ u˚ a rozšíˇrení. Navíc je založen na postscriptu, takže je v nˇem možné nakreslit témˇerˇ cokoli. Ovšem právˇe zminovaný ˇ postscript s sebou nese i jednu v dnešní dobˇe docela znaˇcnou nevýhodu – není možné použít pdftex. Oproti tomu mladší PGF, který se oddˇelil od Beameru a samostatnˇe vyvíjí teprve od roku 2005, je nezávislý na použitém pˇrekladaˇci. Obsahuje pˇríjemnou uživatelskou vrstvu tikz, podporuje více zpusob ˚ u˚ zapisování pˇríkazu, ˚ vychází cˇ ásteˇcnˇe z PSTricks a METAPOST. Poˇcet doplnk ˇ u˚ a balíˇcku˚ je o poznání menší než v pˇrípadˇe PSTricks. Oba dva nástroje používají rozšíˇrení at’ již v podobˇe balíˇcku˚ cˇ i knihoven. V PGF jsou knihovny daleko obsáhlejší a ucelenˇejší než balíˇcky v PSTricks. U PSTricks navíc ještˇe musí být základní balíˇcky zavedeny pˇred ostatními. V tomto ohledu je praktiˇctˇejší právˇe PGF. Pokud se podíváme na možnosti kreslení, vidíme, že oba dva nástroje umožnují ˇ kreslení pˇrímo do textu i do prostˇredí. Pˇri kreslení do textu nevyžaduje PSTricks žádné zvláštní pˇríkazy. V PGF musí pˇred pˇríkazem být vždy \tikz. Prostˇredí obou nástroju˚ je na první pohled podobné. Pˇri bližším prozkoumání ale zjistíme, že PSTricks vyžaduje stejnˇe jako prostˇredí picture zadání velikosti kresleného obrázku. Pokud se velikost obrázku nezadá, pˇreklad probˇehne v poˇrádku, ale výsledný obrázek se liší od oˇcekávaného. Napˇríklad u ilustraˇcního obrázku se pˇri vynechání rozmˇeru nevykreslí kružnice a svislá cˇ ára:
18
4. S ROVNÁNÍ KRESLÍCÍCH NÁSTROJ U˚ \begin{pspicture}%(5,4) \multido{\n=0.1+0.2}{4}{% \pscircle(2,1.5){\n}} \qline(0,0)(0,3) \qline(0,3)(4,0) \qline(4,0)(0,0) \pscurve(1.5,2.5)(3.4,2.9)(3,1) \pscurve(2,3.5)(2.5,2)(4,1.5) \end{pspicture}
Kromˇe toho má PSTricks možnost nastavit pouze úˇcaˇrí, kdežto PGF umožnuje ˇ nastavit pomocí parametru˚ témˇerˇ vše. Definování vlastních stylu˚ je v obou nástrojích možné jak pˇrímo v prostˇredí, tak i mimo nˇe. V PGF k tomuto úˇcelu slouží pˇríkaz \tikzstyle{objekt}= [parametry]. Jako parametry je možné zadávat napˇríklad minimum size=8, dashed,draw. PSTricks používá \newpsstyle{jméno}{parametry}, ale parametry musí být stylem parametr=hodnota. PSTricks má ještˇe pro definování vlastních objektu˚ pˇríkaz \newpsobject{jméno}{objekt}{parametry}. Samotné pˇríkazy se u porovnávaných nástroju˚ liší asi nejvíce. Zatímco v pˇrípadˇe PSTricks mají všechny pˇríkazy jasnˇe dané parametry cˇ i nastavení, v PGF je možné více ruzných ˚ zápisu˚ téhož pˇríkazu. Díky této volnosti si každý muže ˚ vybrat styl, který mu lépe vyhovuje. Dalším rozdílem je také to, že pˇríkazy v PGF musí konˇcit stˇredníkem. V PGF také oproti PSTricks nezáleží na tom, zda mezi parametry je cˇ i není nˇejaký bílý znak. PSTricks je velice obsáhlý, ale oproti PGF není moc uživatelsky pˇrívˇetivý a chybí již zminovaný ˇ pˇrímý pˇrekladu do formátu PDF. PGF sice neobsahuje tolik funkcí, ale jeho autor, Till Tantau, vytvoˇril ucelené knihovny pro ruzné ˚ oblasti použití – napˇríklad knihovnu pro práci s kalendáˇri, Petriho sítˇemi, diagramy cˇ i koneˇcnými automaty. Z mého pohledu je „vítˇezem“ tohoto srovnání právˇe PGF. 19
Kapitola 5
Implemetace Jako nástroj, do kterého budou implementovány nové funkce, jsem zvolil po pˇredchozím srovnání PGF. Funkce, které se budou implementovat, byly vybrány na základˇe obrázku˚ z Petriho sítí, když nˇekterou cˇ ást nebylo možné nakreslit nebo kreslení bylo pˇríliš obtížné. Popisky pomocí label je možné umístit nahoru a dolu. ˚ Takto umístˇený text je ale zarovnán na stˇred, což v nˇekterých pˇrípadech nemusí být vhodné. Pozice textu je možné zadávat ve stupních nebo pomocí definovaných názvu. ˚ above lef t (135◦ ) lef t (180◦ )
above (90◦ )
above right (45◦ ) right (0◦ )
below lef t (225◦ ) below right (315◦ ) ◦ below (270 ) Vzhledem k tomu, že ve zdrojovém kódu obrázku je pˇrehlednˇejší používání „názvu“ ˚ než stupnˇ u, ˚ dodefinoval jsem i „zarovnané“ horní a dolní popisky. above f lushlef t (95◦ ) above f lushright (85◦ )
below f lushlef t (265◦ ) below f lushright (275◦ ) Další problém nastal pˇri kreslení vícenásobných hran mezi dvˇema uzly. PGF podporuje pouze jednoduché hrany. Jednou z možností, jak toto omezení obejít, je použít u hran prohnutí, aby se navzájem nepˇrekrývaly. Toto rˇ ešení ale není moc elegantní. 20
5. I MPLEMETACE \node[place] (p1) {1}; \node[transition] (t1) [right of=p1] {2} edge[pre,bend left] (p1) edge[pre,bend right] (p1);
1
2
Pro potˇreby pˇrekreslení rovných dvojitých hran mezi vrcholy jsem definoval pˇríkazy \doubleh a \doublev, které vykreslí dvojité hrany mezi zadanými uzly. \node[place] (p1) {1}; \node[transition] (t1) [right of=p1] {2}; \node[place] (p2) [below of=p1] {3}; \node[transition] (t2) [right of=p2] {4}; \doublev{pre}{p1}{t1}; \doublev{post}{p1}{t1}; \doubleh{pre}{p1}{p2}; \doubleh{post}{t1}{t1}; \doubler{pre}{t1}{p2}; \doublel{post}{p1}{t2}; 1
2
3
4
Definice „zarovnaných“ popisu˚ vycházejí z již nadefinovaných popisu˚ (left, above, above left, . . . ). Každému popisu odpovídá urˇcitý úhel. Pokud je úhel o 5 stupnˇ u˚ menší cˇ i vˇetší, vypadá to, že je text zarovnán. Oproti formátování textu má tento zpusob ˚ výhodu v tom, že se už nemusí rˇ ešit odsazení. Kdyby se totiž zarovnaný text neodsadil, pˇri použití pravého i levého zarovnání souˇcasnˇe by se popisky mohly dotýkat a zhoršila by se pˇrehlednost obrázku. Dvojité šipky jsou rˇ ešeny na vyšší úrovni PGF. Pˇríkazy vykreslují dvˇe šipky. Každá šipka má posunutý výchozí a koncový bod o nˇekolik stupnˇ u˚ tak, aby ve výsledku vypadaly jako jedna dvojitá šipka. 21
Kapitola 6
Závˇer Každý, kdo nˇekdy psal v LATEXu dokument, asi už nˇekdy narazil na problém, jak vkládat obrázky. Zpusob ˚ u˚ je více a každý má své a nevýhody. Cílem této práce bylo zamˇerˇ it se na nástroje, které umožnují ˇ kreslit obrázky pˇrímo do zdrojového kódu. Ve své práci jsem shrnul nejduležitˇ ˚ ejší vlastnosti tˇechto nástroju. ˚ Dále jsem si vybral tˇri nejznámˇejší a nejpoužívanˇejší nástroje, které jsem struˇcnˇe popsal a následnˇe mezi sebou porovnal. Z porovnávání vzešel jeden nástroj, který byl z trojice „nejlepší“. Do tohoto nástroje jsem implementoval nové funkce, které byly duležité ˚ pro pˇrekreslení obrázku˚ z materiálu˚ k Petriho sítím. Pro pˇrekreslení obrázku˚ bylo zapotˇrebí vyˇrešit hlavnˇe dvojité hrany mezi vrcholy. Vzhledem k nízkému poˇctu obrázku˚ s násobnými hranami jsem zvolil jednodušší implementaci pomocí vykreslování dvou šipek. Výhodou je, že díky vcelku jednoduchým definicím není nutné zavádˇet celý soubor, ale staˇcí jen zkopírovat požadované definice. Jako další funkce jsem doplnil možnost zadávat zarovnaný text pomocí textových popisku, ˚ které napomáhají zpˇrehlednit cˇ itelnost zdrojového kódu. Pro potˇreby pˇrekreslení obrázku˚ k Petriho sítím byla následující implementace dostacˇ ující. Definovány byly celkem 4 nové popisy a dvojité šipky pro uzly ležící nad sebou, vedle sebe a pod úhlem 45◦ . Protože však by se mohlo nˇekdy v budoucnu stát, že u nˇejakého rozsáhlejších obrázku˚ bude potˇreba vykreslovat více násobných hran nebo budou uzly jinak uspoˇrádány, hodlám se problematice vykreslování násobných hran dále vˇenovat a navrhnout univerzálnˇejší rˇ ešení, které by už fungovalo i pro vícenásobné hrany s možností nastavení nejruznˇ ˚ ejších parametru. ˚ Na závˇer zde uvádím pˇríklad pˇrekresleného obrázku s pomocí novˇe implementovaných funkcí:
22
ˇ 6. Z ÁV ER
\node [place] (p1) [label=above flushleft:$\rm H^+$] \node [transition] (t1) [below left of=p1] \node [transition] (t2) [below right of=p1] \node [place] (p2) [below right of=t1, label=275:$\rm e^-$] \node [place,tokens=2] (p3) [left of=t1, label=above flushleft:$\rm H_2 C_2 O_4$ (2 molekuly)] edge [post] (t1); \node [place] (p4) [below of=t1, label=below flushleft:$\rm C O_2$] \node [place,tokens=4] (p5) [above of=t2, label=above flushright:$\rm H_2 O_2$ (4 molekuly)] \node [place] (p6) [right of=t2, label=above flushright:$\rm H_2 O$] edge [pre] (t2); \doubler{pre}{p1}{t1}; \doublel{post}{t1}{p2}; \doublev{post}{t1}{p4}; \doublel{post}{p1}{t2}; \doubler{pre}{t2}{p2}; \doublev{post}{p5}{t2};
{}; {}; {}; {}; {}
{}; {}; {}
H2 O2 (4 molekuly)
H+ H2 C2 O4 (2 molekuly)
H2 O
CO2
e−
23
Kapitola 7
Použitá literatura CTAN: Comprehensive TEX archive network [online] http://ctan.org/ Handy Websites – TEX & LATEX [online] http://www-personal.buseco.monash.edu.au/~sgrose/handy/ tex.htm OLŠÁK, Petr. TEXbook naruby OLŠÁK, Petr. První setkání s TEXem ˇ RYBICKA, Jan. LATEX pro zaˇcáteˇcníky SOPUCH, Pavel a FORMÁNEK, Pavel. LATEX v kostce [online] http://www.it.cas.cz/manual/latex/ ˇ Radek. LATEX manual BEDNÁR, GOOSSENS, Michel, MITTELBACH, Frank a SAMARIN, Alexander. The LATEX companion SHAN, Lin. LATEX Help Files, Lesson 20: LATEX Picture environment. OETIKER, Tobias, PARTL, Hubert, HYNA, Irene a SCHLEGL Elisabeth. The Not So Short Introduction to LATEX 2 OBERDIEK, Heiko. The picture package OSWALD, Urs. Graphics in LATEX 2 24
7. P OUŽITÁ LITERATURA BRABEC, Stanislav. Grafika v UNIXu AYARI, M. Iadh a AYARI, Sahbi. Using LATEX to Prepare In-Class Quizzes LAMPORT, Leslie. LATEX: A Document Preparation System. User’s Guide and Reference Manual EXELL, Robert H. B. LATEX – A Typesetting Program [online] http://www.jgsee.kmutt.ac.th/exell/General/LaTeX.html The picture Environment [online] http://www.ursoswald.ch/LaTeXGraphics/picture/ picture.html ZÁVODNÝ, Miroslav. Jednoduché obrázky v LATEXu VAN ZANDT, Timothy. PSTricks: User’s Guide The pspicture Environment [online] http://www.ursoswald.ch/LaTeXGraphics/pstricks/ pstricks.html The Indian TeX User Group. Online LATEX Tutorial: PSTricks [online] http://sarovar.org/projects/pstricks/ MERTZ, Andrew a SLOUGH, William. Graphics with TikZ TANTAU, Till. The TikZ and PGF Packages [online] http://sourceforge.net/projects/pgf/ FAUSKE, Kjell Magne. Web site fauskes.net [online] http://www.fauskes.net/ RECKDAHL, Keith. Using Imported Graphics in LATEXand pdfLATEX [online] ftp://ftp.dante.de/tex-archive/info/epslatex.pdf
25
Dodatek A
Zdrojový soubor \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{labels} % \RequirePackage{tikz} % % flushed labels % \expandafter\def\csname tikz@label@angle@is@above flushright\endcsname{\def\tikz@label@angle{85}} \expandafter\def\csname tikz@label@angle@is@above flushleft\endcsname{\def\tikz@label@angle{95}} \expandafter\def\csname tikz@label@angle@is@below flushright\endcsname{\def\tikz@label@angle{275}} \expandafter\def\csname tikz@label@angle@is@below flushleft\endcsname{\def\tikz@label@angle{265}} % % double edges % % horizontal \newcommand*{\doubleh}[3]{ \draw[#1] (node cs:name=#2,anchor=12) -(node cs:name=#3,anchor=168); \draw[#1] (node cs:name=#2,anchor=-12) -(node cs:name=#3,anchor=192); } % vertical \newcommand*{\doublev}[3]{ \draw[#1] (node cs:name=#2,anchor=258) -(node cs:name=#3,anchor=102); 26
A. Z DROJOVÝ SOUBOR \draw[#1] (node cs:name=#2,anchor=282) -(node cs:name=#3,anchor=78); } % right \newcommand*{\doubler}[3]{ \draw[#1] (node cs:name=#2,anchor=210) (node cs:name=#3,anchor=60); \draw[#1] (node cs:name=#2,anchor=240) (node cs:name=#3,anchor=30); } %left \newcommand*{\doublel}[3]{ \draw[#1] (node cs:name=#2,anchor=300) (node cs:name=#3,anchor=150); \draw[#1] (node cs:name=#2,anchor=330) (node cs:name=#3,anchor=120); } %
---
---
27