%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setcounter{chapter}{4}
\newcommand{\graphicscompanion}{\emph{The \LaTeX{} Graphics Companion}~\cite{graphicscompanion}} 
\newcommand{\hobby}{\emph{A User's Manual for \MP{}}~\cite{metapost}}
\newcommand{\hoenig}{\emph{\TeX{} Unbound}~\cite{unbound}}
\newcommand{\graphicsinlatex}{\emph{Graphics in \LaTeXe{}}~\cite{ursoswald}}

\chapter{Produção de Gráficos Matemáticos}
\label{chap:graphics}

\begin{intro}
A maior parte das pessoas usam o \LaTeX{} para dactilografar os seus textos.
Além de permitir e incentivar a estruturação dos textos, o \LaTeX{} também
oferece possibilidades, ligeiramente restritas, para produção de resultados
gráficos usando descrições textuais. Recentemente, um grande número de
extensões \LaTeX{} têm vindo a ser criadas para ultrapassar estes problemas.
Nesta secção, irá aprender a usar algumas delas.
\end{intro}

\section{Introdução}

A criação de gráficos com \LaTeX{} tem uma longa tradição. Começou com
o ambiente \ei{picture} que permite a criação de gráficos posicionando
de forma inteligente alguns elementos pré-definidos na folha. Uma
descrição completa pode ser lida no \manual. O ambiente \ei{picture}
do \LaTeXe\ integra o comando \ci{qbezier}, ``\texttt{q}'' de
``quadrática''. Muitas curvas usadas frequentemente, como círculos,
elipses ou catenárias, podem ser aproximadas de forma satisfatória
usando curvas de Bézier quadráticas, apesar de que obrigará a alguns
conhecimentos de matemática. Se usar uma linguagem de programação para
gerar código \LaTeX{} com blocos \ci{qbezier}, o ambiente \ei{picture}
torna-se bastante poderoso.

Apesar da programação de imagens directamente em \LaTeX{} poder ser
bastante restrita, e normalmente bastante cansativa, existem boas
razões para o fazer.  Os documentos produzidos desta forma são
``pequenos'' em relação ao tamanho ocupado, e não são necessários
ficheiros extra.

Pacotes como o \pai{epic} e \pai{eepic} (descritos, por exemplo, no
\companion), ou \pai{pstricks} ajudam a eliminar estas restrições
substituindo o ambiente original \ei{picture}, e melhorando
significativamente o poder gráfico do \LaTeX.

Enquanto que os dois pacotes anteriores simplesmente melhoram o
ambiente \ei{picture}, o \pai{pstricks} tem o seu próprio ambiente de
desenho: \ei{pspicture}. O poder do \pai{pstricks} vem do facto de que
este pacote faz uso extensivo das potencialidades do
\PSi. Outros pacotes têm vindo a ser escritos para fins
específicos. Um destes é o \texorpdfstring{\Xy}{Xy}-pic, descrito no
final deste capítulo. Uma grande variedade destes pacotes é descrito 
em detalhe no \graphicscompanion{} (não confundir com o \companion).

Este era o estado das coisas até há alguns anos quando Till Tantau,
autor do \pai{beamer}, apresentou o Formato de Gráficos Portável
(Portable Graphics Format) \pai{pgf} e o seu pacote companeiro TikZ
(\pai{tikz}). Este sistema permite-o criar gráficos vectoriais de alta
qualidade em todos os sistemas \TeX{} que incluam suporte para pgf.

Porventura, a ferramenta mais poderosa para gráficos em \LaTeX{} é o
\MP., o gémeo do \texttt{METAFONT} de Donald E. Knuth. O \MP{} incluí
a poderosa e sofisticada linguagem de programação do
\texttt{METAFONT}. No entanto, enquanto que o \texttt{METAFONT} gera
mapas de bits (bitmaps), o \MP{} gera ficheiros Encapsulated \PSi, que
podem ser importados no \LaTeX{} e pdf\LaTeX. Para uma introdução leia
o \hobby, ou o tutorial em \cite{ursoswald}.

Uma discussão mais aprofundada das estratégias do \LaTeX{} e \TeX{}
para gráficos (e tipos de letra) pode ser encontrada em \hoenig.

\section{O ambiente \texttt{picture}}
\secby{Urs Oswald}{osurs@bluewin.ch}

Como mencionado anteriormente, o ambiente \ei{picture} é parte
integrante de todas as distribuições \LaTeX{} e é bom para tarefas
simples, e também se quiser controlar o posicionamento exacto de
elementos individuais numa página. Mas se está a planear fazer algum
trabalho sério que use gráficos, deve dar uma leitura ao TikZ,
apresentado na secção~\ref{sec:tikz}, na página \pageref{sec:tikz}.

\subsection{Comandos Básicos}

O ambiente \ei{picture}\footnote{Acredite ou não, o ambiente
  \texttt{picture} funciona directamente, em \LaTeXe{} standard, sem
  necessitar de carregar qualquer pacote.} é criado com um dos
seguintes comandos
\begin{lscommand}
\ci{begin}\verb|{picture}(|$x,y$\verb|)|\ldots\ci{end}\verb|{picture}|
\end{lscommand}
\noindent ou
\begin{lscommand}
\ci{begin}\verb|{picture}(|$x,y$\verb|)(|$x_0,y_0$\verb|)|\ldots\ci{end}\verb|{picture}|
\end{lscommand}
Os números $x,\,y,\,x_0,\,y_0$ referem-se ao \ci{unitlength}
(comprimento da unidade de desenho), que pode ser mudada em qualquer altura (fora
dos ambientes \ei{picture} com um comando semelhante a
\begin{lscommand}
\ci{setlength}\verb|{|\ci{unitlength}\verb|}{1.2cm}|
\end{lscommand}
O valor por omissão de \ci{unitlength} é \texttt{1pt}. O primeiro par,
$(x,y)$, obriga a que se reserve, dentro do documento, do espaço
rectangular para a imagem. O segundo par (opcional), $(x_0,y_0)$, atribuí
coordenadas arbitrárias ao canto inferior esquerdo do rectângulo reservado.

Quase todos os comandos de desenho têm uma de duas formas
\begin{lscommand}
\ci{put}\verb|(|$x,y$\verb|){|\emph{objecto}\verb|}|
\end{lscommand}
\noindent ou
\begin{lscommand}
\ci{multiput}\verb|(|$x,y$\verb|)(|$\Delta x,\Delta y$\verb|){|$n$\verb|}{|\emph{objecto}\verb|}|\end{lscommand}
As curvas de Bézier não são uma excepção. São desenhadas com o comando
\begin{lscommand}
\ci{qbezier}\verb|(|$x_1,y_1$\verb|)(|$x_2,y_2$\verb|)(|$x_3,y_3$\verb|)|
\end{lscommand}

\subsection{Segmentos de Recta}

Os segmentos de recta são desenhados com o comando
\begin{lscommand}
\ci{put}\verb|(|$x,y$\verb|){|\ci{line}\verb|(|$x_1,y_1$\verb|){|$comprimento$\verb|}}|
\end{lscommand}
O comando \ci{line} tem dois argumentos:
\begin{enumerate}
  \item um vector direcção de direcção,
  \item um comprimento.
\end{enumerate}
Os componentes do vector de direcção são restritos aos inteiros
\[
  -6,\,-5,\,\ldots,\,5,\,6,
\]
e têm de ser primos entre si (nenhum divisor comum excepto o 1). A figura ilustra todas
as 25 possibilidades de inclinação no primeiro quadrante. O comprimento é relativo à
unidade \ci{unitlength}. Este argumento é a coordenada vertical no caso de um segmento de
recta vertical, e a coordenada horizontal em todos os outros casos.

\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}

\subsection{Setas}
As setas são desenhadas com o comando
\begin{lscommand}
\ci{put}\verb|(|$x,y$\verb|){|\ci{vector}\verb|(|$x_1,y_1$\verb|){|$comprimento$\verb|}}|
\end{lscommand}
Para setas, as componentes do vector de direcção são ainda mais restritos do que para
segmentos de recta, nomeadamente aos inteiros
\[
  -4,\,-3,\,\ldots,\,3,\,4.
\]
Os componentes também têm de ser primos entre si. Note no efeito do comando
\ci{thicklines} nas duas setas que apontam para o topo esquerdo.


\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}

\subsection{Círculos}


\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}

