LaTeX/PGF/TikZ

Извор: Викикњиге

LaTeX

Почетак
  1. Увод100% завршен  Dec 13, 2015
  2. Инсталација100% завршен  Dec 13, 2015
  3. Инсталација додатних пакета 100% завршен  Dec 13, 2015
  4. Основе 100% завршен  Dec 13, 2015
  5. Како пронаћи помоћ 100% завршен  Dec 13, 2015

Заједнички елементи

  1. Структура документа 100% завршен  Dec 28, 2015
  2. Форматирање текста 100% завршен  Dec 27, 2015
  3. Форматирање параграфа 100% завршен  Јан 02, 2016
  4. Боје 100% завршен  Jan 10, 2016
  5. Слова100% завршен  Jan 10, 2016
  6. Структура листи 100% завршен  Jan 10, 2016
  7. Посебни знакови 100% завршен  Jan 10, 2016
  8. Интернационализација 100% завршен  Jan 10, 2016
  9. Ротација 100% завршен  Jan 10, 2016
  10. Табеле 100% завршен  Jan 10, 2016
  11. Стварање наслова 100% завршен  Jan 10, 2016
  12. Распоред стране 100% завршен  Jan 10, 2016
  13. Увоз графике 100% завршен  Jan 10, 2016
  14. Фигуре и натписи100% завршен  Jan 10, 2016
  15. Фусноте и Маргине100% завршен  Jan 10, 2016
  16. Хиперлинкови 100% завршен  Jan 10, 2016
  17. Ознаке и референцирање100% завршен  Jan 10, 2016

Механика

  1. Грешке и упозорења 75% завршен  Јан 02, 2016
  2. Дужине 100% завршен  Јан 02, 2016
  3. Бројачи 100% завршен  Јан 02, 2016
  4. Кутије 100% завршен  Јан 02, 2016
  5. Правила и носачи 100% завршен  Јан 02, 2016

Технички текстови

  1. Математика100% завршен  Jan 10, 2016
  2. Напреднија математика 75% завршен  Jan 10, 2016
  3. Теореме
  4. Хемијска графика 75% завршен  Јан 02, 2016
  5. Алгоритми 75% завршен  Јан 02, 2016
  6. Листирање изворног кода 100% завршен  Јан 02, 2016
  7. Лингвистика 75% завршен  Јан 02, 2016

Посебне стране

  1. Индексирање 75% завршен  Јан 02, 2016
  2. Речник 75% завршен  Јан 02, 2016
  3. Управљање библиографијом‎ 75% завршен  Jan 10, 2016
  4. Више библиографије

Посебни документи

  1. Писма 50% завршен  Јан 02, 2016
  2. Презентације 75% завршен  Јан 02, 2016
  3. Учитељски део 75% завршен  Jan 10, 2016
  4. Кратка биографија 50% завршен  Јан 02, 2016

Креирање графика

  1. Представљање процедуралних графика 100% завршен  Јан 02, 2016
  2. МетаПостови 0% завршен  Јан 02, 2016
  3. Слика 50% завршен  Јан 02, 2016
  4. PGF/TikZ 25% завршен  Јан 02, 2016
  5. PSTricks 50% завршен  Јан 02, 2016
  6. Xy-pic 25% завршен  Јан 02, 2016
  7. Прављење 3D графикa 75% завршен  Јан 02, 2016

Програмирање

  1. Макрои 100% завршен  Jan 10, 2016
  2. Обичан ТеХ‎ 100% завршен  Jan 10, 2016
  3. Креирање пакета 100% завршен  Jan 10, 2016
  4. Теме 75% завршен  Jan 10, 2016

Разно

  1. Модуларни Документи 100% завршен  Jan 10, 2016
  2. Заједничко писање LaTeX докумената 75% завршен  Jan 10, 2016
  3. Отпремање у друге формате 100% завршен  Jan 10, 2016

Помоћ и препоруке

  1. Најчешће постављана питања 100% завршен  Jan 10, 2016
  2. Савети и трикови 75% завршен  Jan 10, 2016

Додаци

  1. Аутори 0% завршен  Jan 10, 2016
  2. Линкови 0% завршен  Jan 10, 2016
  3. Ознаке пакета 0% завршен  Jan 10, 2016
  4. Примери LaTeX докумената 0% завршен  Jan 10, 2016
  5. Индекс 0% завршен  Jan 10, 2016
  6. Речник наредби 0% завршен  Jan 10, 2016
Example of graphics done with Tikz. Note the slightly translucent top layer.

Један начин да цртате графику директно са 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}


Претходно: Слика Индекс Следеће: PSTricks