LaTeX/PGF/TikZ
Jedan način da crtate grafiku direktno sa TeX komandama je PGF/TikZ. TikZ može da produkuje grafiku u PDF i PostScript formatu koristeći običan (pdf)TEX, (pdf)Latex ili ConTEXt. Dolazi sa veoma dobrom dokumentacijom i obimnom kolekcijom primera: http://www.texample.net/tikz/
PGF ("portable graphics format") je osnovni sloj, koji pruža set komandi za pravljenje grafike, i TikZ ("TikZ ist kein Zeichenprogramm") je prednji kraj sloja sa specijalnom sintaksom, koja omogućava olakšano korišćenje PGF-a . TikZ komande su pretežno slične Metafont komandama, opcioni mehanizam je sličan PsTricks sintaksi.
Dok se prethodni sistem (picture, epic, pstricks ili metapost) fokusirao na to kako da crta, TikZ se fokusira na to šta se crta. Može se reći da ono što je TikZ za crtanje u LaTeX-u, to je LaTeX za digitalni typesetting. Preporučuje se njegovo korišćenje ako ga Vaša LaTeX distribucija podržava.
drugi paketi rađeni po TikZ (na primer za crtanje električnih kola) mogu se pronaći ovde: http://ftp.dante.de/tex-archive/help/Catalogue/bytopic.html#pgftikzsection
U sledećeim odeljcima neke osnove TikZ su prikazane.
Učitavanje paketa, Biblioteke - tikzpicture okruženje
urediZa korišćenje TikZ u LaTeX-u dokumentu neophodno je učitavanje tikz paketa:
\usepackage{tikz}
negde u preambuli. Ovo će automatski učitati pgf paket. Da biste učitali dalje korišćenje biblioteke
\usetikzlibrary{⟨листа библиотека одвојених зарезима⟩}
Primeri biblioteka su "arrows
", "automata
", "backgrounds
", "calendar
", "chains
", "matrix
", "mindmap
", "patterns
", "petri
", "shadows
", "shapes.geometric
", "shapes.misc
", "spy
", "trees
".
Komande crtanja moraju da budu zatvorene u okviru tikzpicture okruženja
\begin{tikzpicture}[⟨options⟩]
⟨tikz commands⟩
\end{tikzpicture}
ili alternativno
\tikz[⟨options⟩]{⟨tikz commands⟩}
Jedna moguća opcija korisna za uređenu grafiku je
baseline=⟨dimension⟩
Bez te opcije donji kraj slike postavljen je na osnovnu liniju teksta koji je okružuje. Korišćenjem ove opcije, možete precizirati koji deo slike treba da bude spušten ili podignut tako da visina ⟨dimenzija⟩ bude na osnovnoj liniji.
Još jedna opcija za skaliranje cele slike je
scale=⟨factor⟩
ili drugačije za visinu i širinu, na primer:
xscale=2.5, yscale=0.5
Preciziranje koordinata
urediKoordinate se preciziraju u okruglim zagradama u uobičajenim TEX dimenzijama koristeći Cartesian koordinate (odvojene zagradama), na primer 1cm u x pravcu i 2pt u y pravcu
(1cm,2pt)
ili korišćenjem polarnih koordinata (dvotačkom odvojene), na primer 1cm u 30 stepeni pravcu
(30:1cm)
Bez preciziranja mernih jedinica (1,2)
, standardno su cm (1cm,2cm)
.
Relativne koordinate za prethodno zadatu tačku dodeljuu se tako što se stavljaju jedan ili dva znaka plus ispred koordinata. Sa "++
" poslednja tačka puta postaje trenutna pozicija, sa "+
" prethodna tačka ostaje trenutna tačka puta. Primer: 2 standardne mere desno od poslednje korišćene tačke:
++(2,0)
Sintaksa za puteve
urediPut je niz pravih i krivih linija (uprošćeno objašnjenje). Instrukcija mora da se završi sa tačkomzarez.
\path[<options>]⟨specification⟩;
Jedna instrukcija može da se proteže kroz više linija, ili se više instrukcija može provući kroz jednu liniju.
Opcije za akcije puta su na primer: "draw
", "fill
", "pattern
", "shade
" (fil, u kom se boja lagano menja od jedne do druge), "clip
" (svi sledeći nacrti sve do kraja of trenutnog polja podsečeni protivno trenutnom putu i veličina sledećih puteva neće biti važna za veličinu slike), "use as bounding box
".
"\path
" команда са овим опцијама може се повезати са: "\draw
", "\fill
", "\filldraw
", "\pattern
", "\shade
", "\shadedraw
", "\clip
", "\useasboundingbox
" .
Geometrijska opcija puta: "rotate=<angle in degree>
", "xshift=<length>
", "yshift=<length>
", "scaling=<factor>
", "xscale=<factor>
", "yscale=<factor>
".
Opcija za bojenje puta: "color=<color name>
", "draw=<line color>
", "opacity=<factor>
". Following colors are predefined: red, green, blue, cyan , magenta, yellow, black, gray, darkgray, lightgray, brown, lime, olive, orange, pink, purple, teal, violet and white.
Opcija za debljinu linije: "line width=<dimension>
", and abbreviations "ultra thin
" for 0.1pt, "very thin
" for 0.2pt, "thin
" for 0.4pt (the default width), "semithick
" for 0.6pt, "thick
" for 0.8pt, "very thick
" for 1.2pt, "ultra thick
" for 1.6pt.
Opcija za kraj linije i opcija za spajanje linija: "line cap=<type: round, rect, or butt>
", "arrows=<start arrow kind>-<end arrow kind>
", "rounded corners
", "rounded corners=<size>
", "line join=<type: round, bevel, or miter>
".
Opcija za šablon linije: "dash pattern=<dash pattern>
" (e.g. "dash pattern=on 2pt off 3pt on 4pt off 4pt
"), "dash phase=⟨dash phase⟩
", "solid
", "dashed
", "dotted
", "dashdotted
", "densely dotted
", "loosely dotted
", "double
".
Opcije za fil puta su na primer. "fill=<fill color>
", "pattern=<name>
", "pattern color=<color>
"
Prave linije se dodeljuju sa koordinatama odvojenim sa dva minusa,
\draw (1,0) -- (0,0) -- (0,1);
|
Prva koordinata predstavlja move-to operaciju . Koja je ispraćena nizom “path extension operacija”, kao "-- (coordinates)
".
Isti put sa nešto opcija za crtanje:
\draw[red, dashed, very thick, rotate=30] (1,0) -- (0,0) -- (0,1);
|
Povezani put može se zatvoriti sa "--cycle
" operacijom:
\draw (1,0) -- (0,0) -- (0,1) -- cycle;
|
Dalja move-to operacija u postojećem putu započinje novi deo puta, koji nije povezan sa prethodnim delom puta. Obde: Pomeri do (0,0) pravu liniju do (2,0), pomeri do (0,1) pravu liniju do (2,1):
\draw (0,0) -- (2,0) (0,1) -- (2,1);
|
Povezivanje dve tačke sa dve prave linije koje su samo horizontalne ili vertikalne, korišćenje za horizontalnu pa za vertikalnu
\draw (0,0) -| (1,1);
ili prvo za vertikalnu pa za horizontalnu
\draw (0,0) |- (1,1);
Zakrivljeni putevi mogu da se prave pomoću Bezijerovih krivih, koje se mogu napraviti pomoću "..controls() ..()
" komande, sa jednom ili dve kontrolne tačke.
\draw (0,0) .. controls (1,1) .. (4,0)
(5,0) .. controls (6,0) and (6,1) .. (5,2);
|
Puteve koje korisnik definiše mogu se napraviti pomoću "to
" operacije. Bez opcije korespondira sa pravom linijom, baš kao komanda sa duplim minusom. korišćenjem "out
" i "in
" opcije zakrivljeni put se može napraviti. Na primer "[out=135,in=45]
" uzrukuje da se put napusti pod uglom od 135 stepeni na prvoj koordinati i da stigne pod uglom od 45 steptni u sledećoj koordinati.
\draw (0,0) to (3,2);
\draw (0,0) to[out=90,in=180] (3,2);
\draw (0,0) to[bend right] (3,2);
|
Za pravougaonike postoji specijalna komanda. Koristite move-to operaciju za jedan ćošak a posle "rectangle
" unesite koordinate za ćošak dijagonale. Poslednja postaje nova trenutna tačka.
\draw (0,0) rectangle (1,1);
\shade[top color=yellow, bottom color=black] (0,0) rectangle (2,-1);
\filldraw[fill=green!20!white, draw=green!40!black] (0,0) rectangle (2,1);
|
Za boju fila "green!20!white
" ovo znači 20% zeleno i 80% belo pomešano.
Kružni i eliptični putevi se definišu počevši od njihovih centara a potom korišćenjem "circle command
" ili sa jednom dužinom za poluprečnik kružnice ili sa dve dužine kao polu-osa elipse.
\draw (0,0) circle [radius=1.5];
\draw (0,0) circle (2cm); % old syntax
\draw (0,0) circle [x radius=1.5cm, y radius=10mm];
\draw (0,0) circle (1.2cm and 8mm); % old syntax
\draw (0,0) circle [x radius=1cm, y radius=5mm, rotate=30];
\draw[rotate=30] (0,0) ellipse (20pt and 10pt); % old syntax
|
Komanda "arc
" pravi deo kružnice ili elipse:
\draw (0,0) arc (0:270:8mm);
\draw (0,0) arc (0:315:1.75cm and 1cm);
\filldraw[fill=cyan, draw=blue] (0,0) -- (12mm,0mm) arc (0:30:12mm) -- (0,0);
|
Ili u alternativnoj sintaksi:
\draw (0,0) arc[radius = 8mm, start angle= 0, end angle= 270];
\draw (0,0) arc[x radius = 1.75cm, y radius = 1cm, start angle= 0, end angle= 315];
Postoje dosta predefinisanih komandi za specijalne puteve, kao "grid
", "parabola
", "sin
", "cos
" (sinusna i kocinusna kriva u intervalu [0,π/2]).
\draw[help lines] (0,0) grid (2,3);
\draw[step=0.5, gray, very thin] (-1.4,-1.4) grid (1.4,1.4);
\draw (0,0) parabola (1,1.5) parabola[bend at end] (2,0);
\draw (0,0) sin (1,1) cos (2,0) sin (3,-1) cos (4,0) sin (5,1);
|
Opcija "help lines" označava "fine gray".
Da dodate strličaste vrhove postoje jednostavne opcije:
\draw [->] (0,0) -- (30:20pt);
\draw [<->] (1,0) arc (180:30:10pt);
\draw [<<->] (2,0) -- ++(0.5,10pt) -- ++(0.5,-10pt) -- ++(0.5,10pt);
|
Petlja se može realizovati sa "\foreach ⟨variable⟩ in {⟨list of values⟩} ⟨commands⟩
".
\foreach \x in {0,...,9}
\draw (\x,0) circle (0.4);
|
PGF ima i matematičke sisteme koji omogućavaju crtanje grafika funkcija:
\draw [domain=<xmin>:<xmax>] plot (\x, {function});
mnoge funkcije su moguće, ovo je selekcija: factorial(\x), sqrt(\x), pow(\x,y), exp(\x), ln(\x), log10(\x), log2(\x), abs(\x), mod(\x,y), round(\x), floor(\x), ceil(\x), sin(\x), cos(\x), tan(x), min(\x,y,), max(\x,y). Trigonometrijske funkcije pretpostavljaju da je x koordinata u stepenima; ako je x u radijanima na primer sin(\x r). Dve konstante nogu biti od koristi: e, koje je jendako 2.718281828, i pi, koje je jednako 3.141592654.
Primer sa dve funkcije:
\draw [help lines] (-2,0) grid (2,4);
\draw [->] (-2.2,0) -- (2.2,0);
\draw [->] (0,0) -- (0,4.2);
\draw [green, thick, domain=-2:2] plot (\x, {4-\x*\x});
\draw [domain=-2:2, samples=50] plot (\x, {1+cos(pi*\x r});
|
Čvorovi
urediČvor je obično pravougaonik ili kružić ili neki drugi jednostavni oblik koji ima tekst na sebi. u najprostijem slučaju čvor je samo neki tekst koji se nalaži na nekoj koordinati. Čvorovi nisu deo samog puta, dodaju se slici nakon što je ona nacrtana
Unutar operacije puta koristite sledeću sintaksu posle unetih koordinata:
node[<options>](<name>){<text>}
"(<name>)
" је име за касније референцирање и оно је опционо.
Ako želite da nazovete određenu poziciju bez unošenja teksta postoje dve opcije:
node[<options>](<name>){}
coordinate[<options>](<name>)
Pisanje teksta duž unetog puta korišćenjem node komande prikazano je u jednostavnom primeru ispod :
\draw[dotted]
(0,0) node {1st node}
-- (1,1) node {2nd node}
-- (0,2) node {3rd node}
-- cycle;
moguće opcije za node komadnu su "inner sep=<dimension>
", "outer sep=<dimension>
", "minimum size=<dimension>
", "shape aspect=<aspect ratio>
", "text=<color>
", "font=
", "align=<left_right_center>
".
Čvor je centriran u trenutnoj koordinati u osnovnom slučaju. Često je bolje da čvor bude izvan samih koordinata: Desno ("right
" ili "anchor=west
"), levo ("left
" ili "anchor=east
"), iznad ("above
" ili "anchor=south
"), ispod ("below
" ili "anchor=north
"). Kombinacije su takođe moguće, kao "anchor=north east
" ili "below left
".
\fill[fill=yellow]
(0,0) node {1st node}
-- (1,1) node[circle,inner sep=0pt,draw] {2nd node}
-- (0,2) node[fill=red!20,draw,double,rounded corners] {3rd node};
Da stavite čvorove unutar linije ili krive koristite "pos=<fraction>
" opciju, gde je razlomak floating point broj između 0 koja predstavlja prethodnu koordinatu i 1 koja predstavlja trenutnu koordinatu.
\draw (0,0) -- (3,1)
node[pos=0]{0} node[pos=0.5]{1/2} node[pos=0.9]{9/10};
Postoje neke obzervacije: "at start
" za "pos=0
", "very near start
" za "pos=0.125
", "near start
" za "pos=0.25
", "midway
" za "pos=0.5
", "near end
" za "pos=0.75
", "very near end
" za "pos=0.875
", "at end
" za "pos=1
".
"sloped
" opcija uzrokuje rotaciju čvora i on postaje tangenta krive.
Kako su čvorovi jedine operacije naputevima, postoje specijalne komande za kreiranje puteva koji sadrže samo čvorove, prvi sa izlaznim tesktom, drugi bez:
\node[<options>](<name>) at (<coordinate>){<text>};
\coordinate[<options>](<name>) at (<coordinate>);
Možete spajati čvorove preko njihovih koordinata i oznaka. Imajući "\path(0,0) node(x) {} (3,1) node(y) {};
" definicane, čvor na (0,0) ima ime "(x)
" i ovaj na (3,1) ima oznaku "(y)
".
\path (0,0) node(x) {}
(3,1) node(y) {};
\draw (x) -- (y);
Ekvivalentno sa
\coordinate (x) at (0,0);
\coordinate (y) at (3,1);
\draw (x) -- (y);
Višelinijski tekst može biti uključen unutur čvora. Novi red se unusi sa dve kose crte "\\", ali dodatno morate naglasiti poravnanja koristeći opciju čvora "align=". Evo primera:
\filldraw
(0,0) circle (2pt) node[align=left, below] {test 1\\is aligned left} --
(4,0) circle (2pt) node[align=center, below] {test 2\\is centered} --
(8,0) circle (2pt) node[align=right, below] {test 3\\is right aligned};
Operacije za kreiranje puteva pokučavaju da budu pametne, tako što put počinje na granici oblika čvora, a ne od njegovog centra.
\path (0,0) node(x) {Hello World!}
(3,1) node[circle,draw](y) {$\int_1^2 x \mathrm d x$};
\draw[->,blue] (x) -- (y);
\draw[->,red] (x) -| node[near start,below] {label} (y);
\draw[->,orange] (x) .. controls +(up:1cm) and +(left:1cm) .. node[above,sloped] {label} (y);
Kada je čvor x definisan, možete koristiti utočišta kao što je gore definisano relativna u odnosu na (x) kao "(x.<anchor>)
", kao "(x.north)
".
Primeri
urediPrimer 1
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[thick,rounded corners=8pt] (0,0) -- (0,2) -- (1,3.25)
-- (2,2) -- (2,0) -- (0,2) -- (2,2) -- (0,0) -- (2,0);
\end{tikzpicture}
\end{document}
Primer 2
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[scale=3]
\draw[step=.5cm, gray, very thin] (-1.2,-1.2) grid (1.2,1.2);
\filldraw[fill=green!20,draw=green!50!black] (0,0) -- (3mm,0mm) arc (0:30:3mm) -- cycle;
\draw[->] (-1.25,0) -- (1.25,0) coordinate (x axis);
\draw[->] (0,-1.25) -- (0,1.25) coordinate (y axis);
\draw (0,0) circle (1cm);
\draw[very thick,red] (30:1cm) -- node[left,fill=white] {$\sin \alpha$} (30:1cm |- x axis);
\draw[very thick,blue] (30:1cm |- x axis) -- node[below=2pt,fill=white] {$\cos \alpha$} (0,0);
\draw (0,0) -- (30:1cm);
\foreach \x/\xtext in {-1, -0.5/-\frac{1}{2}, 1}
\draw (\x cm,1pt) -- (\x cm,-1pt) node[anchor=north,fill=white] {$\xtext$};
\foreach \y/\ytext in {-1, -0.5/-\frac{1}{2}, 0.5/\frac{1}{2}, 1}
\draw (1pt,\y cm) -- (-1pt,\y cm) node[anchor=east,fill=white] {$\ytext$};
\end{tikzpicture}
\end{document}
Primer 3: Torus
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (-1,0) to[bend left] (1,0);
\draw (-1.2,.1) to[bend right] (1.2,.1);
\draw[rotate=0] (0,0) ellipse (100pt and 50pt);
\end{tikzpicture}
\end{document}
Primer 4: Neke funkcije
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[domain=0:4]
\draw[very thin,color=gray] (-0.1,-1.1) grid (3.9,3.9);
\draw[->] (-0.2,0) -- (4.2,0) node[right] {$x$};
\draw[->] (0,-1.2) -- (0,4.2) node[above] {$f(x)$};
\draw[color=red] plot (\x,\x) node[right] {$f(x) =x$};
\draw[color=blue] plot (\x,{sin(\x r)}) node[right] {$f(x) = \sin x$};
\draw[color=orange] plot (\x,{0.05*exp(\x)}) node[right] {$f(x) = \frac{1}{20} \mathrm e^x$};
\end{tikzpicture}
\end{document}