O comando
\begin{lscommand}
  \ci{put}\verb|(|$x,y$\verb|){|\ci{circle}\verb|{|\emph{diametro}\verb|}}|
\end{lscommand}
\noindent desenha um círculo com centro em $(x,y)$ e diâmetro (não o raio) \emph{diametro}.
O ambiente \ei{picture} só admite diâmetros até aproximadamente 14\,mm, e mesmo abaixo desse
diâmetro nem todos são possíveis. O comando \ci{circle*} produz discos (círculos cheios).

Como no caso dos segmentos de recta, poderá ter de recorrer a outros
pacotes como \pai{eepic} ou \pai{pstricks}. Para uma descrição
detalhada destes pacotes consulte o \graphicscompanion.

Também existe a possibilidade de as fazer dentro de um ambiente
\ei{picture} desde que não tenha medo de fazer os cálculos necessários
(ou obrigar um programa a fazê-los), usando curvas quadráticas de Bézier.
Veja \graphicsinlatex\ para exemplos de programas Java.


\subsection{Textos e Formulas}

\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.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}
Como este exemplo mostra, texto e fórmulas podem ser escritas num ambiente \ei{picture} 
usando o comando \ci{put} da forma usual.

\subsection{\ci{multiput} e \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}
O comando
\begin{lscommand}
  \ci{multiput}\verb|(|$x,y$\verb|)(|$\Delta x,\Delta y$\verb|){|$n$\verb|}{|\emph{objecto}\verb|}|
