LaTeX/PGF/TikZ
Један начин да цртате графику директно са TeX командама је PGF/TikZ. TikZ може да продукује графику у PDF и PostScript формату користећи обичан (pdf)TEX, (pdf)Latex или ConTEXt. Долази са веома добром документацијом и обимном колекцијом примера: http://www.texample.net/tikz/
PGF ("portable graphics format") је основни слој, који пружа сет команди за прављење графике, и TikZ ("TikZ ist kein Zeichenprogramm") је предњи крај слоја са специјалном синтаксом, која омогућава олакшано коришћење PGF-а . TikZ команде су претежно сличне Metafont командама, опциони механизам је сличан PsTricks синтакси.
Док се претходни систем (picture, epic, pstricks или metapost) фокусирао на то како да црта, TikZ се фокусира на то шта се црта. Може се рећи да оно што је TikZ за цртање у LaTeX-у, то је LaTeX за дигитални typesetting. Препоручује се његово коришћење ако га Ваша LaTeX дистрибуција подржава.
други пакети рађени по TikZ (на пример за цртање електричних кола) могу се пронаћи овде: http://ftp.dante.de/tex-archive/help/Catalogue/bytopic.html#pgftikzsection
У следећеим одељцима неке основе TikZ су приказане.
Учитавање пакета, Библиотеке - tikzpicture окружење
[уреди]За коришћење TikZ у LaTeX-у документу неопходно је учитавање tikz пакета:
\usepackage{tikz}
негде у преамбули. Ово ће аутоматски учитати pgf пакет. Да бисте учитали даље коришћење библиотеке
\usetikzlibrary{⟨листа библиотека одвојених зарезима⟩}
Примери библиотека су "arrows
", "automata
", "backgrounds
", "calendar
", "chains
", "matrix
", "mindmap
", "patterns
", "petri
", "shadows
", "shapes.geometric
", "shapes.misc
", "spy
", "trees
".
Команде цртања морају да буду затворене у оквиру tikzpicture окружења
\begin{tikzpicture}[⟨options⟩]
⟨tikz commands⟩
\end{tikzpicture}
или алтернативно
\tikz[⟨options⟩]{⟨tikz commands⟩}
Једна могућа опција корисна за уређену графику је
baseline=⟨dimension⟩
Без те опције доњи крај слике постављен је на основну линију текста који је окружује. Коришћењем ове опције, можете прецизирати који део слике треба да буде спуштен или подигнут тако да висина ⟨димензија⟩ буде на основној линији.
Још једна опција за скалирање целе слике је
scale=⟨factor⟩
или другачије за висину и ширину, на пример:
xscale=2.5, yscale=0.5
Прецизирање координата
[уреди]Координате се прецизирају у округлим заградама у уобичајеним TEX димензијама користећи Cartesian координате (одвојене заградама), на пример 1cm у x правцу и 2pt у y правцу
(1cm,2pt)
или коришћењем поларних координата (двотачком одвојене), на пример 1cm у 30 степени правцу
(30:1cm)
Без прецизирања мерних јединица (1,2)
, стандардно су cm (1cm,2cm)
.
Релативне координате за претходно задату тачку додељуу се тако што се стављају један или два знака плус испред координата. Са "++
" последња тачка пута постаје тренутна позиција, са "+
" претходна тачка остаје тренутна тачка пута. Пример: 2 стандардне мере десно од последње коришћене тачке:
++(2,0)
Синтакса за путеве
[уреди]Пут је низ правих и кривих линија (упрошћено објашњење). Инструкција мора да се заврши са тачкомзарез.
\path[<options>]⟨specification⟩;
Једна инструкција може да се протеже кроз више линија, или се више инструкција може провући кроз једну линију.
Опције за акције пута су на пример: "draw
", "fill
", "pattern
", "shade
" (фил, у ком се боја лагано мења од једне до друге), "clip
" (сви следећи нацрти све до краја of тренутног поља подсечени противно тренутном путу и величина следећих путева неће бити важна за величину слике), "use as bounding box
".
"\path
" команда са овим опцијама може се повезати са: "\draw
", "\fill
", "\filldraw
", "\pattern
", "\shade
", "\shadedraw
", "\clip
", "\useasboundingbox
" .
Геометријска опција пута: "rotate=<angle in degree>
", "xshift=<length>
", "yshift=<length>
", "scaling=<factor>
", "xscale=<factor>
", "yscale=<factor>
".
Опција за бојење пута: "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.
Опција за дебљину линије: "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.
Опција за крај линије и опција за спајање линија: "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>
".
Опција за шаблон линије: "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
".
Опције за фил пута су на пример. "fill=<fill color>
", "pattern=<name>
", "pattern color=<color>
"
Праве линије се додељују са координатама одвојеним са два минуса,
\draw (1,0) -- (0,0) -- (0,1);
|
Прва координата представља move-to операцију . Која је испраћена низом “path extension операција”, као "-- (coordinates)
".
Исти пут са нешто опција за цртање:
\draw[red, dashed, very thick, rotate=30] (1,0) -- (0,0) -- (0,1);
|
Повезани пут може се затворити са "--cycle
" операцијом:
\draw (1,0) -- (0,0) -- (0,1) -- cycle;
|
Даља move-to операција у постојећем путу започиње нови део пута, који није повезан са претходним делом пута. Обде: Помери до (0,0) праву линију до (2,0), помери до (0,1) праву линију до (2,1):
\draw (0,0) -- (2,0) (0,1) -- (2,1);
|
Повезивање две тачке са две праве линије које су само хоризонталне или вертикалне, коришћење за хоризонталну па за вертикалну
\draw (0,0) -| (1,1);
или прво за вертикалну па за хоризонталну
\draw (0,0) |- (1,1);
Закривљени путеви могу да се праве помоћу Безијерових кривих, које се могу направити помоћу "..controls() ..()
" команде, са једном или две контролне тачке.
\draw (0,0) .. controls (1,1) .. (4,0)
(5,0) .. controls (6,0) and (6,1) .. (5,2);
|
Путеве које корисник дефинише могу се направити помоћу "to
" операције. Без опције кореспондира са правом линијом, баш као команда са дуплим минусом. коришћењем "out
" и "in
" опције закривљени пут се може направити. На пример "[out=135,in=45]
" узрукује да се пут напусти под углом од 135 степени на првој координати и да стигне под углом од 45 стептни у следећој координати.
\draw (0,0) to (3,2);
\draw (0,0) to[out=90,in=180] (3,2);
\draw (0,0) to[bend right] (3,2);
|
За правоугаонике постоји специјална команда. Користите move-to операцију за један ћошак а после "rectangle
" унесите координате за ћошак дијагонале. Последња постаје нова тренутна тачка.
\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);
|
За боју фила "green!20!white
" ово значи 20% зелено и 80% бело помешано.
Кружни и елиптични путеви се дефинишу почевши од њихових центара а потом коришћењем "circle command
" или са једном дужином за полупречник кружнице или са две дужине као полу-оса елипсе.
\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
|
Команда "arc
" прави део кружнице или елипсе:
\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);
|
Или у алтернативној синтакси:
\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];
Постоје доста предефинисаних команди за специјалне путеве, као "grid
", "parabola
", "sin
", "cos
" (синусна и коцинусна крива у интервалу [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);
|
Опција "help lines" означава "fine gray".
Да додате стрличасте врхове постоје једноставне опције:
\draw [->] (0,0) -- (30:20pt);
\draw [<->] (1,0) arc (180:30:10pt);
\draw [<<->] (2,0) -- ++(0.5,10pt) -- ++(0.5,-10pt) -- ++(0.5,10pt);
|
Петља се може реализовати са "\foreach ⟨variable⟩ in {⟨list of values⟩} ⟨commands⟩
".
\foreach \x in {0,...,9}
\draw (\x,0) circle (0.4);
|
PGF има и математичке системе који омогућавају цртање графика функција:
\draw [domain=<xmin>:<xmax>] plot (\x, {function});
многе функције су могуће, ово је селекција: 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). Тригонометријске функције претпостављају да је x координата у степенима; ако је x у радијанима на пример sin(\x r). Две константе ногу бити од користи: e, које је јендако 2.718281828, и pi, које је једнако 3.141592654.
Пример са две функције:
\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});
|
Чворови
[уреди]Чвор је обично правоугаоник или кружић или неки други једноставни облик који има текст на себи. у најпростијем случају чвор је само неки текст који се налажи на некој координати. Чворови нису део самог пута, додају се слици након што је она нацртана
Унутар операције пута користите следећу синтаксу после унетих координата:
node[<options>](<name>){<text>}
"(<name>)
" је име за касније референцирање и оно је опционо.
Ако желите да назовете одређену позицију без уношења текста постоје две опције:
node[<options>](<name>){}
coordinate[<options>](<name>)
Писање текста дуж унетог пута коришћењем node команде приказано је у једноставном примеру испод :
\draw[dotted]
(0,0) node {1st node}
-- (1,1) node {2nd node}
-- (0,2) node {3rd node}
-- cycle;
могуће опције за node комадну су "inner sep=<dimension>
", "outer sep=<dimension>
", "minimum size=<dimension>
", "shape aspect=<aspect ratio>
", "text=<color>
", "font=
", "align=<left_right_center>
".
Чвор је центриран у тренутној координати у основном случају. Често је боље да чвор буде изван самих координата: Десно ("right
" или "anchor=west
"), лево ("left
" или "anchor=east
"), изнад ("above
" или "anchor=south
"), испод ("below
" или "anchor=north
"). Комбинације су такође могуће, као "anchor=north east
" или "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};
Да ставите чворове унутар линије или криве користите "pos=<fraction>
" опцију, где је разломак floating point број између 0 која представља претходну координату и 1 која представља тренутну координату.
\draw (0,0) -- (3,1)
node[pos=0]{0} node[pos=0.5]{1/2} node[pos=0.9]{9/10};
Постоје неке обзервације: "at start
" за "pos=0
", "very near start
" за "pos=0.125
", "near start
" за "pos=0.25
", "midway
" за "pos=0.5
", "near end
" за "pos=0.75
", "very near end
" за "pos=0.875
", "at end
" за "pos=1
".
"sloped
" опција узрокује ротацију чвора и он постаје тангента криве.
Како су чворови једине операције напутевима, постоје специјалне команде за креирање путева који садрже само чворове, први са излазним тесктом, други без:
\node[<options>](<name>) at (<coordinate>){<text>};
\coordinate[<options>](<name>) at (<coordinate>);
Можете спајати чворове преко њихових координата и ознака. Имајући "\path(0,0) node(x) {} (3,1) node(y) {};
" дефиницане, чвор на (0,0) има име "(x)
" и овај на (3,1) има ознаку "(y)
".
\path (0,0) node(x) {}
(3,1) node(y) {};
\draw (x) -- (y);
Еквивалентно са
\coordinate (x) at (0,0);
\coordinate (y) at (3,1);
\draw (x) -- (y);
Вишелинијски текст може бити укључен унутур чвора. Нови ред се унуси са две косе црте "\\", али додатно морате нагласити поравнања користећи опцију чвора "align=". Ево примера:
\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};
Операције за креирање путева покучавају да буду паметне, тако што пут почиње на граници облика чвора, а не од његовог центра.
\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);
Када је чвор x дефинисан, можете користити уточишта као што је горе дефинисано релативна у односу на (x) као "(x.<anchor>)
", као "(x.north)
".
Примери
[уреди]Пример 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}
Пример 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}
Пример 3: Торус
\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}
Пример 4: Неке функције
\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}