<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setcounter{chapter}{4}
\newcommand{\graphicscompanion}{\glqq The \LaTeX{} Graphics Companion\grqq~\cite{graphicscompanion}}
\newcommand{\hobby}{\glqq A User's Manual for \MP\grqq~\cite{metapost}}
\newcommand{\hoenig}{\glqq \TeX{} Unbound\grqq~\cite{unbound}}
\newcommand{\graphicsinlatex}{\glqq Graphics in \LaTeXe\grqq~\cite{ursoswald}}

\chapter{Matemaatilise graafika genereerimine}
\label{chap:graphics}\index{joonised}

\begin{intro}
Enamasti kasutatakse \LaTeX i teksti vormistamiseks. Kuid et struktuurne
lÃ¤henemine sisuloomele on vÃ¤ga praktiline, sisaldab \LaTeX{} ka
vahendeid, kuigi mÃµneti piiratuid, tekstkirjelduste jÃ¤rgi graafilise
vÃ¤ljundi genereerimiseks. Lisaks on \LaTeX i jaoks koostatud pÃ¤ris
mitmeid laiendusi, mis pÃ¼Ã¼avad sellest piiratusest Ã¼le saada. KÃ¤esolevas
peatÃ¼kis tutvustamegi neist mÃµningaid.
\end{intro}

\section{Ãœlevaade}

Graafilise vÃ¤ljundi loomisel \LaTeX iga on pikk traditsioon. See algas
keskkonnaga \ei{picture}, mis vÃµimaldab koostada graafikat
eeldefineeritud elementide paneelile paigutamise teel. TÃ¤ieliku
kirjelduse annab raamat \manual. \LaTeXe{} keskkond \ei{picture}
sisaldab kÃ¤sku \ci{qbezier}, kus \texttt{q} tÃ¤histab ruutkÃµverat
(\emph{quadratic}). Paljusid sagedasti kasutatavaid jooni, nagu
ringjooni, ellipseid ja aheljooni saab rahuldavalt lÃ¤hendada B\'ezier'
ruutkÃµveratega, kuigi see vÃµib nÃµuda veidi matemaatilist vaevanÃ¤gemist.
Kui aga seejuures genereerida \LaTeX i sisendfailide \ci{qbezier}-plokid
programmi abil, muutub keskkond \ei{picture} pÃ¤ris vÃµimsaks.

Olgugi et jooniste programmeerimine otse \LaTeX is on vÃ¤ga piiratud ja
tihti tÃ¼Ã¼tu, leidub siiski pÃµhjusi, miks seda teha. Sedasi moodustatud
dokumendid on baidisuuruse poolest "`vÃ¤ikesed"' ja puuduvad
graafikafailid, mida on vaja kogu aeg kaasas kanda.

Niisugune oli asjade seis kuni hetkeni, mil mÃµni aasta tagasi valmis
klassi \pai{beamer} autori \index{Tantau, Till}Till Tantau kÃ¤e all
Portable Graphics Format (pakett \pai{pgf}) ja seonduv kasutajaliides
TikZ (pakett \pai{tikz}). See sÃ¼steem vÃµimaldab luua kÃµrge kvaliteediga
vektorgraafikat kÃµigis \TeX i sÃ¼steemides tÃ¤ieliku PDFi toega.

Sellele baasile tuginedes on kirjutatud palju pakette mitmesugusteks
otstarveteks. Laia valikut nendest pakettidest tutvustab Ã¼ksikasjaliselt
\graphicscompanion{}.

Ilmselt kÃµige arenenum \LaTeX iga seotud graafikatÃ¶Ã¶riist on
\index{metapost@\MP}\MP. See on eraldiseisev rakendus, mis on
\index{Knuth, Donald E.}Donald E. Knuthi kirjutatud programmi
\index{metafont@\MF}\MF\ kaksikÃµde. \MP i aluseks on \MF i vÃ¤ga vÃµimas
ja matemaatiliselt vÃ¤ljendusrikas programmeerimiskeel, kuid erinevalt
programmist \MF{} genereerib ta kapseldatud \PSi i faile, mida saab
lisada \LaTeX i ja isegi pdf\LaTeX i. Sissejuhatuse leiab manuaalist
\hobby{} vÃµi juhendist \cite{ursoswald}.

VÃ¤ga pÃµhjaliku kÃ¤sitluse \LaTeX i ja \TeX i graafika- (ja kirja-)
strateegiatest leiab raamatust \hoenig.

\section{Keskkond \ei{picture}}
\secby{Urs Oswald}{osurs@bluewin.ch}
Nagu Ã¼lal mainitud, on keskkond \ei{picture} osa standard-\LaTeX ist
ja sobib vÃ¤ga hÃ¤sti lihtsate Ã¼lesannete jaoks ning juhuks, kui on vaja
lehekÃ¼ljel tÃ¤pset kontrolli Ã¼ksikute elementide Ã¼le. TÃµsisema
graafikatÃ¶Ã¶ puhul tuleks aga vaadata paketi TikZ poole, mida
tutvustatakse jaotises \ref{sec:tikz} lehekÃ¼ljel \pageref{sec:tikz}.

\subsection{PÃµhikÃ¤sud}

Keskkond \ei{picture}\footnote{Usu vÃµi Ã¤ra usu, aga keskkond
\ei{picture} tÃ¶Ã¶tab standard-\LaTeX is niisama, ilma et oleks vaja
sisse lugeda Ã¼htki paketti.} luuakse Ã¼hega jÃ¤rgmisest kahest kÃ¤sust:
\begin{lscommand}
\verb|\begin{picture}(|$x,y$\verb|)| \ldots\verb|\end{picture}|
\end{lscommand}
\noindent vÃµi
\begin{lscommand}
\verb|\begin{picture}(|$x,y$\verb|)(|$x_0,y_0$\verb|)| \ldots\verb|\end{picture}|
\end{lscommand}
\noindent Arvud $x$, $y$, $x_0$, $y_0$ viitavad Ã¼hikpikkusele
\ci{unitlength}, millele saab igal hetkel (kuid mitte keskkonna
\ei{picture} sees) anda vÃ¤Ã¤rtustamiskÃ¤suga uue vÃ¤Ã¤rtuse, nagu nÃ¤iteks
\begin{lscommand}
\ci{setlength}\verb|{|\ci{unitlength}\verb|}{1.2cm}|
\end{lscommand}
\noindent Ãœhikpikkuse \ci{unitlength} vaikevÃ¤Ã¤rtus on \texttt{1pt}.
Esimene paar $(x,y)$ reserveerib dokumendis joonise jaoks
ristkÃ¼likukujulise ruumi. Valikuline teine paar $(x_0,y_0)$ omistab
reserveeritud ristkÃ¼liku alumisele vasakule nurgale suvalised
koordinaadid.

Enamik joonistamiskÃ¤ske on Ã¼hel kahest kujust:
\begin{lscommand}
\ci{put}\verb|(|$x,y$\verb|){|\emph{objekt}\verb|}|
\end{lscommand}
\noindent vÃµi
\begin{lscommand}
\ci{multiput}\verb|(|$x,y$\verb|)(|$\Delta x,\Delta y$\verb|){|$n$\verb|}{|\emph{objekt}\verb|}|\end{lscommand}
\noindent Erandiks on B\'ezier' kÃµverad, mida joonistatakse kÃ¤suga
\begin{lscommand}
\ci{qbezier}\verb|(|$x_1,y_1$\verb|)(|$x_2,y_2$\verb|)(|$x_3,y_3$\verb|)|
\end{lscommand}

\subsection{LÃµigud}

\begin{example}
\setlength{\unitlength}{5cm}
\begin{picture}(1,1)
  \put(0,0){\line(0,1){1}}
  \put(0,0){\line(1,0){1}}
  \put(0,0){\line(1,1){1}}
  \put(0,0){\line(1,2){.5}}
  \put(0,0){\line(1,3){.3333}}
  \put(0,0){\line(1,4){.25}}
  \put(0,0){\line(1,5){.2}}
  \put(0,0){\line(1,6){.1667}}
  \put(0,0){\line(2,1){1}}
  \put(0,0){\line(2,3){.6667}}
  \put(0,0){\line(2,5){.4}}
  \put(0,0){\line(3,1){1}}
  \put(0,0){\line(3,2){1}}
  \put(0,0){\line(3,4){.75}}
  \put(0,0){\line(3,5){.6}}
  \put(0,0){\line(4,1){1}}
  \put(0,0){\line(4,3){1}}
  \put(0,0){\line(4,5){.8}}
  \put(0,0){\line(5,1){1}}
  \put(0,0){\line(5,2){1}}
  \put(0,0){\line(5,3){1}}
  \put(0,0){\line(5,4){1}}
  \put(0,0){\line(5,6){.8333}}
  \put(0,0){\line(6,1){1}}
  \put(0,0){\line(6,5){1}}
\end{picture}
\end{example}

LÃµike joonistatakse kÃ¤suga
\begin{lscommand}
\ci{put}\verb|(|$x,y$\verb|){|\ci{line}\verb|(|$x_1,y_1$\verb|){|$pikkus$\verb|}}|
\end{lscommand}
\noindent KÃ¤sul \ci{line} on kaks argumenti: suunavektor ja pikkus.
Suunavektori komponendid piirduvad tÃ¤isarvudega
\[
  -6,\,-5,\,\ldots,\,5,\,6,
\]
ja nad peavad olema Ã¼histegurita (pole muid Ã¼hiseid tegureid peale 1).
Joonisel on kujutatud kÃµik 25 vÃµimalikku kalde vÃ¤Ã¤rtust esimeses
veerandis. Pikkus mÃ¤Ã¤ratakse Ã¼hikpikkuse \ci{unitlength} suhtes. Pikkuse
argument on vertikaaljoone puhul vertikaalkoordinaat ja kÃµigil Ã¼lejÃ¤Ã¤nud
juhtudel horisontaalkoordinaat.

\subsection{Nooled}

\begin{example}
\setlength{\unitlength}{0.75mm}
\begin{picture}(60,40)
  \put(30,20){\vector(1,0){30}}
  \put(30,20){\vector(4,1){20}}
  \put(30,20){\vector(3,1){25}}
  \put(30,20){\vector(2,1){30}}
  \put(30,20){\vector(1,2){10}}
  \thicklines
  \put(30,20){\vector(-4,1){30}}
  \put(30,20){\vector(-1,4){5}}
  \thinlines
  \put(30,20){\vector(-1,-1){5}}
  \put(30,20){\vector(-1,-4){5}}
\end{picture}
\end{example}
Nooli joonistatakse kÃ¤suga
\begin{lscommand}
\ci{put}\verb|(|$x,y$\verb|){|\ci{vector}\verb|(|$x_1,y_1$\verb|){|$pikkus$\verb|}}|
\end{lscommand}
\noindent Noolte puhul on suunavektori komponendid veelgi kitsamalt
piiratud kui lÃµikude puhul, nimelt tÃ¤isarvudega
\[
  -4,\,-3,\,\ldots,\,3,\,4.
\]
Komponendid peavad samuti olema Ã¼histegurita (pole muid Ã¼hiseid
tegureid peale 1). VÃµib tÃ¤hele panna kÃ¤su \ci{thicklines}\cih{thinlines}
mÃµju kahele noolele, mis osutavad Ã¼les vasakule.

\subsection{Ringjooned}

\begin{example}
\setlength{\unitlength}{1mm}
\begin{picture}(60, 40)
  \put(20,30){\circle{1}}
  \put(20,30){\circle{2}}
  \put(20,30){\circle{4}}
  \put(20,30){\circle{8}}
  \put(20,30){\circle{16}}
  \put(20,30){\circle{32}}

  \put(40,30){\circle{1}}
  \put(40,30){\circle{2}}
  \put(40,30){\circle{3}}
  \put(40,30){\circle{4}}
  \put(40,30){\circle{5}}
  \put(40,30){\circle{6}}
  \put(40,30){\circle{7}}
  \put(40,30){\circle{8}}
  \put(40,30){\circle{9}}
  \put(40,30){\circle{10}}
  \put(40,30){\circle{11}}
  \put(40,30){\circle{12}}
  \put(40,30){\circle{13}}
  \put(40,30){\circle{14}}

  \put(15,10){\circle*{1}}
  \put(20,10){\circle*{2}}
  \put(25,10){\circle*{3}}
  \put(30,10){\circle*{4}}
  \put(35,10){\circle*{5}}
\end{picture}
\end{example}
KÃ¤sk
\begin{lscommand}
  \ci{put}\verb|(|$x,y$\verb|){|\ci{circle}\verb|{|\emph{diameeter}\verb|}}|
\end{lscommand}
\noindent joonistab ringjoone keskpunktiga $(x,y)$ ja diameetriga (mitte
raadiusega) \emph{diameeter}. Keskkond \ei{picture} tunnistab ainult
diameetreid kuni umbes 14\,mm-ni ja ka sellest piirist allpool pole kÃµik
diameetrid vÃµimalikud. KÃ¤sk \ci{circle*} joonistab ketta (tÃ¤idetud
ringi).

Nagu lÃµikude puhulgi, vÃµib olla tarvis abiks vÃµtta lisapaketid nagu
\pai{eepic} vÃµi \pai{pstricks}. Neid pakette on pÃµhjalikult kirjeldatud
raamatus \graphicscompanion.

VÃµimalusi leidub ka keskkonna \ei{picture} sees. Kellel pole hirmu
sooritada vajalikke arvutusi (vÃµi lasta neid teha programmil), saab
suvalisi ringjooni ja ellipseid kokku panna B\'ezier' ruutkÃµveratest.
NÃ¤iteid ja Java-faile pakub \graphicsinlatex.

\subsection{Tekst ja valemid}

\begin{example}
\setlength{\unitlength}{0.8cm}
\begin{picture}(6,5)
  \thicklines
  \put(1,0.5){\line(2,1){3}}
  \put(4,2){\line(-2,1){2}}
  \put(2,3){\line(-2,-5){1}}
  \put(0.5,0.2){$A$}
  \put(4.2,1.9){$B$}
  \put(1.5,3.0){$C$}
  \put(3.0,2.7){$a$}
  \put(1.1,1.7){$b$}
  \put(2.6,0.9){$c$}
  \put(0.3,4){$S=
    \sqrt{p(p-a)(p-b)(p-c)}$}
  \put(3.5,0.4){$\displaystyle
    p:=\frac{a+b+c}{2}$}
\end{picture}
\end{example}
Nagu siit nÃ¤ha, saab teksti ja valemeid paigutada keskkonnas
\ei{picture} kÃ¤suga \ci{put} tavalisel viisil.

\subsection{\ci{multiput} ja \ci{linethickness}}

\begin{example}
\setlength{\unitlength}{2mm}
\begin{picture}(30,20)
  \linethickness{0.075mm}
  \multiput(0,0)(1,0){26}%
    {\line(0,1){20}}
  \multiput(0,0)(0,1){21}%
    {\line(1,0){25}}
  \linethickness{0.15mm}
  \multiput(0,0)(5,0){6}%
    {\line(0,1){20}}
  \multiput(0,0)(0,5){5}%
    {\line(1,0){25}}
  \linethickness{0.3mm}
  \multiput(5,0)(10,0){2}%
    {\line(0,1){20}}
  \multiput(0,5)(0,10){2}%
    {\line(1,0){25}}
\end{picture}
\end{example}
KÃ¤sul
\begin{lscommand}
  \ci{multiput}\verb|(|$x,y$\verb|)(|$\Delta x,\Delta y$\verb|){|$n$\verb|}{|\emph{objekt}\verb|}|
\end{lscommand}
\noindent on 4 argumenti: alguspunkt, nihkevektor Ã¼hest objektist
jÃ¤rgmiseni, objektide arv ja joonistatav objekt. KÃ¤sk \ci{linethickness}
mÃµjub horisontaalsele ja vertikaalsele lÃµigule, aga mitte kaldlÃµikudele
ega ringjoontele. Kuid ta mÃµjub B\'ezier' ruutkÃµveratele!

\subsection{Ovaalid}

\begin{example}
\setlength{\unitlength}{0.75cm}
\begin{picture}(6,4)
  \linethickness{0.075mm}
  \multiput(0,0)(1,0){7}%
    {\line(0,1){4}}
  \multiput(0,0)(0,1){5}%
    {\line(1,0){6}}
  \thicklines
  \put(2,3){\oval(3,1.8)}
  \thinlines
  \put(3,2){\oval(3,1.8)}
  \thicklines
  \put(2,1){\oval(3,1.8)[tl]}
  \put(4,1){\oval(3,1.8)[b]}
  \put(4,3){\oval(3,1.8)[r]}
  \put(3,1.5){\oval(1.8,0.4)}
\end{picture}
\end{example}
KÃ¤sk
\begin{lscommand}
  \ci{put}\verb|(|$x,y$\verb|){|\ci{oval}\verb|(|$l,k$\verb|)}|
\end{lscommand}
\noindent vÃµi
\begin{lscommand}
  \ci{put}\verb|(|$x,y$\verb|){|\ci{oval}\verb|(|$l,k$\verb|)[|\emph{osa}\verb|]}|
\end{lscommand}
\noindent joonistab ovaali keskpunktiga $(x,y)$ ning laiusega $l$ ja
kÃµrgusega $k$. Valikulise argumendi \emph{osa} vÃ¤Ã¤rtused \texttt{t},
\texttt{b}, \texttt{l}, \texttt{r} tÃ¤hendavad vastavalt "`Ã¼lemine"',
"`alumine"', "`vasak"', "`parem"' ning neid vÃµib omavahel kombineerida
nagu nÃ¤ites.

Joone paksust saab ette anda kahte liiki kÃ¤skudega: Ã¼helt poolt kÃ¤sk
\ci{linethickness}\verb|{|\emph{pikkus}\verb|}| ning teiselt poolt
\ci{thinlines} ja \ci{thicklines}. KÃ¤sk
\ci{linethickness}\verb|{|\emph{pikkus}\verb|}| mÃµjub ainult
horisontaalsetele ja vertikaalsetele lÃµikudele (ja B\'ezier'
ruutkÃµveratele), kuid \ci{thinlines} ja \ci{thicklines} mÃµjuvad ka
kaldlÃµikudele ja ringjoontele ning ovaalidele.

\subsection{Eeldefineeritud joonisekastide korduvkasutus}

\begin{example}
\setlength{\unitlength}{0.5mm}
\begin{picture}(120,168)
\newsavebox{\kausta}
\savebox{\kausta}
  (40,32)[bl]{%  definitsioon
  \multiput(0,0)(0,28){2}
    {\line(1,0){40}}
  \multiput(0,0)(40,0){2}
    {\line(0,1){28}}
  \put(1,28){\oval(2,2)[tl]}
  \put(1,29){\line(1,0){5}}
  \put(9,29){\oval(6,6)[tl]}
  \put(9,32){\line(1,0){8}}
  \put(17,29){\oval(6,6)[tr]}
  \put(20,29){\line(1,0){19}}
  \put(39,28){\oval(2,2)[tr]}
}
\newsavebox{\kaustb}
\savebox{\kaustb}
  (40,32)[l]{%  definitsioon
  \put(0,14){\line(1,0){8}}
  \put(8,0){\usebox{\kausta}}
}
\put(34,26){\line(0,1){102}}
\put(14,128){\usebox{\kausta}}
\multiput(34,86)(0,-37){3}
  {\usebox{\kaustb}}
\end{picture}
\end{example}
Joonisekasti saab \emph{deklareerida} kÃ¤suga
\begin{lscommand}
  \ci{newsavebox}\verb|{|\emph{nimi}\verb|}|
\end{lscommand}
\noindent seejÃ¤rel \emph{defineerida} kÃ¤suga
\begin{lscommand}
  \ci{savebox}\verb|{|\emph{nimi}\verb|}(|\emph{laius}\verb|,|\emph{kÃµrgus}\verb|)[|\emph{asend}\verb|]{|\emph{sisu}\verb|}|
\end{lscommand}
\noindent ning lÃµpuks Ã¼kskÃµik mitu korda \emph{joonistada} kÃ¤suga
\begin{lscommand}
  \ci{put}\verb|(|$x,y$\verb|){|\ci{usebox}\verb|{|\emph{nimi}\verb|}}|
\end{lscommand}

Valikuline argument \emph{asend} defineerib salvestatud kasti
ankurpunkti. NÃ¤ites kasti \ci{kausta} puhul mÃ¤Ã¤ratakse selleks
\texttt{bl}, mis paneb ankurpunkti salvestatud kasti alumisse vasakusse
nurka. ÃœlejÃ¤Ã¤nud asukohaspetsifikaatorid on \texttt{t} ja \texttt{r}
("`Ã¼les"' ja "`paremale"').

Argument \emph{nimi} viitab \LaTeX i objektihoidlale ja on seega
olemuselt kÃ¤sk (mille tÃµttu on tema ees langjoon nagu nÃ¤ites). Kastis
olevad joonised vÃµivad asuda Ã¼ksteise sees: selles nÃ¤ites kasutatakse
kasti \ci{kaustb} definitsioonis kasti \ci{kausta}.

KÃ¤sku \ci{oval} oli vaja sellepÃ¤rast, et kÃ¤sk \ci{line} ei tÃ¶Ã¶ta, kui
lÃµigu pikkus on vÃ¤iksem kui umbes 3\,mm.

\subsection{B\'ezier' ruutkÃµverad}

\begin{example}
\setlength{\unitlength}{0.8cm}
\begin{picture}(6,4)
  \linethickness{0.075mm}
  \multiput(0,0)(1,0){7}
    {\line(0,1){4}}
  \multiput(0,0)(0,1){5}
    {\line(1,0){6}}
  \thicklines
  \put(0.5,0.5){\line(1,5){0.5}}
  \put(1,3){\line(4,1){2}}
  \qbezier(0.5,0.5)(1,3)(3,3.5)
  \thinlines
  \put(2.5,2){\line(2,-1){3}}
  \put(5.5,0.5){\line(-1,5){0.5}}
  \linethickness{1mm}
  \qbezier(2.5,2)(5.5,0.5)(5,3)
  \thinlines
  \qbezier(4,2)(4,3)(3,3)
  \qbezier(3,3)(2,3)(2,2)
  \qbezier(2,2)(2,1)(3,1)
  \qbezier(3,1)(4,1)(4,2)
\end{picture}
\end{example}
Nagu sellest nÃ¤itest selgub, ei ole ringjoone tÃ¼keldamine 4 B\'ezier'
ruut\-kÃµ\-veraks piisav. Vaja on vÃ¤hemalt 8. Joonis kujutab taas kÃ¤su
\ci{linethickness} mÃµju horisontaalsetele ja vertikaalsetele lÃµikudele
ning kÃ¤skude \ci{thinlines} ja \ci{thicklines} mÃµju kaldlÃµikudele. Samuti
nÃ¤eme siit, et mÃµlemat liiki kÃ¤sud mÃµjutavad B\'ezier' ruutkÃµveraid,
kusjuures iga kÃ¤sk tÃ¼histab eelmise kÃ¤su mÃµju.

Olgu $P_1=(x_1,\,y_1)$ ja $P_2=(x_2,\,y_2)$ B\'ezier' kÃµvera otspunktid
ning $m_1$ ja $m_2$ vastavad kalded. Vahepealne juhtpunkt $S=(x,\,y)$ on
siis mÃ¤Ã¤ratud vÃµrranditega
\begin{equation} \label{zwischenpunkt}
  \left\{
    \begin{aligned}[rcl]
      x &amp; = &amp; \displaystyle \frac{m_2 x_2-m_1x_1-(y_2-y_1)}{m_2-m_1}, \\
      y &amp; = &amp; y_i+m_i(x-x_i)\qquad (i=1,\,2).
    \end{aligned}
  \right.
\end{equation}
\noindent Juhendist \graphicsinlatex{} leiab Java-programmi, mis
genereerib kÃ¤su \ci{qbezier} jaoks sobiva kÃ¤surea.

\subsection{Aheljoon}

\begin{example}
\setlength{\unitlength}{1cm}
\begin{picture}(4.3,3.6)(-2.5,-0.25)
\put(-2,0){\vector(1,0){4.4}}
\put(2.45,-.05){$x$}
\put(0,0){\vector(0,1){3.2}}
\put(0,3.35){\makebox(0,0){$y$}}
\qbezier(0.0,0.0)(1.2384,0.0)
  (2.0,2.7622)
\qbezier(0.0,0.0)(-1.2384,0.0)
  (-2.0,2.7622)
\linethickness{.075mm}
\multiput(-2,0)(1,0){5}
  {\line(0,1){3}}
\multiput(-2,0)(0,1){4}
  {\line(1,0){4}}
\linethickness{.2mm}
\put( .3,.12763){\line(1,0){.4}}
\put(.5,-.07237){\line(0,1){.4}}
\put(-.7,.12763){\line(1,0){.4}}
\put(-.5,-.07237){\line(0,1){.4}}
\put(.8,.54308){\line(1,0){.4}}
\put(1,.34308){\line(0,1){.4}}
\put(-1.2,.54308){\line(1,0){.4}}
\put(-1,.34308){\line(0,1){.4}}
\put(1.3,1.35241){\line(1,0){.4}}
\put(1.5,1.15241){\line(0,1){.4}}
\put(-1.7,1.35241){\line(1,0){.4}}
\put(-1.5,1.15241){\line(0,1){.4}}
\put(-2.5,-0.25){\circle*{0.2}}
\end{picture}
\end{example}

Sellel joonisel on aheljoone $y=\cosh x - 1$ mÃµlemat sÃ¼mmeetrilist poolt
lÃ¤hendatud B\'ezier' ruutkÃµveraga. KÃµvera parem pool lÃµpeb punktis
\((2;2{,}7622)\) ning kalde vÃ¤Ã¤rtus on seal \(m=3{,}6269\). Valemi
(\ref{zwischenpunkt}) abil saame arvutada vahepealsed juhtpunktid, mis
tulevad $(1{,}2384;0)$ ja $(-1{,}2384;0)$. Ristid nÃ¤itavad
\emph{tegeliku} aheljoone punkte. Viga on vaevumÃ¤rgatav, vÃ¤iksem kui Ã¼ks
protsent.

See nÃ¤ide demonstreerib kÃ¤su \verb|\begin{picture}| valikulist
argumenti. Joonis kirjeldatakse sobivates "`matemaatilistes"'
koordinaatides, kui kÃ¤suga
\begin{code}
  \verb|\begin{picture}(4.3,3.6)(-2.5,-0.25)|
\end{code}
\noindent seatakse alumise vasaku nurga (tÃ¤histatud musta ringiga)
koordinaatideks $(-2{,}5;-0{,}25)$.

\subsection{Kiirus erirelatiivsusteoorias}

\begin{example}
\setlength{\unitlength}{0.8cm}
\begin{picture}(6,4)(-3,-2)
  \put(-2.5,0){\vector(1,0){5}}
  \put(2.7,-0.1){$\chi$}
  \put(0,-1.5){\vector(0,1){3}}
  \multiput(-2.5,1)(0.4,0){13}
    {\line(1,0){0.2}}
  \multiput(-2.5,-1)(0.4,0){13}
    {\line(1,0){0.2}}
  \put(0.2,1.4)
    {$\beta=v/c=\tanh\chi$}
  \qbezier(0,0)(0.8853,0.8853)
    (2,0.9640)
  \qbezier(0,0)(-0.8853,-0.8853)
    (-2,-0.9640)
  \put(-3,-2){\circle*{0.2}}
\end{picture}
\end{example}
Kahe B\'ezier' kÃµvera juhtpunktid on arvutatud valemist
(\ref{zwischenpunkt}). Positiivset haru esitava kÃµvera mÃ¤Ã¤ravad
punktid/kalded $P_1=(0;0)$, $m_1=1$ ja $P_2=(2;\tanh 2)$, $m_2=1/\cosh^2
2$. JÃ¤llegi on joonis tehtud matemaatiliselt sobivates koordinaatides
ning alumisele vasakule nurgale on omistatud koordinaadid  $(-3;-2)$
(must ring).

\section{Graafikapaketid PGF ja TikZ}
\label{sec:tikz}

TÃ¤napÃ¤eval suudavad kÃµik \LaTeX i vÃ¤ljundigenereerimise sÃ¼steemid luua
kena vektorgraafikat, ainult liidesed on Ã¼sna mitmekesised. Pakett
\pai{pgf} kujutab endast abstraktsioonikihti nende liideste peal. Kuna
selle paketiga on kaasas omaenda mahukas manuaal/juhend \cite{pgfplot},
siis piirdume siin ainult lÃ¼hikese sissevaatega.

Paketiga \pai{pgf} tuleb samuti kaasa omaenda kÃµrgtaseme kasutuskeel,
mis defineeritakse paketis \pai{tikz}. Viimane pakett sisaldab vÃ¤ga
efektiivseid kÃ¤ske graafika joonistamiseks otse dokumendi sees. Tikzi
kÃ¤sud pannakse keskkonda \ei{tikzpicture}.

Nagu Ã¼lal mainitud, on paketi \pai{pgf} ja sÃµprade jaoks olemas
suurepÃ¤rane manuaal. Paketi tÃ¶Ã¶ selgitamise asemel vaatleme seetÃµttu
mÃµnda nÃ¤idet, mis annavad vÃµimalustest esmase Ã¼levaate.

KÃµigepealt Ã¼ks lihtne, aga sisukas graafik:
\begin{example}
\begin{tikzpicture}[scale=3]
  \clip (-0.1,-0.2)
     rectangle (1.8,1.2);
  \draw[step=.25cm,gray,very thin]
       (-1.4,-1.4) grid (3.4,3.4);
  \draw (-1.5,0) -- (2.5,0);
  \draw (0,-1.5) -- (0,1.5);
  \draw (0,0) circle (1cm);
  \filldraw[fill=green!20!white,
            draw=green!50!black]
    (0,0) -- (3mm,0mm)
         arc (0:30:3mm) -- cycle;
\end{tikzpicture}
\end{example}
\noindent TÃ¤hele tuleks panna semikoolonit \texttt{;} kÃ¤skude
eraldajana.

Lihtne Venni diagramm:
\begin{example}
\shorthandoff{:}
\begin{tikzpicture}
\node[circle,minimum size=3cm,
  draw,label=120:{Ã¶konoomika}]
  at (0,0) {};
\node[circle,minimum size=3cm,
  draw,label=60:{psÃ¼hholoogia}]
  at (1,0) {};
\node (i) at (0.5,-1) {};
\node at (0.6,-2.5)
  {kÃ¤itumisÃ¶konoomika}
  edge[-&gt;,thick,out=60,in=-60](i);
\end{tikzpicture}
\end{example}
Kui paketti \pai{tikz} kasutatakse koos paketiga \pai{babel}, siis vÃµib
juhtuda, et \pai{babel} muudab Ã¼mber mÃµne TikZi keele sÃ¼mboli tÃ¤henduse,
mis toob kaasa kummalised vead. Selle vastu aitab tihti kÃ¤su
\ci{shorthandoff} lisamine koodi.

JÃ¤rgmise nÃ¤ite iseÃ¤rasus on tsÃ¼kkel:

\begin{example}
\begin{tikzpicture}[scale=0.8]
  \tikzstyle{v}=[circle,minimum size=2mm,inner sep=0pt,draw]
\foreach \i in {1,...,8}
\foreach \j in {1,...,3}
  \node[v](G-\i-\j) at (\i,\j){};
\foreach \i in {1,...,8}
\foreach \j/\o in {1/2,2/3}
  \draw[-&gt;](G-\i-\j)--(G-\i-\o);
\foreach \i/\n in
  {1/2,2/3,3/4,4/5,5/6,6/7,7/8}
  \foreach \j/\o in {1/2,2/3} {
    \draw[-&gt;] (G-\i-\j) -- (G-\n-\o);
    \draw[-&gt;] (G-\n-\j) -- (G-\i-\o); }
\end{tikzpicture}
\end{example}


Preambulis antava kÃ¤suga \ci{usetikzlibrary} saab aktiveerida laia skaala
lisavÃµimalusi erikujundite joonistamiseks, nagu see kergelt kumer kast:
\begin{example}
\usetikzlibrary{%
  decorations.pathmorphing}
\begin{tikzpicture}[
     decoration={bent,aspect=.3}]
 \draw [decorate,fill=lightgray]
        (0,0) rectangle (5.5,4);
 \node[circle,draw]
        (A) at (.5,.5) {A};
 \node[circle,draw]
        (B) at (5,3.5) {B};
 \draw[-&gt;,decorate] (A) -- (B);
 \draw[-&gt;,decorate] (B) -- (A);
\end{tikzpicture}
\end{example}

\begin{example}
\usetikzlibrary{positioning}
\begin{tikzpicture}[xscale=6,
     yscale=8,&gt;=stealth]
  \tikzstyle{v}=[circle,
     minimum size=1mm,draw,thick]
  \node[v] (a) {$1$};
  \node[v] (b) [right=of a] {$2$};
  \node[v] (c) [below=of a] {$2$};
  \node[v] (d) [below=of b] {$1$};
  \draw[thick,-&gt;]
        (a) to node {} (c);
  \draw[thick,-&gt;]
        (a) to node {} (d);
  \draw[thick,-&gt;]
        (b) to node {} (d);
\end{tikzpicture}
\end{example}

On isegi vÃµimalik joonistada sÃ¼ntaksidiagramme, mis nÃ¤evad vÃ¤lja nii,
nagu oleksid nad pÃ¤rit otse Pascali programmeerimise Ãµpikust. Kood on
eelmise nÃ¤itega vÃµrreldes veidi komplitseeritum, seetÃµttu on siin
esitatud ainult tulemus. Sellesama diagrammi joonistamiseks on paketi
\pai{pgf} dokumentatsioonis olemas Ã¼ksikasjalik juhend.
\begin{center}
\begin{tikzpicture}[point/.style={coordinate},thick,draw=black!50,&gt;=stealth',
                    tip/.style={-&gt;,shorten &gt;=1pt},every join/.style={rounded corners},
                    skip loop/.style={to path={-- ++(0,#1) -| (\tikztotarget)}},
                    hv path/.style={to path={-| (\tikztotarget)}},
                    vh path/.style={to path={|- (\tikztotarget)}},
                 terminal/.style={
            rounded rectangle,
            minimum size=6mm,
            thick,draw=black!50,
            top color=white,bottom color=black!20,
            font=\ttfamily\tiny},
                nonterminal/.style={
                       rectangle,
                       minimum size=6mm,
                       thick,
                       draw=red!50!black!50,         % 50% red and 50% black,
                       top color=white,              % a shading that is white at the top...
                       bottom color=red!50!black!20, % and something else at the bottom
                       font=\itshape\tiny}]
\matrix[column sep=3.7mm] {
  % First row:
  &amp; &amp; &amp; &amp; &amp; &amp; &amp; &amp; &amp; &amp; &amp; \node (plus) [terminal] {+};\\
  % Second row:
  \node (p1) [point] {}; &amp;     \node (ui1)    [nonterminal] {mÃ¤rgita tÃ¤isarv}; &amp;
  \node (p2) [point] {}; &amp;     \node (dot)    [terminal]    {.};                &amp;
  \node (p3) [point] {}; &amp;     \node (digit)  [terminal]    {number};            &amp;
  \node (p4) [point] {}; &amp;     \node (p5)     [point] {};                       &amp;
  \node (p6) [point] {}; &amp;     \node (e)      [terminal]    {E};                &amp;
  \node (p7) [point] {}; &amp;                                                      &amp;
  \node (p8) [point] {}; &amp;     \node (ui2)    [nonterminal] {mÃ¤rgita tÃ¤isarv}; &amp;
  \node (p9) [point] {}; &amp;     \node (p10)    [point]       {};\\
  % Third row:
  &amp; &amp; &amp; &amp; &amp; &amp; &amp; &amp; &amp; &amp; &amp; \node (minus)[terminal] {-};\\
};
{ [start chain]
  \chainin (p1);
  \chainin (ui1)   [join=by tip];
  \chainin (p2)    [join];
  \chainin (dot)   [join=by tip];
  \chainin (p3)    [join];
  \chainin (digit) [join=by tip];
  \chainin (p4)    [join];
  { [start branch=digit loop]
    \chainin (p3) [join=by {skip loop=-6mm,tip}];
  }
  \chainin (p5)    [join,join=with p2 by {skip loop=6mm,tip}];
  \chainin (p6)    [join];
  \chainin (e)     [join=by tip];
  \chainin (p7)    [join];
  { [start branch=plus]
    \chainin (plus) [join=by {vh path,tip}];
    \chainin (p8)    [join=by {hv path,tip}];
  }
  { [start branch=minus]
    \chainin (minus) [join=by {vh path,tip}];
    \chainin (p8)    [join=by {hv path,tip}];
  }
  \chainin (p8)    [join];
  \chainin (ui2)   [join=by tip];
  \chainin (p9)    [join,join=with p6 by {skip loop=-11mm,tip}];
  \chainin (p10)   [join=by tip];
}
\end{tikzpicture}
\end{center}

VÃµimalusi on veelgi: kui tuleb joonistada arvuliste andmete vÃµi
funktsioonide graafikuid, siis vÃµib vaadata paketti \pai{pgfplot}, mis
sisaldab kÃµike, mida graafikute joonistamisel vaja lÃ¤heb. See pakett
suudab isegi kutsuda vÃ¤lja vÃ¤lise \wi{Gnuplot}i kÃ¤su, et vÃ¤lja arvutada
graafikusse kirjutatud funktsiooni tegelik vÃ¤Ã¤rtus.

Veel rohkem inspiratsiooni annab \index{Fauske, Kjell Magne}Kjell Magne
Fauske suurepÃ¤rane \url{http://www.texample.net/tikz}, kust leiab
pidevalt tÃ¤ieneva kogu ilusaid jooniseid ja muud \LaTeX i koodi. Samal
\index{texample.net@\TeX{}ample.net}\TeX{}ample.net-i lehel on vÃ¤ljas ka
mitmesuguste PGFi/TikZi tÃ¶Ã¶riistade nimekiri
(\url{http://www.texample.net/tikz/resources/#tools-that-generate-pgftikz-code}),
nii et ei ole vaja kirjutada kogu koodi kÃ¤sitsi.

%%% Local Variables:
%%% TeX-master: "lshort.tex"
%%% mode: flyspell
%%% TeX-PDF-mode: t
%%% End:
</pre></body></html>