\end{lscommand}
\noindent tem 4 argumentos: o ponto inicial, o vector de translação de um objecto para
o próximo, o número de objectos, e o objecto a ser desenhado. O comando \ci{linethickness}
aplica-se a segmentos horizontais e verticais mas nunca a segmentos de recta oblíquos ou
círculos. No entanto, é aplicado a curvas quadráticas de Bézier.

\subsection{Ovais}

Os comandos
\begin{lscommand}
  \ci{put}\verb|(|$x,y$\verb|){|\ci{oval}\verb|(|$w,h$\verb|)}|
\end{lscommand}
\noindent ou
\begin{lscommand}
  \ci{put}\verb|(|$x,y$\verb|){|\ci{oval}\verb|(|$w,h$\verb|)[|\emph{posição}\verb|]}|
\end{lscommand}
\noindent produzem uma oval centrada em $(x,y)$ com largura $w$ e altura $h$. O argumento
opcional 
\emph{posição} que pode ser um entre
\texttt{b}, \texttt{t}, \texttt{l}, \texttt{r}, referem-se a
``top'' (topo), ``bottom'' (fundo), ``left'' (esquerda), ``right'' (direita), e podem
ser combinados como o exemplo ilustra.


\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}

A grossura das linhas pode ser controlada com dois tipos de comandos:\\
\ci{linethickness}\verb|{|\emph{comprimento}\verb|}|
por um lado, \ci{thinlines} e \ci{thicklines} por outro.
Enquanto que \ci{linethickness}\verb|{|\emph{comprimento}\verb|}|
só se aplica a linhas verticais e horizontais (e curvas quadráticas de Bézier),
\ci{thinlines}  e \ci{thicklines} aplicam-se também a segmentos
oblíquos assim como a círculos e ovais.

\subsection{Múltiplos usos de caixas de imagem pré-definidas}

Uma caixa de imagem pode ser \emph{declarada} pelo comando
\begin{lscommand}
  \ci{newsavebox}\verb|{|\emph{nome}\verb|}|
\end{lscommand}
\noindent e posteriormente \emph{definida} por
\begin{lscommand}
  \ci{savebox}\verb|{|\emph{nome}\verb|}(|\emph{largura,altura}\verb|)[|\emph{posição}\verb|]{|\emph{conteúdo}\verb|}|
\end{lscommand}
\noindent e finalmente, desenhada arbitrariamente usando
\begin{lscommand}
  \ci{put}\verb|(|$x,y$\verb|){|\ci{usebox}\verb|{|\emph{nome}\verb|}}|
