%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \setcounter{chapter}{4} \newcommand{\graphicscompanion}{\emph{The \LaTeX{} Graphics Companion}~\cite{graphicscompanion}} \newcommand{\hobby}{\emph{A User's Manual for MetaPost}~\cite{metapost}} \newcommand{\hoenig}{\emph{\TeX{} Unbound}~\cite{unbound}} \newcommand{\graphicsinlatex}{\emph{Graphics in \LaTeXe{}}~\cite{ursoswald}} \chapter{Grafiikan tuottaminen matematiikan tarpeisiin} \begin{intro} Useimmat käyttävät {\LaTeX}:ia tekstin latomiseen. \LaTeX\ tarjoaa myös rajallisen mahdollisuuden tuottaa grafiikkaa käskyjen avulla. Rajoittuneita mahdollisuuksia lisäävät lukuisat {\LaTeX}-lisäykset. Tässä osassa opitaan muutama niistä. \end{intro} \section{Yleiskatsaus} {\LaTeX}:ssa voidaan määritellä kuvia \ei{picture}-ympäristöllä. Yksityiskohtainen kuvaus löytyy ohjeesta \manual. Toisaalta menetelmässä on pahoja puutteita. Kulmat, joissa vinoja viivoja voidaan esittää, sekä ympyröiden säteet on rajattu tiettyihin arvoihin. Toisaalta taas {\LaTeX}:n \ei{picture}-ympäristö sisältää \ci{qbezier}-komennon, jossa ''\texttt{q}'' tarkoittaa neliötä (quadratic). Monet usein käytetyistä käyristä eli ympyrät, ellipsit tai katenoidikäyrät voidaan esittää lähestulkoon tyydyttävästi toisen asteen Bézier-käyrillä, vaikka tämä voi vaatia hieman matemaattista vaivannäköä. Mikäli lisäksi käytetään Javan tapaista ohjelmointikieltä \ci{qbezier}-blokkien luomiseksi {\LaTeX}-tiedostoista, tulee \ei{picture}-ympäristöstä melko tehokas. Vaikka kuvien piirtäminen {\LaTeX}:ssa on hyvin rajoittunutta ja usein hankalaa, on siihen kuitenkin hyvät syynsä. Näin tuotetut dokumentit ovat tiedostokooltaan pieniä eikä ylimääräisiin grafiikkatiedostoihin ole mitään tarvetta. {\LaTeX}:n graafisia ominaisuuksia voidaan parantaa käyttämällä pakkauksia \pai{epic} ja \pai{eepic} (nämä on kuvattu teoksessa \companion) tai \pai{pstricks}, jotka poistavat alkuperäisen \ei{picture}-ympäristön rajoituksia. Kaksi ensinmainittua makropakkausta parantavat \ei{picture}-ympäristöä, mutta \pai{pstricks} sisältää aivan oman piirustusympäristön \ei{pspicture}. \pai{pstricks}-pakkauksen voima on siinä, että se käyttää hyvin tarkkaan PostScriptin ominaisuuksia. Lisäksi on vielä lukuisia erityisiin tarkoituksiin tehtyjä makropakkauksia. Eräs niistä on \texorpdfstring{\Xy}{Xy}-pic, joka on kuvattu tämän luvun lopussa. Teoksessa \graphicscompanion{} (jota ei pidä sekoittaa teokseen \companion{}) on kuvattu yksityiskohtaisesti useita näitä makropakkauksia. Ehkä tehokkain {\LaTeX}:iin liittyvä graafinen työkalu on \texttt{MetaPost}, joka on Donald E. Knuthin \texttt{METAFONT}:n kaksoissisar. \texttt{MetaPost} käyttää \texttt{METAFONT}:n hyvin tehokasta ja matemaattisesti sofistikoitua ohjelmointikieltä. \texttt{METAFONT}:n bittikarttakuvien sijasta \texttt{MetaPost} tuottaa PostScript-tiedostoja, joita voidaan liittää {\LaTeX}-dokumenttiin. Johdantona voidaan käyttää teosta {\hobby} tai teoksesta \cite{ursoswald} löytyvää oppijaksoa. Teoksessa on \hoenig{} on hyvin perinpohjainen esitys {\LaTeX}:n ja {\TeX}:n graafisista ominaisuuksista (sekä kirjasimista). \section{\texttt{picture}-ympäristö} \secby{Urs Oswald}{osurs@bluewin.ch} \subsection{Peruskomennot} \ei{picture}-ympäristö\footnote{Kaiken huipuksi tämä kuvaympäristö toimii ilman mitään erityisiä makropakkauksia.} otetaan käyttöön joko komennolla \begin{lscommand} \ci{begin}\verb|{picture}(|$x,y$\verb|)|\ldots\ci{end}\verb|{picture}| \end{lscommand} \noindent tai \begin{lscommand} \ci{begin}\verb|{picture}(|$x,y$\verb|)(|$x_0,y_0$\verb|)|\ldots\ci{end}\verb|{picture}| \end{lscommand} Numerot $x,\,y,\,x_0,\,y_0$ viittaavat \ci{unitlength}-muuttujaan, jolle voidaan asettaa arvo milloin tahansa (ei kuitenkaan \ei{picture}-ympäristön sisällä) esimerkiksi komennolla \begin{lscommand} \ci{setlength}\verb|{|\ci{unitlength}\verb|}{1.2cm}| \end{lscommand} Muuttujan \ci{unitlength} oletusarvo on \texttt{1pt}. Ensimmäinen pari, $(x,y)$, varaa kuvalle nelikulmaisen tilan dokumentista. Toista paria, $(x_0,y_0)$, voidaan käyttää tarvittaessa asettamaan mielivaltaiset koordinaatit nelikulmion vasemmasta alakulmasta. Useimmat piirustuskomennot ovat joko muotoa \begin{lscommand} \ci{put}\verb|(|$x,y$\verb|){|\emph{objekti}\verb|}| \end{lscommand} \noindent tai \begin{lscommand} \ci{multiput}\verb|(|$x,y$\verb|)(|$\Delta x,\Delta y$\verb|){|$n$\verb|}{|\emph{objekti}\verb|}|\end{lscommand} Bézier-käyrät ovat poikkeus. Ne piirretään komennolla \begin{lscommand} \ci{qbezier}\verb|(|$x_1,y_1$\verb|)(|$x_2,y_2$\verb|)(|$x_3,y_3$\verb|)| \end{lscommand} \subsection{Suorat viivat} \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} Suorat viivat piirretään komennolla \begin{lscommand} \ci{put}\verb|(|$x,y$\verb|){|\ci{line}\verb|(|$x_1,y_1$\verb|){|$length$\verb|}}| \end{lscommand} Komennolla \ci{line} on kaksi parametria: \begin{enumerate} \item suuntavektori, \item pituus. \end{enumerate} Suuntavektori koostuu kokonaisluvuista \[ -6,\,-5,\,\ldots,\,5,\,6, \] ja niiden on oltava lisäksi keskenään jaottomia (eli ei yhteistä jakajaa ykköstä lukuunottamatta). Kuvassa esitetään kaikki 25 ensimmäisen kvadrantin mahdollista arvoa. Pituus riippuu \ci{unitlength}-muuttujan arvosta. Pituusparametri on vaakaviivan tapauksessa vaakakoordinaatti, muussa tapauksessa kyseessä on pystykordinaatti. \subsection{Nuolet} \begin{example} \setlength{\unitlength}{1mm} \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} Nuolet piirretään komennolla \begin{lscommand} \ci{put}\verb|(|$x,y$\verb|){|\ci{vector}\verb|(|$x_1,y_1$\verb|){|$length$\verb|}}| \end{lscommand} Nuolien suuntavektorit ovat jopa suorien suuntavektoreita rajoitutempia. Niiden argumentteina voivat olla ainoastaan kokonaisluvut \[ -4,\,-3,\,\ldots,\,3,\,4. \] Argumenttien on lisäksi oltava keskenään jaottomia (ei yhteistä jakajaa ykköstä lukuunottamatta). On syytä huomata komennon \ci{thicklines} vaikutus kahteen vasempaan yläkulmaan osoittavaan nuoleen. \subsection{Ympyrät} \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} Komento \begin{lscommand} \ci{put}\verb|(|$x,y$\verb|){|\ci{circle}\verb|{|\emph{halkaisija}\verb|}}| \end{lscommand} \noindent piirtää ympyrän, jonka keskipiste on $(x,y)$ ja halkaisija (ei siis säde) on \emph{halkaisija}. \ei{picture}-ympäristössä suurin mahdollinen halkaisija on noin 14\,mm. Kaikki tätä pienemmät halkaisijat eivät kuitenkaan ole mahdollisia. Komennolla \ci{circle*} piirretään täytettyjä ympyröitä. Aivan kuten suorien viivojen tapauksessa, voi olla tarpeen käyttää lisämakropakkauksia \pai{eepic} tai \pai{pstricks}. Nämä on kuvattu perinpohjin teoksessa \graphicscompanion. Mikäli ylimääräisten laskelmien tekeminen ei pelota, ympyröitä ja käyriä voidaan kasata myös toisen asteen Bézier-käyrien avulla. Esimerkkejä ja Java-lähdekoodia löytyy teoksesta \graphicsinlatex{}. \subsection{Tekstiä ja kaavoja} \begin{example} \setlength{\unitlength}{1cm} \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.7,0.3){$A$} \put(4.05,1.9){$B$} \put(1.7,2.95){$C$} \put(3.1,2.5){$a$} \put(1.3,1.7){$b$} \put(2.5,1.05){$c$} \put(0.3,4){$F= \sqrt{s(s-a)(s-b)(s-c)}$} \put(3.5,0.4){$\displaystyle s:=\frac{a+b+c}{2}$} \end{picture} \end{example} Esimerkin mukaisesti tekstiä ja kaavoja voidaan kirjoittaa \ei{picture}-ympäristössä \ci{put}-komentoa käyttämällä. \subsection{Komennot \ci{multiput} ja \ci{linethickness}} \begin{example} \setlength{\unitlength}{2mm} \begin{picture}(30,20) \linethickness{0.075mm} \multiput(0,0)(1,0){31}% {\line(0,1){20}} \multiput(0,0)(0,1){21}% {\line(1,0){30}} \linethickness{0.15mm} \multiput(0,0)(5,0){7}% {\line(0,1){20}} \multiput(0,0)(0,5){5}% {\line(1,0){30}} \linethickness{0.3mm} \multiput(5,0)(10,0){3}% {\line(0,1){20}} \multiput(0,5)(0,10){2}% {\line(1,0){30}} \end{picture} \end{example} Komennolla \begin{lscommand} \ci{multiput}\verb|(|$x,y$\verb|)(|$\Delta x,\Delta y$\verb|){|$n$\verb|}{|\emph{objekti}\verb|}| \end{lscommand} \noindent on 4 parametriä: aloituspiste, siirtymävektori objektista toiseen, objektien lukumäärä sekä piirrettävä objekti. Komento \ci{linethickness} vaikuttaa vaaka- ja pystyviivoihin, muttei vinoviivoihin eikä ympyröihin. Se vaikuttaa kuitenkin toisen asteen Bézier-käyriin! \subsection{Ovaalit. Komennot \ci{thinlines} ja \ci{thicklines}} \begin{example} \setlength{\unitlength}{1cm} \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} Komento \begin{lscommand} \ci{put}\verb|(|$x,y$\verb|){|\ci{oval}\verb|(|$w,h$\verb|)}| \end{lscommand} \noindent tai \begin{lscommand} \ci{put}\verb|(|$x,y$\verb|){|\ci{oval}\verb|(|$w,h$\verb|)[|\emph{sijainti}\verb|]}| \end{lscommand} \noindent piirtävät ovaalin, jonka keskipiste on $(x,y)$, leveys $w$ ja korkeus $h$. Mahdolliset \emph{sijainti}-parametrit \texttt{b}, \texttt{t}, \texttt{l}, \texttt{r} tarkoittavat vastaavasti ''alhaalla'', ''ylhäällä'', ''vasemalla'', ''oikealla'' ja niitä voidaan yhdistellä esimerkin mukaisesti. Viivan paksuuteen voidaan vaikuttaa komennolla:\\ \ci{linethickness}\verb|{|\emph{mitta}\verb|}| toisaalta myös komennoilla \ci{thinlines} and \ci{thicklines}. Vaakaviivoihin (ja toisen asteen Bézier-käyriin) vaikuttaa \ci{linethickness}\verb|{|\emph{mitta}\verb|}|, vinoviivoihin sekä ympyröihin ja ovaaleihin vaikuttavat \ci{thinlines} ja \ci{thicklines}. \subsection{Ennalta määriteltyjen kuvalaatikoiden käyttö} \begin{example} \setlength{\unitlength}{0.5mm} \begin{picture}(120,168) \newsavebox{\laatikkoa}% uusi laatikko \savebox{\laatikkoa} (40,32)[bl]{% määritykset \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{\laatikkob}% uusi laatikko \savebox{\laatikkob} (40,32)[l]{% määritykset \put(0,14){\line(1,0){8}} \put(8,0){\usebox{\laatikkoa}} } \put(34,26){\line(0,1){102}} \put(14,128){\usebox{\laatikkoa}} \multiput(34,86)(0,-37){3} {\usebox{\laatikkob}} \end{picture} \end{example} Kuvalaatikko voidaan \emph{nimetä} komennolla \begin{lscommand} \ci{newsavebox}\verb|{|\emph{nimi}\verb|}| \end{lscommand} \noindent sitten sen ominaisuudet \emph{määritellään} \begin{lscommand} \ci{savebox}\verb|{|\emph{nimi}\verb|}(|\emph{leveys,korkeus}\verb|)[|\emph{sijainti}\verb|]{|\emph{sisältö}\verb|}| \end{lscommand} \noindent ja lopuksi se voidaan tarvittaessa piirtää \begin{lscommand} \ci{put}\verb|(|$x,y$\verb|)|\ci{usebox}\verb|{|\emph{nimi}\verb|}| \end{lscommand} Mahdollinen \emph{sijainti}-parametri määrittelee kuvalaatikon origon. Esimerkissä sillä on arvo \texttt{bl}, joka sijoittaa origon laatikon vasempaan yläkulmaan. Muut mahdolliset arvot ovat \texttt{t} (ylös) ja \texttt{r} oikealle. Parametri \emph{name} viittaa {\LaTeX}:n muuttujiin ja siitä johtuen se muistuttaa komentoa (tästä syystä sen edessä on kenoviiva). Kuvalaatikot voivat olla toistensa sisällä: esimerkissä \ci{laatikkoa} on osa \ci{laatikkob}-laatikon määrityksiä. Tässä piti käyttää komentoa \ci{oval}, koska \ci{line} ei toimi, mikäli segmentin pituus on alle 3\,mm. \subsection{Toisen asteen Bézier-käyrät} \begin{example} \setlength{\unitlength}{1cm} \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} Esimerkistä selviää, että ympyrän jakaminen neljään toisen asteen Bézier-käyrään ei tuo tyydyttävää tulosta. Tarvitaan ainakin kahdeksan. Kuvasta selviää lisäksi \ci{linethickness}-komennon vaikutus pysty- tai vaakaviivoihin ja komentojen \ci{thinlines} sekä \ci{thicklines} vaikutus vinoviivoihin. Siitä näkyy myös, että kummatkin komentotyypit vaikuttavat toisen asteen Bézier-käyriin, jokainen seuraava komento ohittaa vaikutuksiltaan edellisen. Päätepisteitä kuvatkoon $P_1=(x_1,\,y_1),\,P_2=(x_2,\,y_2)$ ja vastaavasti $m_1,\,m_2$ toisen asteen Bézier-käyrän kaarta. Näiden välissä oleva kontrollipiste $S=(x,\,y)$ seuraa silloin yhtälöistä \begin{equation} \label{zwischenpunkt} \left\{ \begin{array}{rcl} x & = & \displaystyle \frac{m_2 x_2-m_1x_1-(y_2-y_1)}{m_2-m_1}, \\ y & = & y_i+m_i(x-x_i)\qquad (i=1,\,2). \end{array} \right. \end{equation} \noindent Teoksessa \graphicsinlatex\ esitetään Java-ohjelma, joka luo tarvittavan \ci{qbezier}-komennon. \subsection{Katenoidikäyrä} \begin{example} \setlength{\unitlength}{1.3cm} \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} Tässä kuvassa kumpikin katenoidikäyrän $y=\cosh x -1$ symmetrinen puolisko esitetään toisen asteen Bézier-käyrällä. Käyrän oikea puoli päättyy pisteeseen \((2,\,2.7622)\), missä kaarteella on arvo \(m=3.6269\). Käyttämällä jälleen yhtälöä (\ref{zwischenpunkt}) voidaan laskea keskimmäiset kontrollipisteet. Ne näyttävät olevan $(1.2384,\,0)$ ja $(-1.2384,\,0)$. Ristit osoittavat \emph{oikean} katenoidikäyrän pisteitä. Virhettä tuskin huomaa sen ollessa alle yhden prosentin. Tämä esimerkki esittää \verb|\begin{picture}|-komennon mahdollisen parametrin käyttöä. Kuva määritellään tarkoituksenmukaisilla ''matemaattisilla'' koordinaateilla, kun taas komennolla \begin{lscommand} \ci{begin}\verb|{picture}(4.3,3.6)(-2.5,-0.25)| \end{lscommand} \noindent sen vasempaan alakulmaan (merkitty mustalla pallolla) on liitetty koordinaatit $(-2.5,-0.25)$. \subsection{Nopeus suhteellisuusteoriassa} \begin{example} \setlength{\unitlength}{1cm} \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} Näiden kahden Bézier-käyrän kiintopisteet laskettiin kaavalla (\ref{zwischenpunkt}). Positiivisen haaran määrittelee $P_1=(0,\,0),\,m_1=1$ ja $P_2=(2,\,\tanh 2),\,m_2=1/\cosh^2 2$. Kuva on jälleen määritelty matemaattisesti sopivin koordinaatein ja vasempaan alakulmaan sijoittuvat matemaattiset koordinaatit $(-3,-2)$ (musta ympyrä). \section{\texorpdfstring{\Xy}{Xy}-pic} \secby{Alberto Manuel Brand\~ao Sim\~oes}{albie@alfarrabio.di.uminho.pt} \pai{xy} sisältää erityismakroja kaavioiden piirtämiseen. Sen käyttämiseksi riittää seuraavan rivin lisääminen dokumentin määrittelyosaan: \begin{lscommand} \verb|\usepackage[|\emph{optiot}\verb|]{xy}| \end{lscommand} \emph{optiot} ovat lista \Xy-picin funktioita, jotka halutaan ladata käyttöön. Näitä optioita käytetään lähennä makrojen virheitä etsittäessä. Suosittelen käyttämään optiota \verb!all!, joka saa {\LaTeX}:n lataamaan kaikki {\Xy}:n komennot. \Xy-kaaviot piirretään matriisiin, jossa kaavion jokainen elementti on sijoitettu johonkin matriisin kohtaan: \begin{example} \begin{displaymath} \xymatrix{A & B \\ C & D } \end{displaymath} \end{example} Komentoa \ci{xymatrix} täytyy käyttää matematiikkatilassa. Tässä määritellään kaksi viivaa ja kaksi saraketta. Jotta matriisista saadaan kaavio, siihen lisätään nuolia \ci{ar}-komentoa käyttämällä. \begin{example} \begin{displaymath} \xymatrix{ A \ar[r] & B \ar[d] \\ D \ar[u] & C \ar[l] } \end{displaymath} \end{example} Nuolikomento sijoitetaan nuolen alkupisteeseen. Parametrit kertovat nuolen suunnan (\texttt{u} ylös, \texttt{d} alas, \texttt{r} oikealle ja \texttt{l} vasemmalle). \begin{example} \begin{displaymath} \xymatrix{ A \ar[d] \ar[dr] \ar[r] & B \\ D & C } \end{displaymath} \end{example} Vinoviivojen tekemiseen käytetään yhtä useampaa suuntaa. Suuntaparametreja voi itseasiassa toistaa suurempien nuolten tekemiseksi. \begin{example} \begin{displaymath} \xymatrix{ A \ar[d] \ar[dr] \ar[drr] & & \\ B & C & D } \end{displaymath} \end{example} Kaavioista saadaan vielä mielenkiintoisempia lisäämällä nuoliin tunnisteita. Niiden tekemiseen käytetään yleisiä ylä- ja alaindeksioperaattoreita. \begin{example} \begin{displaymath} \xymatrix{ A \ar[r]^f \ar[d]_g & B \ar[d]^{g'} \\ D \ar[r]_{f'} & C } \end{displaymath} \end{example} Näitä operaattoreita käytetään kuten normaalisti matematiikkatilassa. Ainoa ero on merkityksessä: yläindeksi tarkoittaa ''nuolen päällä'' ja alaindeksi tarkoittaa ''nuolen alla''. On myös olemassa kolmas operaattori: pystyviiva (\verb+|+). Se sijoittaa tekstin \emph{keskelle} nuolta. \begin{example} \begin{displaymath} \xymatrix{ A \ar[r]|f \ar[d]|g & B \ar[d]|{g'} \\ D \ar[r]|{f'} & C } \end{displaymath} \end{example} Nuoli, jossa on reikä, piirretään \verb!\ar[...]|\hole!. Joissain tilanteissa on tärkeää erottaa erityyppiset nuolet toisistaan. Se voidaan tehdä panemalla niihin tunnisteita tai muuttamalla niiden ulkoasua: \begin{example} \shorthandoff{"} \begin{displaymath} \xymatrix{ \bullet\ar@{->}[rr] && \bullet\\ \bullet\ar@{.<}[rr] && \bullet\\ \bullet\ar@{~)}[rr] && \bullet\\ \bullet\ar@{=(}[rr] && \bullet\\ \bullet\ar@{~/}[rr] && \bullet\\ \bullet\ar@{^{(}->}[rr] && \bullet\\ \bullet\ar@2{->}[rr] && \bullet\\ \bullet\ar@3{->}[rr] && \bullet\\ \bullet\ar@{=+}[rr] && \bullet } \end{displaymath} \shorthandon{"} \end{example} Huomaa ero kahden seuraavan kaavion välillä: \begin{example} \begin{displaymath} \xymatrix{ \bullet \ar[r] \ar@{.>}[r] & \bullet } \end{displaymath} \end{example} \begin{example} \begin{displaymath} \xymatrix{ \bullet \ar@/^/[r] \ar@/_/@{.>}[r] & \bullet } \end{displaymath} \end{example} Kauttaviivojen välissä olevat modifikaattorit määrittelevät miten käyrät piirretään. \Xy-pic tarjoaa useita tapoja käyrien piirtämiseksi. Lisätietoja saa \Xy-picin käyttöohjeista. % \begin{example} % \begin{lscommand} % \ci{dum} % \end{lscommand} % \end{example}