\end{lscommand}
O argumento opcional \emph{posição} tem o efeito de definir o ponto de âncora da
caixa a guardar. No exemplo, é colocado com o valor \texttt{bl} que coloca a âncora
no canto inferior esquerdo da caixa. Os outros especificadores de localização são
\texttt{t}op (topo) e \texttt{r}ight (direita).


\begin{example}
\setlength{\unitlength}{0.5mm}
\begin{picture}(120,168)
\newsavebox{\foldera}
\savebox{\foldera}
  (40,32)[bl]{%         definição 
  \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{\folderb}
\savebox{\folderb}
  (40,32)[l]{%         definição 
  \put(0,14){\line(1,0){8}}
  \put(8,0){\usebox{\foldera}}
}
\put(34,26){\line(0,1){102}} 
\put(14,128){\usebox{\foldera}}
\multiput(34,86)(0,-37){3}
  {\usebox{\folderb}} 
\end{picture}
\end{example}

O argumento \emph{nome} refere-se a um nome a guardar numa das caixas
do \LaTeX{} e portante é de natureza semelhante a um comando (o que
obrigou às barras invertidas do exemplo). As caixas com imagem podem
ser aninhadas: neste exemplo, o \ci{foldera} é usado dentro da
definição do \ci{folderb}.

O comando \ci{oval} não irá funcionar se o comprimento do segmento é menor que cerca de 3\,mm.

\subsection{Curvas de Bézier Quadráticas}


Como o exemplo seguinte ilustra, dividir um círculo em 4 curvas quadráticas de Bézier não
é satisfatório. Pelo menos são precisas 8. A figura mostra o efeito do comando
\ci{linethickness} em linhas horizontais ou verticais, e o efeito dos comandos
\ci{thinlines} e \ci{thicklines} em segmentos de recta oblíquos. Também mostra
que ambos os tipos de comando afectam as curvas quadráticas de Bézier, cada comando
substituindo todos os anteriores.

\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}

Se $P_1=(x_1,\,y_1),\,P_2=(x_2,\,y_2)$ representarem os extremos, e $m_1,\,m_2$ as
respectiva curvatura de uma curva quadrática de Bézier, o ponto intermédio de controlo
$S=(x,\,y)$ é dado pelas equações
\begin{equation} \label{zwischenpunkt}
  \left\{
    \begin{aligned}{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{aligned}
  \right.
\end{equation}
\noindent Veja o \graphicsinlatex\ para um programa em Java que gera os comandos
\ci{qbezier} necessários.


\subsection{Parábolas}


Na figura que se segue, cada metade simétrica da ``parábola'' $y=\cosh x -1$ é aproximada por uma
curva quadrática de Bézier. A metade do lado direito da curva termina no 
ponto \((2,\,2.7622)\), com a inclinação com valor
\(m=3.6269\). Usando de novo a equação (\ref{zwischenpunkt}), podemos calcular
os pontos intermédios de controlo: $(1.2384,\,0)$ e $(-1.2384,\,0)$. 
As cruzes indicam pontos da ``parábola'' \emph{real}. O erro quase que passa
despercebido, sendo menor do que um por cento.


\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}

Este exemplo mostra o uso do argumento opcional do comando
\verb|\begin{picture}|.
A figura é definida em coordenadas matemáticas, pelo que o comando
\begin{lscommand} 
  \ci{begin}\verb|{picture}(4.3,3.6)(-2.5,-0.25)|
\end{lscommand}
\noindent faz com que o seu canto inferior esquerdo (marcado pelo disco preto)
esteja nas coordenadas $(-2.5,-0.25)$. 

\subsection{Rapidamente a teoria da Relatividade}

Os pontos de controlo das duas curvas de Bézier são calculadas com fórmulas (\ref{zwischenpunkt}).
O ramo positivo é determinado por $P_1=(0,\,0),\,m_1=1$ e $P_2=(2,\,\tanh 2),\,m_2=1/\cosh^2 2$.
De novo, a figura é definida em coordenadas matemáticas convenientes, e o canto inferior esquerdo
é colocado nas coordenadas $(-3,-2)$ (disco preto).


\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}

\section{\texorpdfstring{\Xy}{Xy}-pic}
\secby{Alberto Manuel Brandão Simões}{ambs@perl-hackers.net}

\pai{xy} é um pacote especial para desenhar diagramas. Para o usar, 
adicione a seguinte linha ao preâmbulo do seu documento:
\begin{lscommand}
\verb|\usepackage[|\emph{opções}\verb|]{xy}|
\end{lscommand}
onde \emph{opções} é a lista de funções do \Xy-pic que quer usar.
Estas opções são especialmente úteis para encontrar erros no pacote.
Pessoalmente, recomendo a opção \verb!all! que indica ao \LaTeX{} para
carregar todos os comandos disponíveis no \Xy{}.

Os diagramas \Xy-pic são desenhados numa tela orientada à matriz, onde
cada elemento do diagrama é colocado numa das posições da matriz:
\begin{example}
\begin{displaymath}
\xymatrix{A & B \\
          C & D }
\end{displaymath}
\end{example}
O comando \ci{xymatrix} deve ser usado sempre em modo matemático.
Aqui, especificamos duas linhas e duas colunas. Para converter esta
matriz num diagrama podemos adicionar algumas linhas direccionais
usando o comando \ci{ar}.
\begin{example}
\begin{displaymath}
\xymatrix{ A \ar[r] & B \ar[d] \\
           D \ar[u] & C \ar[l] }
\end{displaymath}
\end{example}
O comando para desenhar a seta é colocado na célula de origem da seta.
O argumento é a direcção para a qual a seta deve apontar:
esquerda (\texttt{l}eft), direita (\texttt{r}ight), cima (\texttt{u}p) ou
para baixo (\texttt{d}own).

\begin{example}
\begin{displaymath}
\xymatrix{
  A \ar[d] \ar[dr] \ar[r] & B \\
  D                       & C }
\end{displaymath}
\end{example}
Para criar diagonais, junte mais do que uma direcção. De facto,
até pode repetir direcções para criar setas mais compridas.
\begin{example}
\begin{displaymath}
\xymatrix{
  A \ar[d] \ar[dr] \ar[drr] & & \\
  B                      & C & D }
\end{displaymath}
\end{example}

Podemos desenhar diagramas ainda mais interessantes adicionando
etiquetas às setas. Para isto, usamos os operadores habituais para
expoentes e índices.
\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}

Como mostrado, usa estes operadores como em modo matemático. A única
diferença é que o expoente significa ``em cima da seta,'' e índice
significa ``por baixo da seta.'' Existe ainda um terceiro operador, a
barra vertical: \verb+|+ que coloca o texto \emph{dentro} da seta.

\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}

Para desenhar uma seta com um buraco, use \verb!\ar[...]|\hole!.

Em algumas situações, é importante distinguir entre diferentes tipos
de setas. Isto pode ser feito colocando-lhe etiquetas, ou mudando a
sua aparência:
\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}

Note a diferença entre os seguintes dois diagramas:

\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}

Os modificadores entre as barras define a forma como as curvas são
desenhadas. O \Xy-pic oferece muitas mais formas de influenciar o
desenho das curvas; para mais informação, veja a documentação e o
tutorial de \Xy-pic.
%

\section{Os Pacotes de Gráficos PGF e TikZ}
\label{sec:tikz}

Nos dias que correm, todos os geradores de \LaTeX{} são capazes
de criar gráficos vectoriais bonitos e de qualidade, só a interface
é que nem sempre é a mais simpática. O pacote \pai{pgf} providencia
um nível de abstracção sobre esta interface. Este pacote vem com uma 
documentação de mais de 500 páginas \cite{pgfplot}. Deste modo, vamos
apenas arranhar a superfície do que pode ser feito com este pacote.

O pacote \pai{pgf} vem com uma linguagem de alto nível, disponibilizada pelo pacote \pai{tikz}. 
O TikZ tem comandos altamente eficientes para desenhar gráficos directamente
a partir do seu documento. Use o ambiente \ei{tikzpicture} para incluir os comandos TikZ.

Como mencionado anteriormente, existe um manual excelente para o \pai{pgf} e amigos. 
Deste modo, em vez de explicar como funciona, vamos apenas ver alguns exemplos, de
modo a que fique com uma impressão inicial de como esta ferramenta funciona.

Em primeiro lugar, um diagrama sem sentido.
\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}
Note que o ponto-e-vírgula (\texttt{;}) é usado para separar comandos individuais.

Um diagrama de Venn simples.
\begin{example}
\shorthandoff{:}
\begin{tikzpicture}
  \node[circle,draw,
        minimum size=3cm,
        label=120:{economia}]
         at (0,0) {};
  \node[circle,draw,
        minimum size=3cm,
        label=60:{psicologia}]
         at (1,0) {};
  \node (i) at (0.5,-1) {};
  \node at (0.6,-2.5) 
    {economia comportamental}
    edge[->,thick,
         out=60,in=-60] (i);
\end{tikzpicture}
\end{example}

Se estiver a usar o pacote \pai{tikz} juntamente com o \pai{babel}, alguns caracteres usados
na linguagem TikZ podem ser modificados pelo \pai{babel}, levando a erros estranhos. Para resolver
este problema, adicione o comando \ci{shorthandoff} no seu código.

Repare nos ciclos \emph{foreach} no próximo exemplo.
\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[->] 
        (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[->] (G-\i-\j) -- (G-\n-\o);
       \draw[->] (G-\n-\j) -- (G-\i-\o);
    }
\end{tikzpicture}
\end{example}

Com o comando \ci{usetikzlibrary} no preâmbulo, pode activar um conjunto grande de funcionalidades
adicionais para desenhar algumas formas especiais, tal como esta caixa ligeiramente curvada.
\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[->,decorate] (A) -- (B);
 \draw[->,decorate] (B) -- (A);
\end{tikzpicture}
\end{example}

\begin{example}
\usetikzlibrary{positioning}
\begin{tikzpicture}[xscale=6,
     yscale=8,>=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,->] 
        (a) to node {} (c);
  \draw[thick,->] 
        (a) to node {} (d);
  \draw[thick,->] 
        (b) to node {} (d);
\end{tikzpicture}
\end{example}

Até pode desenhar diagramas de sintaxe que parecem copiados directamente de um livro
de introdução à programação em Pascal. O código é um bocado mais assustador que nos
exemplos anteriores, pelo que vou apresentar apenas o resultado. Pode dar uma leitura
à documentação do \pai{pgf} e encontrará um tutorial detalhado sobre como desenhar
este mesmo diagrama.
\begin{center}
\begin{tikzpicture}[point/.style={coordinate},thick,draw=black!50,>=stealth',
                    tip/.style={->,shorten >=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=4mm] {
  % First row:
  & & & & & & & & & & & \node (plus) [terminal] {+};\\
  % Second row:
  \node (p1) [point] {}; &     \node (ui1)    [nonterminal] {inteiro positivo}; &
  \node (p2) [point] {}; &     \node (dot)    [terminal]    {.};                &
  \node (p3) [point] {}; &     \node (digit) [terminal]     {dígito};           &
  \node (p4) [point] {}; &     \node (p5)     [point] {};                       &
  \node (p6) [point] {}; &     \node (e)      [terminal]    {E};                &
  \node (p7) [point] {}; &                                                      &
  \node (p8) [point] {}; &     \node (ui2)    [nonterminal] {inteiro positivo}; &
  \node (p9) [point] {}; &     \node (p10)    [point]       {};\\
  % Third row:
  & & & & & & & & & & & \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}

E ainda há mais, se  precisar de desenhar gráficos de dados numéricos ou funções matemáticas,
deve dar uma leitura mais cuidadosa ao pacote \pai{pgfplot}, que introduz tudo o que
precisa para desenhar gráficos matemáticos. Pode até invocar o comando externo \texttt{gnuplot}
para avaliar as funções que escreveu.

Para mais inspiração não deixe de visitar a excelente galeria de Kjell Magne Fauske em \url{http://www.texample.net/tikz/}. Contém uma colecção, cada vez maior, de gráficos bonitos, bem como
outro código \LaTeX{} que pode ser útil.







% \begin{example}
% \begin{lscommand}
% \ci{dum}
% \end{lscommand}
% \end{example}

