SlideShare une entreprise Scribd logo
1  sur  26
Télécharger pour lire hors ligne
Tutorial de X -pic
                                     Y
                         Carlos A. P. Campani
                        campani@ufpel.edu.br
                           14 de abril de 2006


1     Introdu¸˜o
             ca
    X -pic ´ um pacote para tipografar gr´ficos e diagramas em TEX. O pacote
     Y     e                             a
X -pic pode ser usado com TEX e L TE
 Y                                   A X e permite desenhar diversos tipos

diferentes de gr´ficos e diagramas, incluindo pol´
                a                                 ıgonos, n´s e diagramas em
                                                           o
matriz. Ele ´ implementado em torno de um kernel de linguagem gr´fica,
              e                                                          a
que fornece uma nota¸˜o mnemˆnica e consistente, baseada na composi¸˜o
                       ca        o                                         ca
l´gica de componentes visuais.
 o
    Este tutorial tem o objetivo de ser uma introdu¸˜o breve e acess´ ao
                                                      ca               ıvel
uso do X -pic. Estamos longe de pretender apresentar todos os recursos
          Y
dispon´ıveis. Ele complementa o X -pic Reference Manual, de Kristoffer H.
                                   Y
Rose e Ross Moore [2], e o X -pic User’s Guide, de Kristoffer H. Rose [1],
                               Y
que podem ser obtidos em http://www.tug.org/applications/Xy-pic/.
Ainda h´ o ´timo livro The LTEX Graphics Companion, de Goossens, Rahtz,
         a o                 A

e Mittelbach [3]. Recomendamos a leitura de todos estes textos para aqueles
que desejam usar intensamente o X -pic.
                                   Y
    Para carregar o pacote X -pic no TEX usam-se os comandos input xy e
                             Y
xyoption{all}, que carrega todos os recursos, o que pode tornar a execu¸aoc˜
do TEX lenta. Para aumentar o desempenho do TEX recomenda-se carregar
apenas os recursos que ser˜o usados. Da mesma forma que no TEX, para
                            a
carregar o X -pic no L TEX usa-se o comando usepackage[all]{xy} no
              Y         A

cabe¸alho do arquivo.
     c
    Caso se queira produzir gr´ficos de n´s e arcos, deve-se incluir adicional-
                               a          o
mente as op¸oes knot e arc. Tamb´m precisamos declarar as op¸˜es import
             c˜                     e                             co
e poly se quisermos importar imagens postscript e desenhar pol´    ıgonos nos


                                      1
diagramas. Para isto basta usar, no cabe¸alho do arquivo L TEX, o comando
                                        c                  A

usepackage[all,knot,arc,import,poly]{xy}.
   Problemas podem ocorrer devido a flexibilidade do formato de entrada
do TEX. Isto causa algumas situa¸oes complicadas de conflito. Um exemplo
                                 c˜
´ o uso do X -pic junto com o pacote babel, em portuguˆs e outras l´
e           Y                                            e          ınguas
que redefinem as aspas, como ´ o caso tamb´m do alem˜o, o que povoca
                               e             e             a
conflito quando se deseja salvar posi¸˜es em um diagrama. Este problema
                                     co
pode ser resolvido ao usarmos $$ shorthandoff{"} xy ... endxy $$,
protegendo os comandos X -pic definidos dentro de xy ... endxy.
                          Y
   Outro problema ´ o conflito do caracter & quando usado em um diagrama
                    e
do X -pic dentro de um ambiente tabular. Neste caso, ´ poss´ resolver o
    Y                                                  e     ıvel
problema protegendo os comandos X -pic dentro de um par { e }.
                                    Y


2    Conceitos B´sicos
                a
    A estrutura geral de uma X -figura ´ xy ... endxy, que constr´i uma
                              Y        e                           o
caixa (box ) com uma X -figura (usu´rios L TE
                         Y           a     A X podem substituir este co-

mando por begin{xy} ... end{xy}). Nesta estrutura podem ser decla-
rados comandos da “linguagem gr´fica” do X -pic.
                                  a         Y
    N˜o h´ necessidade de colocar a X -figura explicitamente em modo mate-
     a a                             Y
m´tico, pois a declara¸ao xy ... endxy j´ o faz. Caso haja necessidade
  a                    c˜                    a
de apresentar texto dentro da X -figura, basta usar o comando txt{ ... }.
                               Y
    Os elementos que formam a linguagem do X -pic s˜o:
                                               Y      a

Posi¸oes Representam coordenadas de pontos dentro da caixa da X -figura;
    c˜                                                         Y
Objetos Um objeto ´ como uma caixa (box ) do TEX que pode ser posto em
                   e
    uma posi¸ao, exceto que ele possui uma borda (edge);
            c˜

Conex˜es Junto com a capacidade de colocar objetos em posi¸˜es, todos os
     o                                                    co
    objetos podem ser usados para conectar duas posi¸oes;
                                                    c˜

Decora¸oes Sempre que o X -pic encontra algo que n˜o pode ser inter-
      c˜                    Y                         a
    pretado como uma posi¸ao, ele interpreta o que se segue como uma
                            c˜
    decora¸˜o, ou seja, um conjunto restrito de comandos a ser adicionado
          ca
    ` figura.
    a

   Posi¸oes podem ser representadas por pares (x,y), cujos valores x cres-
       c˜
cem da esquerda para a direita, e os valores y de baixo para cima. Assim,

                                    2
a origem do sistema de coordenadas ´ o ponto (0, 0) (tamb´m representado
                                     e                    e
como 0), e a X -figura est´ contida no seguinte retˆngulo:
              Y          a                        a
                                                       y
                                                           Ymax

                                                              0
                                            o          •                 G
         ponto de referˆncia TEX
                       e                        Xmin       Ymin   Xmax
                                                       

   A forma mais simples de colocar coisas em uma X -figura ´ “largar” um
                                                  Y       e
objeto em uma posi¸ao. Para definir posi¸oes e “largar” objetos usa-se o
                   c˜                     c˜
operador *. Por exemplo,
(0,0)*{A}
coloca o r´tulo A na posi¸ao (0, 0).
          o              c˜
    Al´m de poder “largar” objetos em uma posi¸ao da X -figura, podemos co-
      e                                         c˜     Y
nectar os dois objetos correntes do estado, formado pelas posi¸oes p (posi¸˜o
                                                              c˜          ca
pr´via) e c (posi¸˜o corrente). Para definir conex˜es usa-se o operador **.
  e              ca                                o
Assim,
xy
(0,0)*{};(10,0)*{} **dir{-}
endxy
define a posi¸˜o pr´via p = (0, 0) e a posi¸ao corrente c = (10, 0) e conecta
             ca    e                        c˜
ambas com um direcional definido por **dir{-}. Qualquer objeto pode
ser usado como conector e, neste caso, foi usado o -, indicando que as duas
posi¸oes devem ser conectadas por uma linha simples. Observe que (0,0)*{}
    c˜
e (10,0)*{} define as posi¸˜es pr´via e corrente, sem “largar” nenhum objeto
                          co     e
nelas.
    O operador ; indica que deve-se atualizar as posi¸˜es pr´via e corrente,
                                                      co     e
trocando a corrente anterior pela pr´via e fazendo da ultima posi¸˜o inserida
                                    e                 ´          ca
a nova corrente. Assim, em
xy
(0,0)*{};(10,0)*{} **dir{-};
(10,10)*{} **dir{-}
endxy

                                     3
O primeiro ; define as posi¸˜es p = (0, 0) e c = (10, 0). O segundo ; atribui
                             co
a p o valor anterior de c, (10, 0), e faz c = (10, 10). Ent˜o s˜o tra¸adas duas
                                                           a a       c
linhas, uma entre (0, 0) e (10, 0) e outra entre (10, 0) e (10, 10).
    Objetos possuem uma borda (edge). Assim, um objeto pode ser entendido
como uma caixa (box ) TEX, com uma forma (shape), e com dimens˜es L, U ,
                                                                       o
R e D. A forma do objeto for¸a a forma de sua borda. O kernel do X -pic
                                 c                                        Y
fornece trˆs formas (shapes), nomeadas [.], [] e [o], correspondendo a:
          e


                  c
                               U                       U
                      ,      L c R
                                            e     oL c Rl
                                                   hi k
                                                    njm
                               D                       D

   A forma (shape) default dos objetos ´ [].
                                        e
   O X -pic fornece um conjunto de direcionais, como no exemplo anterior
       Y
o **dir{-}. Os direcionais s˜o elementos gr´ficos que podem ser tanto
                                a               a
conectores quanto pontas (que terminam as extremidades de uma conex˜o).
                                                                      a
   Os conceitos apresentados de forma breve nesta se¸ao ser˜o melhor de-
                                                      c˜     a
senvolvidos nas pr´ximas se¸oes. Particularmente a se¸ao seguinte tratar´
                   o         c˜                        c˜                a
dos recursos do kernel do X -pic, e mostrar´ por meio de exemplos o uso de
                           Y               a
posi¸oes, objetos e conex˜es.
    c˜                   o


3    Usando o Kernel do X -pic
                         Y
   Nesta se¸ao mostraremos o uso do kernel do X -pic por meio de exemplos
            c˜                                  Y
comentados. Ser˜o introduzidos os recursos b´sicos dispon´
                 a                            a            ıveis no kernel, e
nas se¸oes seguintes ser˜o explorados aspectos mais avan¸ados.
      c˜                a                               c
   A coisa mais simples que podemos fazer com o X -pic ´ definir duas
                                                       Y      e
posi¸oes e conecta-las. Isto ´ mostrado no exemplo seguinte, onde ´ pro-
    c˜                       e                                        e
duzida uma linha simples conectando as posi¸˜es (0, 0) e (10, 0):
                                             co
 xy
 (0,0)*{};(10,0)*{} **dir{-}
 endxy
    Podemos tamb´m “largar” objetos nas posi¸˜es. Isto ´ feito neste outro
                  e                             co     e
exemplo, em que definimos dois objetos com r´tulos A e B, e tra¸amos uma
                                              o                c
linha na diagonal ligando estes dois r´tulos:
                                      o



                                      4
xy                                                                B
                                                               
 (0,0)*+{A};(10,10)*+{B} **dir{-}                          
 endxy                                                 A
   O operador * ´ usado para definir posi¸oes e “largar” objetos, e o operador
                 e                      c˜
** ´ usado para definir conex˜es.
   e                         o
   Neste ultimo exemplo, observa-se o modificador + usado em (0,0)*+{A} e
          ´
(10,10)*+{B}. Este modificador serve para obter espa¸o adicional em torno
                                                       c
do objeto, evitando que o conector fique muito pr´ximo ao objeto, como seria
                                                 o
o caso de:
 xy                                                           B
                                                             
 (0,0)*{A};(10,10)*{B} **dir{-}                           
                                                         
 endxy                                                 A
   Podemos usar qualquer objeto como conector, como vemos no exemplo a
seguir:
 xy                                                              cB
 (0,0)*+{A};(10,10)*+{B} **dir{}                             cc
                                                            cc
 endxy                                                 A
    Podemos definir trˆs posi¸˜es em seq¨ˆncia e conecta-las. Como se expli-
                       e     co         ue
cou na se¸˜o anterior, o direcional **dir{-} conecta as posi¸˜es p e c do
          ca                                                   co
estado do X -pic. O operador ; ´ usado para mudar o estado, trocando as
            Y                     e
posi¸oes p e c e atualizando a c. Mostramos isso no seguinte exemplo:
    c˜
 xy
 (0,0)*{};(10,0)*{} **dir{-};
 (10,10)*{} **dir{-}
 endxy
   Neste exemplo, a sequˆncia de mudan¸as de estado e a¸˜es do X -pic,
                         e              c                co        Y
associada aos comandos que as executam, ´ apresentada na Tabela 1.
                                        e

   Textos podem ser postos em uma X -figura usando o comando txt:
                                   Y
 xy                                                                      B
                                                                        
 (5,5)*{A};(15,15)*{B} **dir{-};                                     
                                                                    
 (0,0)*{txt{texto qualquer}}                               A
 endxy                                            texto qualquer


                                     5
A¸˜o
                                ca                      Comando
            1                c ← (0, 0)                 (0,0)*{}
            2                  p←c                         ;
            3               c ← (10, 0)                (10,0)*{}
            4    tra¸a linha entre (0, 0) e (10, 0)
                     c                                 **dir{-}
            5                  p←c                         ;
            6              c ← (10, 10)                (10,10)*{}
            7   tra¸a linha entre (10, 0) e (10, 10)
                   c                                   **dir{-}


                 Tabela 1: Exemplo de execu¸˜o do X -pic
                                           ca      Y

   Este novo exemplo mostra o uso de conex˜es com pontas:
                                          o
 xy                                                                     B
                                                                     c
 (0,0)*+{A};(10,10)*+{B} **dir{-} ?* dir{}                    
 endxy                                                       A
    Direcionais podem ser do tipo conectores ou pontas. No exemplo dado,
**dir{-} ´ um direcional conector, e dir{} ´ um direcional ponta.
            e                                    e
    O ?* serve para indicar a posi¸ao da ponta no conector. O operador ?
                                    c˜
serve para “pegar” o lugar da conex˜o mais recente definida por um **. O
                                     a
modificador  move posi¸oes, neste caso para o extremo final da conex˜o.
                         c˜                                           a
    Poder´ıamos posicionar a ponta no outro extremo do conector usando ?*:

 xy                                                                       B
                                                                      
 (0,0)*+{A};(10,10)*+{B} **dir{-} ?* dir{}                    c
 endxy                                                       A
   Para melhorar o exemplo anterior poder´
                                         ıamos usar espa¸o adicional em
                                                        c
torno dos objetos:

 xy                                                                       B
 (0,0)*++{A};(10,10)*++{B} **dir{-} ?* dir{}                   
                                                                   c
 endxy                                                       A

   Cada modificador + dobra o valor do espa¸o em torno de um objeto.
                                             c
Assim, ao usar, por exemplo, (0,0)*++{A} estamos introduzindo um espa¸o
                                                                     c


                                       6

                                                              
                                                                                                              
                                                                                                                  
                                                         
                                                                                                              
                                                                                                               
                                                                                                                 
                                                                                                          
                                                                                                              
                                                                                                         
                                                                                                          
                                                                                                              
         dir{-}                         dir2{-}    
                                                                          dir3{-}                      
                                                                                                           


         dir{.}                           dir2{.}                         dir3{.}
                                 ?                                                   ? ?                                                      ? ? ?
                           ? ?                                    ? ? ? ?                                              ? ? ? ? ? ?
                     ? ?                              ? ? ? ?                                        ? ? ? ? ? ?
         dir{~}                           dir2{~}                                           dir3{~}
                                                                                                                                               
                                                                                                                                                     
                                                                                                                          
                                                                                                                             
                                                                                                                             
        dir{--}                          dir2{--}   
                                                       
                                                              
                                                                                              dir3{--}   
                                                                                                          
                                                                                                          
                                  ?                                            ? ?                                                      ? ?
                             ?                                       ? ?                                                    ? ? ?
                        ?                                    ? ?                                                 ? ? ? ?
        dir{~~}                           dir2{~~}                       dir3{~~}


                     Figura 1: Direcionais (conectores)

4 vezes maior.
   Agora podemos inverter a ponta, como fazemos no exemplo seguinte:
 xy                                                                                                                                       B
                                                                                                                      
 (0,0)*+{A};(10,10)*+{B} **dir{-} ?* dir{}                                                                    
 endxy                                                                                                   A
    As Figuras 1 e 2 apresentam os direcionais (conectores e pontas). Observe-
se o recurso de fazer o conector duplo ou triplo por meio de dir2 e dir3,
e as varia¸oes de pontas usando-se dir^ ou dir_.
          c˜
    Podemos produzir setas com o X -pic. Para isto usamos o comando ar:
                                    Y
 xy                                                                                                   B
                                                                                                   c
 {ar (0,0)*+{A}; (10,10)*+{B}}                                                                 
 endxy                                                                                    A
   A Figura 3 apresenta as setas que podem ser usadas em uma X -figura.
                                                               Y
Devemos observar que ar@{=} e ar@{:} s˜o abreviaturas de ar@2{-}
                                           a
e ar@2{.}.
   Podemos curvar uma seta, como por exemplo em:
 xy                                                                                                                                  HB
 {ar@/^1pc/ (0,0)*+{A}; (10,10)*+{B}}
 endxy                                                                                                   A


                                                  7
c                      c                 c
 dir{}              dir^{}              dir_{}     
 dir{}        c dir^{}        c           dir_{}     c
 dir{|}        / dir^{|}       /          dir_{|}     /
 dir{(}          oO   dir^{(}          oO   dir_{(}               oO
 dir{)}               dir^{)}   /           dir_{)}     
                       dir^{‘}          O    dir_{‘}               o
                       dir^{’}               dir_{’}
                cc                     cc                 cc
dir{}            dir^{}           dir_{}           
dir{}        c dir^{}
                c                 c
                                  c           dir_{}   c
                                                          c
dir{||}        c dir^{||}
                                 c dir_{||}             c
                                                           
dir{|-}        c dir^{|-}                   dir_{|-}
                c                      cc
                                        c                 c
                                                          
dir{|}        c dir{|}
                                             dir{|}
                                       •                  ◦
dir{|}        c     dir{*}         •1      dir{o}    H
                 
 dir{+}        HH     dir{x}                 dir{/}
dir{//}


            Figura 2: Direcionais (pontas)




                            8
                                                                          c                       cc
                                                                                                                   
                                                                                                               
                                                                                                              
 ar@{-}                 ar@{-}                                                               ar@{-}   
                                                                                              c                          Yg
                                                                                                                  
                                                                                                                       
                 
                   
                                                                                                                  
                                                                                                                    
                                                                                                                    
                                                                                                              
                                                                                                                  
ar@{-}                ar@{-}                                        
                                                                                                   ar@2{-}   
                                                                                                                
                      Yg                                                             Uq                               
                   
                  
                                                                                     
                                                                                    
                                                                                                                   
                 
                                                                                
                                                                                 
                                                                                                                 
               
                                                                          
                                                                                                                
ar@{=}    
                     c ar@3{-}                                                               ar@{-}    
                                                                                     Oo                              ◦
                                                                                                                   
                                                                                                                
                                                                                                              
ar@{-|}                 ar@{-)}                                                               ar@{-o}    
                     c                                                               
                                                                                            c
                                                                                                                       
                                                                                                                               c
                                                                                                                
                                                                              
                                                                                                                  
ar@^{-}               ar@_{-}                                                              ar@{|-}   c
                                                                                                                
                         c                                                               Yg                                 Yg

ar@{.}                                                       ar@2{.}                            ar@{:}
                                                   Uq                                       c                                                       Yg
                                                                                   ? ? ?                                           ? ? ? ?
                                                                                                                             ? ?
ar@3{.}                                                      ar@{~}      ? ?                  ar@2{~}    ? ? ? ?
                                                ? ? ? Uq                                c                                                    ? c
                              ? ? ? ? ? ?                                    
                                                                                                                                  ?
ar@3{~}   ? ? ? ? ? ?                                  ar@{--}    
                                                                               
                                                                                                    ar@{~~}       ?


                                                                Figura 3: Setas




                                                                      9
O /^1pc/ ´ um vetor, normalmente usado para denotar um deslocamento,
             e
e que neste caso ´ usado para especificar a curvatura da seta. A curvatura
                 e
especificada no exemplo ´ de 1pc=12pt (pontos). Outras unidades de medida
                        e
usadas pelo TEX s˜o ex (correspondendo ` altura da letra “x”), mm, cm e
                   a                      a
in (polegadas). O ^ indica a dire¸ao da curvatura (para cima).
                                 c˜
    Poder´
         ıamos curvar a seta para baixo, como em:
 xy                                                                   Bx
 {ar@/_1pc/ (0,0)*+{A}; (10,10)*+{B}}
 endxy                                                        A
    X -pic fornece a facilidade de r´tulos para indicar posi¸oes. Assim, com
     Y                              o                       c˜
(0,0)*{}=A podemos criar o r´tulo A para indicar a posi¸˜o (0, 0). No
                                   o                           ca
seguinte exemplo definimos trˆs r´tulos para indicar posi¸oes dos v´rtices do
                               e o                        c˜       e
triˆngulo que ser´ tra¸ado:
   a              a    c
 xy
 (0,0)*{}=A; (10,0)*{}=B; (10,10)*{}=C;
                                                                       
 A;B **dir{-};                                                  
                                                                   
 A;C **dir{-};                                              
                                                               
 B;C **dir{-};
 endxy
    A opera¸˜o !{pos1,pos2} permite encontrar o ponto em que a ultima
           ca                                                       ´
conex˜o intercepta uma linha definida pelas posi¸˜es pos1 e pos2. Por exem-
      a                                        co
plo:
 xy                                                                       B
 (0,5)*{1}=1; (17,15)*{2}=2 **dir{.};                                 2
                                                                        •
 (6,0)*{A}=A; (13,18)*{B}=B **dir{-}                              
 ?!{1;2} *{bullet}                                    1         
                                                                   
 endxy                                                        A
    No comando ?!{1;2} *{bullet}, o operador ? “pega” a posi¸ao c˜
da ultima conex˜o definida (neste caso a que liga as posi¸oes A e B),
    ´           a                                       c˜
e a seguir a opera¸˜o !{1;2} encontra o ponto de intercepta¸ao desta
                  ca                                            c˜
conex˜o com a linha que liga as posi¸˜es 1 e 2. Ent˜o ´ posto um •
      a                               co                a e
(“bullet”) no ponto de intercepta¸ao.
                                 c˜
    Podemos definir diagramas aninhados, ou seja, diagramas dentro de ou-
tros diagramas. Para isto basta usar um diagrama como se fosse um objeto


                                    10
ou um direcional. Neste exemplo ilustramos o uso deste recurso:
 xy
 (0,0)*++{
 xy
 (0,0)*+{A}; (0,10)*+{B} **dir{-} ?* dir{}
 endxy
 }=x;                                                         By                     B
 (20,0)*++{                                                                   CQ
                                                                                       
 xy                                                            A                      A
 (0,0)*+{A}; (0,10)*+{B} **dir{-} ?* dir{}
 endxy
 }=y;
 {ar@{=} x;y};
 endxy
   Observe que
xy
(0,0)*+{A}; (0,10)*+{B} **dir{-} ?* dir{}
endxy
´ atribuido a x e usado como objeto posicionado em (0, 0) e
e
xy
(0,0)*+{A}; (0,10)*+{B} **dir{-} ?* dir{}
endxy
´ atribuido a y e usado como objeto posicionado em (20, 0). Ambos os
e
objetos s˜o conectados pela seta dupla definida por {ar@{=} x;y}.
         a
   Podemos usar macros TEX em X -figuras. Por exemplo:
                                   Y
 defgrafo{xy (0,10)*+{A}; (0,0)*+{B} **dir{-}
 ?* dir{} endxy}                                              A                A
 xy                                                                     CQ
                                                                                  
 {ar@{=} (0,0)*{grafo};(15,0)*{grafo}}                        B                B
 endxy
   Neste diagrama,
defgrafo{xy (0,10)*+{A}; (0,0)*+{B} **dir{-}
?* dir{} endxy}

                                    11
define uma macro TEX, referenciada como grafo, que ´ usada duas vezes
                                                   e
aninhada no diagrama.


4    Extens˜es
           o
   Nesta se¸˜o s˜o descritas algumas extens˜es ao kernel do X -pic. Apre-
           ca a                              o                Y
sentaremos curvas, c´
                    ırculos, frames e importa¸ao de gr´ficos externos.
                                             c˜       a

   Usando-se o comando crv podemos criar curvas com m´ltiplos pontos
                                                      u
tangentes:
 xy
 (0,0)*{}=A;
 (10,0)*{}=B;
 A; B **crv{(5,5)};
 endxy
    Neste exemplo, a curva foi definida tendo apenas um ponto tangente, o
(5, 5).
    Podemos definir curvas com mais pontos tangentes:
 xy
 (0,0)*{}=A;
 (25,0)*{}=B;
 A; B **crv{(5,-17)  (12,8)};
 endxy
    Uma facilidade para desenvolver curvas ´ tornar os pontos tangentes
                                           e
vis´
   ıveis. Para isto usa-se ~pC:
                                                               c
                                                               
 xy
 (0,0)*{}=A;
 (25,0)*{}=B;
 A; B **crv~pC{(5,-17)  (12,8)};
 endxy                                                    c
                                                           

    Para produzir c´
                   ırculos usamos o comando cir. O tamanho default do
c´
 ırculo ´ o tamanho do objeto que ele envolver´. Este exemplo ilustra isto:
        e                                     a



                                    12
xy
 (0,0)*+{A}; (10,0)*+{B}*cir{} **dir{-}                    A           0123
                                                                         7654
                                                                          B
 endxy
   Podemos especificar um raio para o c´  ırculo. Por exemplo, se o c´ ırculo
deve ter 20pt de raio, usamos cir20pt{}.
   Segmentos de c´ ırculo podem ser obtidos especificando-se as dire¸oes dos
                                                                   c˜
vetores tangentes e um giro em sentido hor´rio (usando _) ou sentido anti-
                                           a
hor´rio (usando ^). As dire¸oes que podem ser especificadas s˜o:
   a                        c˜                               a
                                        u ur = ru
                                         y
                           ul = •cc
                                 lu         c
                                    c           
                                     ccc      
                                            
                              lo        GABD
                                        @FEC
                                            c
                                                    Gr
                                           cc
                                             cc
                                              c1
                                          
                            dl = ld      d dr = rd
   Exemplos de segmentos de c´
                             ırculo:
 xy   *cir5pt{l^r} endxy            '!
                                          
 xy   *cir5pt{dl_u} endxy           !
 xy   *cir5pt{dr^ur} endxy          !
 xy   *cir5pt{dr_ur} endxy          '!#$
 xy   *cir5pt{ur^dr} endxy          '%#$

    Se s˜o dadas a mesma diagonal duas vezes, ent˜o nada ´ produzido, como
        a                                        a       e
em xy *cir5pt{d^d} endxy, que produz “ ”.
    No pr´ximo exemplo produziremos um “smile” usando c´
          o                                                ırculo, vetores, e
os operadores ?, _ e !:
 xy
 (0,0)*{};(4,0)*{} **dir{} ? *_!/3pt/dir{)}                    '!$#
                                                                  ? %
                                                                  
 *_!/7pt/dir{:}; (2,2)*cir5pt{};
 endxy
   O operador ?, que j´ explicamos anteriormente, serve para “pegar” a
                        a
posi¸ao da ultima conex˜o. O operador _ serve para girar um objeto 90o
    c˜      ´           a
em sentido hor´rio (para o sentido anti-hor´rio usar´
               a                           a        ıamos o operador ^). O
operador ! serve para tornar a dire¸˜o obl´
                                   ca      ıqua ao direcional usado (skew ).
Finalmente, os vetores /3pt/ e /7pt/ servem para deslocar os objetos “)” e
“:” sobre a dire¸ao.
                c˜

                                        13
Vamos explicar passo a passo a constru¸ao do smile do nosso exemplo.
                                          c˜
    Em primeiro lugar, usamos o operador ? para “pegar” a posi¸˜o do dire-
                                                               ca
cional “vazio” (dummy) que conecta (0, 0) e (4, 0). Sobre esta dire¸˜o ser´
                                                                   ca     a
posto o “)”. Ilustramos isto, mostrando o direcional vazio como uma linha
pontilhada para melhor visualiza¸ao:
                                c˜

                                       )

   Para produzirmos a boca do smile devemos girar o “)” em um ˆngulo de
                                                                  a
90o em sentido hor´rio, e para isto usamos o operador _, resultando em:
                  a
                                      ?


   Usamos o operador ! para indicar a dire¸ao obl´
                                          c˜     ıqua ao direcional (para
que possamos depois deslocar). Ilustramos com uma seta pontilhada esta
nova dire¸˜o:
         ca                         y
                                      ?

   As mesmas opera¸˜es s˜o feitas sobre o “:”, que formar´ os olhos do
                    co    a                                 a
smile.
   Finalmente, deslocamos o “)” e o “:” na nova dire¸˜o, usando os vetores
                                                    ca
/3pt/ e /7pt/, respectivamente:
                                      ?


   O c´
      ırculo foi usado como “toque final” para completar o smile.
   Poder´ıamos tamb´m desenhar um smile usando um segmento de c´
                     e                                           ırculo,
como em:
 xy
 (0,0)*{};(4,0)*{} **dir{} ? *_!/7pt/dir{:};
 (2,2)*cir5pt{};                                               '!$#
                                                                   %
                                                                   
 (2,2)*cir3pt{dr^ur};
 endxy
    Observe que a boca, tendo sido feita com um segmento de c´ ırculo, resultou
em um smile um pouco diferente ao do exemplo anterior.
    Frames s˜o molduras que podem ser postas em X -figuras. Uma moldura
            a                                         Y
(frame) ´ um objeto X -pic na forma frm{ ... }. Na Figura 4 s˜o mostra-
        e            Y                                              a
dos alguns tipos de molduras dispon´  ıveis (para mais veja o X -pic Reference
                                                               Y
Manual ).

                                      14
Usando                 Usando            Usando
            frm{}                 frm{.}        frm44pt{.}

           Usando            ? Usando =         HI Usando ML
                                                  ON        JK
           frm{-}           89         :;
                             frm8pt{-}         frm44pt{-}
           1• • • • • 1           • • •
                                Usando  1          • • • • • • c
                                                        •
             Usando            1
                               1              1   11     Usando      11
           1frm{--}1          frm{o-}
                                • • •            c
                                                  frm44pt{--}
            • • • • •                                   • • • • • • 
                                                                   •

           Usando               Usando                 Usando
           frm{,}           frm5pt{,}             frm{-,}

           Usando
           `abc
           gfed                 Usando
                                  ?=
                                  89:;                 Usando
           frm{o}           frm8pt{o}             frm{.o}
                                                           r • vP
            Usando              Usando                   
                                                       Usando1
                                                       1
            _^]
            XYZ[                 PQRS
                                 WVUT
                                 ONML
                                 HIJK
           frm{ee}       frm20pt,8pt{ee}             P
                                                      frm{-e}
                                                           v • r


                          Figura 4: Molduras (frames)

   Podemos agora, usando curvas e molduras (frames), construir o seguinte
diagrama:

 xy
                                                          Quadrado
 (0,0)*++{txt{Redondo}}*frm{oo}=r;                  b
 (30,30)*++{txt{Quadrado}}*frm{-,}=q;
 r;q **dir{} ? *++{txt{Liga}}*frm{.}=l;
                                                   Liga
 r;l **crv{(15,0)};
 l;q **crv{(15,30)} ?* dir{};
 endxy                                   wvut
                                          pqrs
                                           hijk
                                           onml
                                           Redondo

   Observe neste exemplo como o Liga ´ posicionado usando-se o operador
                                         e
? para obter a posi¸ao da liga¸˜o entre r e q.
                   c˜         ca
   Para importar imagens postscript devemos declarar a op¸˜o import na
                                                          ca
declara¸ao usepackage[all,import]{xy}. Podemos usar qualquer pacote
       c˜
para importar a imagem, como por exemplo, graphicx, graphics, epsf ou
epsfig. Neste caso, usamos o graphicx, e para isto devemos declarar o uso


                                         15
do pacote com o comando usepackage{graphicx}.
    Usamos xyimport para estabelecer um sistema de coordenadas para uma
imagem em particular, permitindo que qualquer comando do X -pic seja usa-
                                                              Y
do, com as posi¸oes relativas ao sistema de coordenadas definido. Para isto, o
                c˜
comando xyimport(larg,alt){imagem} exige que se defina uma largura e
uma altura, que fornece uma distˆncia em unidades de coordenadas, iniciando
                                  a
no canto inferior esquerdo, onde o sistema de coordenadas usualmente deve
estar localizado.
    Assim, usando a imagem apresentada na Figura 5, podemos produzir o
que se pode ver na Figura 6, usando o seguinte c´digo:
                                                  o
defgrafico{includegraphics[width=9cm]{grafico.eps}}
xy
xyimport(100,100){grafico}
{ar (75,85)*+{txt{Astr´ide}}; (60,75)*{}}
                        o
{ar (75,25)*+{txt{Elipse}}; (80,37)*{}}
endxy
    Observe-se que
defgrafico{includegraphics[width=9cm]{grafico.eps}}
´ uma macro TEX para definir a imagem a ser importada.
e


5     Usando Pol´
                ıgonos e Elipses
   Para usar pol´
                ıgonos em diagramas ´ necess´rio carregar o X -pic decla-
                                     e      a                 Y
rando a op¸˜o poly, usando o comando usepackage[all,poly]{xy}.
          ca
   Pol´
      ıgonos podem ser produzidos usando-se o comando xypolygon. Por
exemplo, podemos criar um hex´gono usando:
                              a
                                                   ◦         I
                                                            ◦II
                                                                 II
                                                                   II
                                                                     II
 xy                                                                   I
                                                  
                                                  I
                                                 ◦II                     ◦
 /r4pc/:{xypolygon6{circ}}
                                                     II                 
 endxy                                                II             
                                                         II         
                                                           I      
                                                          ◦    ◦

   Observe-se que /r4pc/ especifica o tamanho do pol´  ıgono em 4pc (48pt).
O n´mero de lados do pol´
   u                    ıgono ´ declarado por meio de um valor inteiro ap´s
                              e                                          o

                                     16
3




 2




 1




 0




−1




−2




−3
 −2   −1.5   −1   −0.5    0    0.5      1           1.5   2




      Figura 5: Imagem sem comandos XY


 3




                                     Astr´ide
                                         o
                                  ppp
 2

                              xppp
 1




 0




                                               q
                                             
−1

                                            
                                      Elipse
−2




−3
 −2   −1.5   −1   −0.5    0    0.5      1           1.5   2




      Figura 6: Importando uma imagem


                         17
o comando xypolygon. Assim, especificamos o hex´gono com xypolygon6.
                                                a
Al´m disto, o argumento circ indica que os v´rtices do pol´
   e                                          e            ıgono dever˜o
                                                                      a
ser c´ırculos.
     Alguns outros exemplos de pol´
                                  ıgonos s˜o:
                                          a
 xy /r8mm/:                                                                  c
                                                         II                   ◦c             I
 , 0 ,{xypolygon6{}}                                    II      ◦
                                                                               cc      •   •I
                                                                                               II
                                                           I   
                                                                 ◦                 ◦           I
 ,+/r18mm/,{xypolygon8{@{o}}}                   I
                                                 I                                  
                                                                                    I
                                                                                   •I      ◦      •
                                                   II         c
                                                                 ◦c               ◦ II
                                                                                   I          
 ,+/r18mm/,{*@{o}xypolygon6{@{*}}}                  I             c             
                                                                  c
                                                                      ◦       
                                                                              ◦
                                                                                        •   
                                                                                             •
 endxy
   Nestes exemplos, 0 (origem) e +/r18mm/ (deslocamento) especificam o
posicionamento dos trˆs pol´
                     e     ıgonos, e os @{o} e @{*} especificam os v´rtices.
                                                                   e
   Mais exemplos:
 xy /r8mm/:
 , 0 ,{xypolygon6{~*{dir{*}}}}
                                                     •   •I               •            •II
                                                                                       II     •
                                                                                              
 ,+/r18mm/,                                              II •
                                                             I
                                                                                •      III 
                                                                                        III
                                                                                        I
                                                                                          I
 {xypolygon8{~{.}~{}~={45}{dir{*}}}}         •I
                                                   II        
                                                              ••                  ••
                                                                                        III
                                                                                                •
                                                     I      •                         IIII
 ,+/r18mm/,                                          •   •
                                                                               •     I•
                                                                                     •
                                                                          •
 {xypolygon6{~{=}~{:}{dir{*}}}}
 endxy
   Neste exemplo, observamos o uso de ~, ~ e ~= para indicar conex˜es   o
entre os v´rtices do pol´
          e             ıgono.
   Para produzir elipses usamos xycircle. Assim, (0,0)*xycircle(7,2){.}
produz uma elipse centrada em (0, 0), com largura 7 e altura 2, e pontilhada:



6    Produzindo Diagramas em Matriz
   O X -pic oferece uma facilidade (feature) para tipografar diagramas em
      Y
forma de matriz. Este tipo de diagrama tem aplica¸ao em diversas ´reas da
                                                  c˜               a
matem´tica e de ciˆncia da computa¸ao, como por exemplo em teoria dos
      a            e                 c˜
autˆmatos e teoria das categorias. Para produzir um diagrama deste tipo
   o
usamos o comando xymatrix{ ... }.
   O diagrama ser´ formado pelas entradas de uma matriz, organizadas
                   a
em linhas e colunas. Cada entrada pode conter uma express˜o matem´tica
                                                            a        a
(produzida usando o modo matem´tico).
                                  a

                                    18
Usa-se  para separar as colunas e  para indicar nova linha, em uma
nota¸ao semelhante ao ambiente array do modo matem´tico do L TEX. As-
    c˜                                                a        A

sim, se desejamos produzir uma matriz com duas linhas e duas colunas,
usamos:

 xymatrix{                                           1            2
 1  2 
 3  4
 }                                                    3            4

   Poder´ıamos omitir entradas ` direita que n˜o fossem necess´rias no dia-
                               a              a               a
grama, como em:

 xymatrix{                                           1            2
 1  2 
 3
 }                                                    3

   Tamb´m podemos deixar entradas em branco na matriz, como em:
       e

 xymatrix{                                           1            2
 1  2 
    4
 }                                                                 4

    Para conectar entradas por setas usamos ar. O destino da seta ´ defi-
                                                                      e
nido de forma relativa ` origem por meio de uma seq¨ˆncia de u (acima), d
                       a                              ue
(abaixo), l (esquerda) e r (direita), colocados entre colchetes. Assim, para
conectar a entrada da primeira linha e coluna com a da segunda linha e
coluna usamos ar[dr]:

 xymatrix{                                           1 aa         2
 1 ar[dr]  2                                          aa
                                                            aa
 3          4                                                a0
 }                                                    3            4

   As setas da Figura 3 funcionar˜o tamb´m com o xymatrix:
                                 a      e




                                    19
xymatrix{
                                                                 •d            CQ •
 {bullet} ar@{:}[r] ar@{--}[dr]  {bullet}                      d
 ar@{=}[d]                                                            d
                                                                              d1 
 {bullet} ar@{-}[u] ar@{.}[r]  {bullet}                    •             G•
 }
   Este ´ um exemplo com uma matriz trˆs por trˆs:
        e                             e        e
                                                                          √
 xymatrix{                                            2×4
                                                         i                    2       22
                                                               ii                  }}
                                                                  ii          }}
 2times 4 ar[ddrr]  sqrt{2} ar[ddl]                            ii         }
                                                                      i
                                                                      i      }}
  2^2 ar[dl]                                                    iii ~}
                                                          2             4ii          6
 2  4  6                                                                ii
                                                                             ii
                                                                                  ii
 1.414  2.7  8                                           Ô                      i4
 }                                                     1.414              2.7         8

   Observe que a seta que liga 2 × 4 e 8 passa sobre o 4, o que pode ser
inconveniente. Para evitar isto podemos curvar a seta para cima, usando
“@/^/”, ou para baixo, usando “@/_/”. Neste caso, curvaremos para baixo:
                                                              √
 xymatrix{                                  2×4                2            22
                                                                       }}
 2times 4 ar@/_/[ddrr]  sqrt{2} ar[ddl]                        }}
                                                                  }}
  2^2 ar[dl]                                                ~}}
                                               2            4             6
 2  4  6                                         
 1.414  2.7  8                                   
                                                Ô                        8
 }                                           1.414            2.7            8

   Para uma curvatura maior poderiamos usar, por exemplo, @/_1pc/.
   Podemos colocar um r´tulo acima (ou abaixo) de uma seta. Para isto
                          o
basta usar “^” (ou “_”). Neste exemplo mostramos isto:

 xymatrix{                                                     Ad
                                                                     dd
 A ar[dr]^{a}                                                       dd
                                                                        a
                                                                         dd
 B  C                                                                     1
 }                                                              B               C

    Observe que “acima” pode n˜o significar exatamente acima da seta, se a
                                a
seta est´ voltada para a esquerda:
        a



                                      20
xymatrix{                                                 A                  B
 A  Bar[dl]^{a}                                                    ~~
                                                                     ~~
                                                                    ~a
 C                                                               ~~
 }                                                          C

   Tamb´m podemos posicionar o r´tulo da seta sobre a seta, ou no “meio”,
        e                       o
usando |:
 xymatrix{                                                                    GB
 Aar[r]|a  B                                              A          a

 }
   O “|” pode ser util para fazer “buracos” nas setas (por exemplo, para
                     ´
passar outras setas sem que se cruzem). Para isto usamos hole:
 xymatrix{                                                                    GB
 Aar[r]|hole  B                                          A
 }
   O seguinte diagrama ´ a defini¸ao de produto fibrado em teoria das ca-
                       e        c˜
tegorias. Nele usamos v´rios dos recursos do xymatrix j´ apresentados:
                       a                                a


 xymatrix{                                         d ii
                                                       ii                  k
 dar@/_/[ddr]_har[dr]|{h,k_a}
                                                           i
                                                       h,ka
                                                            i   i4
 ar@/^/[drr]^k                                                                   6G
    {btimes_a c}ar[d]^par[r]_q                         b ×a c              q        c
                                                       h
 car[d]^g                                                               p                 g
    bar[r]^f  a                                                   0         f        
                                                                      b             Ga
 }

    O comando xymatrix permite especificar a forma com que o diagrama
ser´ tipografado. A especifica¸ao ´ uma seq¨ˆncia de @especifica¸ao
   a                            c˜ e         ue                       c~
que antecedem os comandos dentro do xymatrix. Assim, por exemplo,
xymatrix@1{ ... } especifica que o diagrama deve ser tipografado em uma
linha, como em xymatrix@1{Aar[r]^f  B}, que produz A f G B . Isto
´ util para produzir pequenos diagramas que aparecer˜o dentro do par´grafo
e´                                                  a               a
do texto.
    Da mesma forma podemos modificar o espa¸amento das linhas e das co-
                                              c
lunas por meio das especifica¸˜es @Rdim e/ou @Cdim, como por exemplo
                             co


                                   21
em xymatrix@R10pt@C5pt{ ... }, que especifica 10pt para o espa¸amento
                                                              c
das linhas e 5pt para o das colunas.
   Podemos explicitamente posicionar o r´tulo sobre a seta:
                                        o
                                                f
 xymatrix{Aar[r]^{f}  B}                A           GB
                                                        f
 xymatrix{Aar[r]^{f}  B}                A           GB
                                                    f
 xymatrix{Aar[r]^(.4){f}  B}             A           GB

    Observe-se que, no ultimo caso, podemos usar um valor entre 0 e 1 como
                       ´
fator para posicionar o r´tulo (foi usado 0,4 como exemplo). O fator 0 re-
                         o
presenta o in´ da seta, e o fator 1 representa o fim.
             ıcio
    Finalmente, outra possibilidade ´ usar !{t1;t2}, que posiciona o r´tulo
                                    e                                 o
no ponto em que a seta cruza a linha que liga os lugares t1 e t2:
 xymatrix{                                                              f
                                                                                 G
                                                             Ad               nnU B
 A ar[rr]^f ar[dr]_(.3)g |!{[d];[rr]}hole                     dd        nnn
                                                               g d  d nnnn h
   B                                                              n
                                                                   nnn 2
                                                                nn G
 C ar[rru]_(.7)h ar[r]_i  D                               C           D
                                                                  i
 }
   Neste ultimo exemplo, o !{[d];[rr]} determina o ponto em que a seta
           ´
que liga A e D se cruza com a que liga C e B. Neste ponto ´ posto o hole.
                                                            e
   Podemos indicar a posi¸˜o que a seta deve entrar ou sair de uma entrada
                           ca
usando as seguintes dire¸oes, que j´ haviam sido mostradas, e repetimos aqui
                        c˜          a
para facilitar:
                                      u
                                  lu y ur c = ru
                            ul = •c
                                  c             
                                   cc         
                                     cc    
                             lo        GABD
                                       @FEC
                                           c
                                                   Gr
                                          cc
                                            cc
                                             c1
                                         
                           dl = ld      d dr = rd
    Isto nos permite fazer uma seta “reflexiva”, especificando a seta usando
o comando ar@(sa´da,entrada)[]. O [] indica que a seta apontar´ para
                    ı                                                a
a pr´pria entrada, e a especifica¸ao @(sa´da,entrada) define as dire¸oes de
     o                          c˜      ı                           c˜
sa´ e entrada da seta. Assim,
  ıda




                                       22
[F]       Simples           [F=]         Duplo
                                                   1• • • • • • 1
            [F.]      Pontilhado         [F--]     1 Tracejado 1
                                                    • • • • • •

            [F-,]                  [F-:3pt]               
                       Sombra                    Arredondado

           [o][F-]      XYZ[
                        _^]
                       Redondo

                Figura 7: Frames em diagramas em matriz

 xymatrix{                                           id                id
 1 ar@(ul,ur)[]^{id} ar[r]_f                            Ö                 Ö
                                                      1                 G2
 2 ar@(ul,ur)[]^{id}                                          f
 }
   Podemos produzir setas paralelas, usando uma dimens˜o para separa-las,
                                                      a
definida por @dim:
 xymatrix{                                                    a
                                                               .    G
 Aar@1ex[r]^a_{.}  Bar@1ex[l]^b               Ao                 B
                                                               b
 }
    A dimens˜o de 1ex, adotada neste caso, ´ conveniente pois corresponde `
             a                             e                              a
altura da letra “x”.
    Os recursos de frames (molduras) que podem ser usados nos objetos do
diagrama s˜o apresentados na Figura 7. Os modificadores + e - podem ser
           a
usados para aumentar ou diminuir o tamanho da moldura.
    Um exemplo usando frames ´:e
 xymatrix{                                            +∞
                                                                   f (x)dx
                                                       −∞                    uu
 *+[F-,]{int_{-infty}^{+infty}                                              uu
                                                                                 uu
 f(x)mathrm{d}x } ar[dr]                                                       uu
                                                                                     uu
 *+[o][F-]{txt{pi}}  10                                                              7
                                                               89:;
                                                               ?=
                                                                pi                         10
 }
   O exemplo a seguir ´ um diagrama que representa um autˆmato finito:
                      e                                  o




                                    23
1
                                                                 89:;
                                                                 ?=    1    G ?=
                                                                                89:;
                                                                                7654
                                                                                0123
                                                                  1              d3
 xymatrix{                                                                 ÐÐÐ
                                                                      0 Ð ÐÐ
 *++[o][F-]{1} ar@(ul,ul)[] ar[r]^{1}                               ÐÐÐ 1
 ar[d]^{0}  *++[o][F=]{3}                                    89:;
                                                                 ?=
                                                                  2v
 *++[o][F-]{2} ar[ur]_{1} ar@(dl,d)[]_{0}}
                                                         0


   Outro exemplo:


 xymatrix{                                        evapora¸ao
                                                          c˜
 {txt{Oceano}}
 ar@/^3pc/[rr]^{txt{evapora¸ao}}
                             c~                                                    1
  *+[F-]{H_2O}                     Oceano
                                        •             H2 O                   Atmosfera
  {txt{Atmosfera}}
 ar@/^3pc/[ll]^{txt{precipita¸ao}}
                                c~
 }                                                 precipita¸ao
                                                            c˜


   Ainda ´ poss´
          e    ıvel colocar entradas extras, que estar˜o fora da matriz,
                                                      a
usando o comando save ... restore. Neste caso, o que fica dentro do
comando n˜o far´ parte de nenhuma entrada da matriz:
          a    a
 xymatrix{
 A ar@{-}[dr] 
 save[]+3cm,0cm*txt8pc{                                 Este ´ um longo
                                                                   e
 Este ´ um longo coment´rio que
       e               a                                      coment´rio que
                                                                     a
 n~o ocupar´ nenhuma entrada
   a        a                            o
                                        Ad                     n˜o ocupar´
                                                                a         a
                                           dd
 da matriz}                                  dd              nenhuma entrada
                                               dd          m
                                                        mmm     da matriz
 ar[l]ar[d]                                       vmmm
 restore                                       B         C
    Bar@{-}[r]  C
 }
  Observe-se que a seta ar[d], que parte do coment´rio, n˜o necessaria-
                                                   a      a
mente ´ “para baixo”.
      e




                                  24
Referˆncias
     e
[1] Rose, K. H. X -pic User’s Guide. Dispon´
                 Y                         ıvel em: http://tug.org/
    applications/Xy-pic/soft/xyguide.ps.gz.

[2] Rose, K. H.  Moore, R. X -pic Reference Manual. Dispon´ em: http:
                             Y                             ıvel
    //tug.org/applications/Xy-pic/soft/xyrefer.ps.gz.

[3] Goossens, M.  Rahtz, S.  Mittelbach, F. The LTEX Graphics Compa-
                                                  A

    nion, Addison-Wesley, 1997.




                                 25
Copyright c 2006 Carlos A. P. Campani.
    ´
    E garantida a permiss˜o para copiar, distribuir e/ou modificar este do-
                         a
cumento sob os termos da Licen¸a de Documenta¸ao Livre GNU (GNU Free
                                c                c˜
Documentation License), Vers˜o 1.2 ou qualquer vers˜o posterior publicada
                             a                       a
pela Free Software Foundation; sem Se¸˜es Invariantes, Textos de Capa Fron-
                                     co
tal, e sem Textos de Quarta Capa. Uma c´pia da licen¸a ´ inclu´ na se¸ao
                                         o            c e       ıda     c˜
intitulada “GNU Free Documentation License”.
    veja: http://www.ic.unicamp.br/~norton/fdl.html.




                                    26

Contenu connexe

Tendances (8)

Chakras y-kundalini
Chakras y-kundaliniChakras y-kundalini
Chakras y-kundalini
 
Regulamento escolar
Regulamento escolarRegulamento escolar
Regulamento escolar
 
Como poupar água
Como poupar águaComo poupar água
Como poupar água
 
O mar para adivinhar
O mar para adivinharO mar para adivinhar
O mar para adivinhar
 
Code 13장 그렇다면 뺄셈은 어떨까요-
Code 13장   그렇다면 뺄셈은 어떨까요-Code 13장   그렇다면 뺄셈은 어떨까요-
Code 13장 그렇다면 뺄셈은 어떨까요-
 
Módulo 2016.2
Módulo   2016.2Módulo   2016.2
Módulo 2016.2
 
আইনে রাসূল দোয়া অধ্যায় Aini rasuldoaoddhaibya rajjakbinyusuf
আইনে রাসূল   দোয়া অধ্যায়     Aini rasuldoaoddhaibya rajjakbinyusufআইনে রাসূল   দোয়া অধ্যায়     Aini rasuldoaoddhaibya rajjakbinyusuf
আইনে রাসূল দোয়া অধ্যায় Aini rasuldoaoddhaibya rajjakbinyusuf
 
Alhazred abdul das necronomicon und goetia
Alhazred abdul das necronomicon und goetiaAlhazred abdul das necronomicon und goetia
Alhazred abdul das necronomicon und goetia
 

Similaire à Tutorial de Xy-pic (9)

Introdução ao LaTeX
Introdução ao LaTeXIntrodução ao LaTeX
Introdução ao LaTeX
 
Matemática no winplot - sandra de souza
Matemática no winplot  - sandra de souzaMatemática no winplot  - sandra de souza
Matemática no winplot - sandra de souza
 
matematica e midias
matematica e midiasmatematica e midias
matematica e midias
 
625639 a-teoria-dos-limites-calculo
625639 a-teoria-dos-limites-calculo625639 a-teoria-dos-limites-calculo
625639 a-teoria-dos-limites-calculo
 
Produto cartesiano e função 1º ano do ensino medio
Produto cartesiano e função   1º ano do ensino medioProduto cartesiano e função   1º ano do ensino medio
Produto cartesiano e função 1º ano do ensino medio
 
Produto cartesiano e função 1º ano do ensino medio
Produto cartesiano e função   1º ano do ensino medioProduto cartesiano e função   1º ano do ensino medio
Produto cartesiano e função 1º ano do ensino medio
 
Projeto final Informática educativa I - Michele Zacharias
Projeto final Informática educativa I - Michele ZachariasProjeto final Informática educativa I - Michele Zacharias
Projeto final Informática educativa I - Michele Zacharias
 
Apostila de matemática cursinho
Apostila de matemática   cursinhoApostila de matemática   cursinho
Apostila de matemática cursinho
 
aula11_ccf.pdf
aula11_ccf.pdfaula11_ccf.pdf
aula11_ccf.pdf
 

Plus de Carlos Campani (20)

Técnicas de integração
Técnicas de integraçãoTécnicas de integração
Técnicas de integração
 
Lista de exercícios 3
Lista de exercícios 3Lista de exercícios 3
Lista de exercícios 3
 
Lista de exercícios 2
Lista de exercícios 2Lista de exercícios 2
Lista de exercícios 2
 
Aplicações da integração
Aplicações da integraçãoAplicações da integração
Aplicações da integração
 
Lista de exercícios 1
Lista de exercícios 1Lista de exercícios 1
Lista de exercícios 1
 
Integral
IntegralIntegral
Integral
 
Semana 14
Semana 14 Semana 14
Semana 14
 
Semana 13
Semana 13 Semana 13
Semana 13
 
Semana 12
Semana 12Semana 12
Semana 12
 
Semana 11
Semana 11Semana 11
Semana 11
 
Semana 10
Semana 10 Semana 10
Semana 10
 
Semana 9
Semana 9 Semana 9
Semana 9
 
ANÁLISE COMPLETA DE UMA FUNÇÃO
ANÁLISE COMPLETA DE UMA FUNÇÃOANÁLISE COMPLETA DE UMA FUNÇÃO
ANÁLISE COMPLETA DE UMA FUNÇÃO
 
PROPRIEDADES DAS FUNÇÕES
PROPRIEDADES DAS FUNÇÕESPROPRIEDADES DAS FUNÇÕES
PROPRIEDADES DAS FUNÇÕES
 
Funções, suas propriedades e gráfico
Funções, suas propriedades e gráficoFunções, suas propriedades e gráfico
Funções, suas propriedades e gráfico
 
Solução de equações modulares
Solução de equações modularesSolução de equações modulares
Solução de equações modulares
 
Equações polinomiais
Equações polinomiaisEquações polinomiais
Equações polinomiais
 
PROVAS DE TEOREMAS
PROVAS DE TEOREMASPROVAS DE TEOREMAS
PROVAS DE TEOREMAS
 
Instruções de Aprendiz
Instruções de AprendizInstruções de Aprendiz
Instruções de Aprendiz
 
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...
Álgebra básica, potenciação, notação científica, radiciação, polinômios, fato...
 

Dernier

Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
Natalia Granato
 

Dernier (6)

Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Assessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdfAssessement Boas Praticas em Kubernetes.pdf
Assessement Boas Praticas em Kubernetes.pdf
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 

Tutorial de Xy-pic

  • 1. Tutorial de X -pic Y Carlos A. P. Campani campani@ufpel.edu.br 14 de abril de 2006 1 Introdu¸˜o ca X -pic ´ um pacote para tipografar gr´ficos e diagramas em TEX. O pacote Y e a X -pic pode ser usado com TEX e L TE Y A X e permite desenhar diversos tipos diferentes de gr´ficos e diagramas, incluindo pol´ a ıgonos, n´s e diagramas em o matriz. Ele ´ implementado em torno de um kernel de linguagem gr´fica, e a que fornece uma nota¸˜o mnemˆnica e consistente, baseada na composi¸˜o ca o ca l´gica de componentes visuais. o Este tutorial tem o objetivo de ser uma introdu¸˜o breve e acess´ ao ca ıvel uso do X -pic. Estamos longe de pretender apresentar todos os recursos Y dispon´ıveis. Ele complementa o X -pic Reference Manual, de Kristoffer H. Y Rose e Ross Moore [2], e o X -pic User’s Guide, de Kristoffer H. Rose [1], Y que podem ser obtidos em http://www.tug.org/applications/Xy-pic/. Ainda h´ o ´timo livro The LTEX Graphics Companion, de Goossens, Rahtz, a o A e Mittelbach [3]. Recomendamos a leitura de todos estes textos para aqueles que desejam usar intensamente o X -pic. Y Para carregar o pacote X -pic no TEX usam-se os comandos input xy e Y xyoption{all}, que carrega todos os recursos, o que pode tornar a execu¸aoc˜ do TEX lenta. Para aumentar o desempenho do TEX recomenda-se carregar apenas os recursos que ser˜o usados. Da mesma forma que no TEX, para a carregar o X -pic no L TEX usa-se o comando usepackage[all]{xy} no Y A cabe¸alho do arquivo. c Caso se queira produzir gr´ficos de n´s e arcos, deve-se incluir adicional- a o mente as op¸oes knot e arc. Tamb´m precisamos declarar as op¸˜es import c˜ e co e poly se quisermos importar imagens postscript e desenhar pol´ ıgonos nos 1
  • 2. diagramas. Para isto basta usar, no cabe¸alho do arquivo L TEX, o comando c A usepackage[all,knot,arc,import,poly]{xy}. Problemas podem ocorrer devido a flexibilidade do formato de entrada do TEX. Isto causa algumas situa¸oes complicadas de conflito. Um exemplo c˜ ´ o uso do X -pic junto com o pacote babel, em portuguˆs e outras l´ e Y e ınguas que redefinem as aspas, como ´ o caso tamb´m do alem˜o, o que povoca e e a conflito quando se deseja salvar posi¸˜es em um diagrama. Este problema co pode ser resolvido ao usarmos $$ shorthandoff{"} xy ... endxy $$, protegendo os comandos X -pic definidos dentro de xy ... endxy. Y Outro problema ´ o conflito do caracter & quando usado em um diagrama e do X -pic dentro de um ambiente tabular. Neste caso, ´ poss´ resolver o Y e ıvel problema protegendo os comandos X -pic dentro de um par { e }. Y 2 Conceitos B´sicos a A estrutura geral de uma X -figura ´ xy ... endxy, que constr´i uma Y e o caixa (box ) com uma X -figura (usu´rios L TE Y a A X podem substituir este co- mando por begin{xy} ... end{xy}). Nesta estrutura podem ser decla- rados comandos da “linguagem gr´fica” do X -pic. a Y N˜o h´ necessidade de colocar a X -figura explicitamente em modo mate- a a Y m´tico, pois a declara¸ao xy ... endxy j´ o faz. Caso haja necessidade a c˜ a de apresentar texto dentro da X -figura, basta usar o comando txt{ ... }. Y Os elementos que formam a linguagem do X -pic s˜o: Y a Posi¸oes Representam coordenadas de pontos dentro da caixa da X -figura; c˜ Y Objetos Um objeto ´ como uma caixa (box ) do TEX que pode ser posto em e uma posi¸ao, exceto que ele possui uma borda (edge); c˜ Conex˜es Junto com a capacidade de colocar objetos em posi¸˜es, todos os o co objetos podem ser usados para conectar duas posi¸oes; c˜ Decora¸oes Sempre que o X -pic encontra algo que n˜o pode ser inter- c˜ Y a pretado como uma posi¸ao, ele interpreta o que se segue como uma c˜ decora¸˜o, ou seja, um conjunto restrito de comandos a ser adicionado ca ` figura. a Posi¸oes podem ser representadas por pares (x,y), cujos valores x cres- c˜ cem da esquerda para a direita, e os valores y de baixo para cima. Assim, 2
  • 3. a origem do sistema de coordenadas ´ o ponto (0, 0) (tamb´m representado e e como 0), e a X -figura est´ contida no seguinte retˆngulo: Y a a y Ymax 0 o • G ponto de referˆncia TEX e Xmin Ymin Xmax A forma mais simples de colocar coisas em uma X -figura ´ “largar” um Y e objeto em uma posi¸ao. Para definir posi¸oes e “largar” objetos usa-se o c˜ c˜ operador *. Por exemplo, (0,0)*{A} coloca o r´tulo A na posi¸ao (0, 0). o c˜ Al´m de poder “largar” objetos em uma posi¸ao da X -figura, podemos co- e c˜ Y nectar os dois objetos correntes do estado, formado pelas posi¸oes p (posi¸˜o c˜ ca pr´via) e c (posi¸˜o corrente). Para definir conex˜es usa-se o operador **. e ca o Assim, xy (0,0)*{};(10,0)*{} **dir{-} endxy define a posi¸˜o pr´via p = (0, 0) e a posi¸ao corrente c = (10, 0) e conecta ca e c˜ ambas com um direcional definido por **dir{-}. Qualquer objeto pode ser usado como conector e, neste caso, foi usado o -, indicando que as duas posi¸oes devem ser conectadas por uma linha simples. Observe que (0,0)*{} c˜ e (10,0)*{} define as posi¸˜es pr´via e corrente, sem “largar” nenhum objeto co e nelas. O operador ; indica que deve-se atualizar as posi¸˜es pr´via e corrente, co e trocando a corrente anterior pela pr´via e fazendo da ultima posi¸˜o inserida e ´ ca a nova corrente. Assim, em xy (0,0)*{};(10,0)*{} **dir{-}; (10,10)*{} **dir{-} endxy 3
  • 4. O primeiro ; define as posi¸˜es p = (0, 0) e c = (10, 0). O segundo ; atribui co a p o valor anterior de c, (10, 0), e faz c = (10, 10). Ent˜o s˜o tra¸adas duas a a c linhas, uma entre (0, 0) e (10, 0) e outra entre (10, 0) e (10, 10). Objetos possuem uma borda (edge). Assim, um objeto pode ser entendido como uma caixa (box ) TEX, com uma forma (shape), e com dimens˜es L, U , o R e D. A forma do objeto for¸a a forma de sua borda. O kernel do X -pic c Y fornece trˆs formas (shapes), nomeadas [.], [] e [o], correspondendo a: e c U U  , L c R  e oL c Rl hi k njm D D A forma (shape) default dos objetos ´ []. e O X -pic fornece um conjunto de direcionais, como no exemplo anterior Y o **dir{-}. Os direcionais s˜o elementos gr´ficos que podem ser tanto a a conectores quanto pontas (que terminam as extremidades de uma conex˜o). a Os conceitos apresentados de forma breve nesta se¸ao ser˜o melhor de- c˜ a senvolvidos nas pr´ximas se¸oes. Particularmente a se¸ao seguinte tratar´ o c˜ c˜ a dos recursos do kernel do X -pic, e mostrar´ por meio de exemplos o uso de Y a posi¸oes, objetos e conex˜es. c˜ o 3 Usando o Kernel do X -pic Y Nesta se¸ao mostraremos o uso do kernel do X -pic por meio de exemplos c˜ Y comentados. Ser˜o introduzidos os recursos b´sicos dispon´ a a ıveis no kernel, e nas se¸oes seguintes ser˜o explorados aspectos mais avan¸ados. c˜ a c A coisa mais simples que podemos fazer com o X -pic ´ definir duas Y e posi¸oes e conecta-las. Isto ´ mostrado no exemplo seguinte, onde ´ pro- c˜ e e duzida uma linha simples conectando as posi¸˜es (0, 0) e (10, 0): co xy (0,0)*{};(10,0)*{} **dir{-} endxy Podemos tamb´m “largar” objetos nas posi¸˜es. Isto ´ feito neste outro e co e exemplo, em que definimos dois objetos com r´tulos A e B, e tra¸amos uma o c linha na diagonal ligando estes dois r´tulos: o 4
  • 5. xy B  (0,0)*+{A};(10,10)*+{B} **dir{-}  endxy A O operador * ´ usado para definir posi¸oes e “largar” objetos, e o operador e c˜ ** ´ usado para definir conex˜es. e o Neste ultimo exemplo, observa-se o modificador + usado em (0,0)*+{A} e ´ (10,10)*+{B}. Este modificador serve para obter espa¸o adicional em torno c do objeto, evitando que o conector fique muito pr´ximo ao objeto, como seria o o caso de: xy B  (0,0)*{A};(10,10)*{B} **dir{-}   endxy A Podemos usar qualquer objeto como conector, como vemos no exemplo a seguir: xy cB (0,0)*+{A};(10,10)*+{B} **dir{} cc cc endxy A Podemos definir trˆs posi¸˜es em seq¨ˆncia e conecta-las. Como se expli- e co ue cou na se¸˜o anterior, o direcional **dir{-} conecta as posi¸˜es p e c do ca co estado do X -pic. O operador ; ´ usado para mudar o estado, trocando as Y e posi¸oes p e c e atualizando a c. Mostramos isso no seguinte exemplo: c˜ xy (0,0)*{};(10,0)*{} **dir{-}; (10,10)*{} **dir{-} endxy Neste exemplo, a sequˆncia de mudan¸as de estado e a¸˜es do X -pic, e c co Y associada aos comandos que as executam, ´ apresentada na Tabela 1. e Textos podem ser postos em uma X -figura usando o comando txt: Y xy B  (5,5)*{A};(15,15)*{B} **dir{-};   (0,0)*{txt{texto qualquer}} A endxy texto qualquer 5
  • 6. A¸˜o ca Comando 1 c ← (0, 0) (0,0)*{} 2 p←c ; 3 c ← (10, 0) (10,0)*{} 4 tra¸a linha entre (0, 0) e (10, 0) c **dir{-} 5 p←c ; 6 c ← (10, 10) (10,10)*{} 7 tra¸a linha entre (10, 0) e (10, 10) c **dir{-} Tabela 1: Exemplo de execu¸˜o do X -pic ca Y Este novo exemplo mostra o uso de conex˜es com pontas: o xy B c (0,0)*+{A};(10,10)*+{B} **dir{-} ?* dir{}  endxy A Direcionais podem ser do tipo conectores ou pontas. No exemplo dado, **dir{-} ´ um direcional conector, e dir{} ´ um direcional ponta. e e O ?* serve para indicar a posi¸ao da ponta no conector. O operador ? c˜ serve para “pegar” o lugar da conex˜o mais recente definida por um **. O a modificador move posi¸oes, neste caso para o extremo final da conex˜o. c˜ a Poder´ıamos posicionar a ponta no outro extremo do conector usando ?*: xy B  (0,0)*+{A};(10,10)*+{B} **dir{-} ?* dir{} c endxy A Para melhorar o exemplo anterior poder´ ıamos usar espa¸o adicional em c torno dos objetos: xy B (0,0)*++{A};(10,10)*++{B} **dir{-} ?* dir{}  c endxy A Cada modificador + dobra o valor do espa¸o em torno de um objeto. c Assim, ao usar, por exemplo, (0,0)*++{A} estamos introduzindo um espa¸o c 6
  • 7.                      dir{-}  dir2{-}   dir3{-}   dir{.} dir2{.} dir3{.} ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? dir{~} dir2{~} dir3{~}                 dir{--}  dir2{--}    dir3{--}    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? dir{~~} dir2{~~} dir3{~~} Figura 1: Direcionais (conectores) 4 vezes maior. Agora podemos inverter a ponta, como fazemos no exemplo seguinte: xy B  (0,0)*+{A};(10,10)*+{B} **dir{-} ?* dir{}  endxy A As Figuras 1 e 2 apresentam os direcionais (conectores e pontas). Observe- se o recurso de fazer o conector duplo ou triplo por meio de dir2 e dir3, e as varia¸oes de pontas usando-se dir^ ou dir_. c˜ Podemos produzir setas com o X -pic. Para isto usamos o comando ar: Y xy B c {ar (0,0)*+{A}; (10,10)*+{B}}  endxy A A Figura 3 apresenta as setas que podem ser usadas em uma X -figura. Y Devemos observar que ar@{=} e ar@{:} s˜o abreviaturas de ar@2{-} a e ar@2{.}. Podemos curvar uma seta, como por exemplo em: xy HB {ar@/^1pc/ (0,0)*+{A}; (10,10)*+{B}} endxy A 7
  • 8. c c c dir{}  dir^{}  dir_{}  dir{} c dir^{} c dir_{} c dir{|} / dir^{|} / dir_{|} / dir{(} oO dir^{(} oO dir_{(} oO dir{)} dir^{)} / dir_{)} dir^{‘} O dir_{‘} o dir^{’} dir_{’} cc cc cc dir{}   dir^{}   dir_{}  dir{} c dir^{} c c c dir_{} c c dir{||} c dir^{||}  c dir_{||} c  dir{|-} c dir^{|-} dir_{|-} c cc c c  dir{|} c dir{|}  dir{|} • ◦ dir{|} c dir{*} •1 dir{o} H  dir{+} HH dir{x} dir{/} dir{//} Figura 2: Direcionais (pontas) 8
  • 9.  c cc           ar@{-}  ar@{-}  ar@{-}  c Yg                ar@{-}  ar@{-}   ar@2{-}   Yg Uq                        ar@{=}   c ar@3{-}   ar@{-}   Oo ◦          ar@{-|}  ar@{-)}  ar@{-o}  c  c  c        ar@^{-}   ar@_{-}  ar@{|-} c  c Yg Yg ar@{.} ar@2{.} ar@{:} Uq c Yg ? ? ? ? ? ? ? ? ? ar@3{.} ar@{~} ? ? ar@2{~} ? ? ? ? ? ? ? Uq c ? c ? ? ? ? ? ?   ? ar@3{~} ? ? ? ? ? ? ar@{--}   ar@{~~} ? Figura 3: Setas 9
  • 10. O /^1pc/ ´ um vetor, normalmente usado para denotar um deslocamento, e e que neste caso ´ usado para especificar a curvatura da seta. A curvatura e especificada no exemplo ´ de 1pc=12pt (pontos). Outras unidades de medida e usadas pelo TEX s˜o ex (correspondendo ` altura da letra “x”), mm, cm e a a in (polegadas). O ^ indica a dire¸ao da curvatura (para cima). c˜ Poder´ ıamos curvar a seta para baixo, como em: xy Bx {ar@/_1pc/ (0,0)*+{A}; (10,10)*+{B}} endxy A X -pic fornece a facilidade de r´tulos para indicar posi¸oes. Assim, com Y o c˜ (0,0)*{}=A podemos criar o r´tulo A para indicar a posi¸˜o (0, 0). No o ca seguinte exemplo definimos trˆs r´tulos para indicar posi¸oes dos v´rtices do e o c˜ e triˆngulo que ser´ tra¸ado: a a c xy (0,0)*{}=A; (10,0)*{}=B; (10,10)*{}=C;  A;B **dir{-};   A;C **dir{-};   B;C **dir{-}; endxy A opera¸˜o !{pos1,pos2} permite encontrar o ponto em que a ultima ca ´ conex˜o intercepta uma linha definida pelas posi¸˜es pos1 e pos2. Por exem- a co plo: xy B (0,5)*{1}=1; (17,15)*{2}=2 **dir{.}; 2 • (6,0)*{A}=A; (13,18)*{B}=B **dir{-} ?!{1;2} *{bullet} 1 endxy A No comando ?!{1;2} *{bullet}, o operador ? “pega” a posi¸ao c˜ da ultima conex˜o definida (neste caso a que liga as posi¸oes A e B), ´ a c˜ e a seguir a opera¸˜o !{1;2} encontra o ponto de intercepta¸ao desta ca c˜ conex˜o com a linha que liga as posi¸˜es 1 e 2. Ent˜o ´ posto um • a co a e (“bullet”) no ponto de intercepta¸ao. c˜ Podemos definir diagramas aninhados, ou seja, diagramas dentro de ou- tros diagramas. Para isto basta usar um diagrama como se fosse um objeto 10
  • 11. ou um direcional. Neste exemplo ilustramos o uso deste recurso: xy (0,0)*++{ xy (0,0)*+{A}; (0,10)*+{B} **dir{-} ?* dir{} endxy }=x; By B (20,0)*++{ CQ xy A A (0,0)*+{A}; (0,10)*+{B} **dir{-} ?* dir{} endxy }=y; {ar@{=} x;y}; endxy Observe que xy (0,0)*+{A}; (0,10)*+{B} **dir{-} ?* dir{} endxy ´ atribuido a x e usado como objeto posicionado em (0, 0) e e xy (0,0)*+{A}; (0,10)*+{B} **dir{-} ?* dir{} endxy ´ atribuido a y e usado como objeto posicionado em (20, 0). Ambos os e objetos s˜o conectados pela seta dupla definida por {ar@{=} x;y}. a Podemos usar macros TEX em X -figuras. Por exemplo: Y defgrafo{xy (0,10)*+{A}; (0,0)*+{B} **dir{-} ?* dir{} endxy} A A xy CQ {ar@{=} (0,0)*{grafo};(15,0)*{grafo}} B B endxy Neste diagrama, defgrafo{xy (0,10)*+{A}; (0,0)*+{B} **dir{-} ?* dir{} endxy} 11
  • 12. define uma macro TEX, referenciada como grafo, que ´ usada duas vezes e aninhada no diagrama. 4 Extens˜es o Nesta se¸˜o s˜o descritas algumas extens˜es ao kernel do X -pic. Apre- ca a o Y sentaremos curvas, c´ ırculos, frames e importa¸ao de gr´ficos externos. c˜ a Usando-se o comando crv podemos criar curvas com m´ltiplos pontos u tangentes: xy (0,0)*{}=A; (10,0)*{}=B; A; B **crv{(5,5)}; endxy Neste exemplo, a curva foi definida tendo apenas um ponto tangente, o (5, 5). Podemos definir curvas com mais pontos tangentes: xy (0,0)*{}=A; (25,0)*{}=B; A; B **crv{(5,-17) (12,8)}; endxy Uma facilidade para desenvolver curvas ´ tornar os pontos tangentes e vis´ ıveis. Para isto usa-se ~pC: c  xy (0,0)*{}=A; (25,0)*{}=B; A; B **crv~pC{(5,-17) (12,8)}; endxy c  Para produzir c´ ırculos usamos o comando cir. O tamanho default do c´ ırculo ´ o tamanho do objeto que ele envolver´. Este exemplo ilustra isto: e a 12
  • 13. xy (0,0)*+{A}; (10,0)*+{B}*cir{} **dir{-} A 0123 7654 B endxy Podemos especificar um raio para o c´ ırculo. Por exemplo, se o c´ ırculo deve ter 20pt de raio, usamos cir20pt{}. Segmentos de c´ ırculo podem ser obtidos especificando-se as dire¸oes dos c˜ vetores tangentes e um giro em sentido hor´rio (usando _) ou sentido anti- a hor´rio (usando ^). As dire¸oes que podem ser especificadas s˜o: a c˜ a u ur = ru y ul = •cc lu c c  ccc   lo GABD @FEC c Gr  cc  cc  c1 dl = ld d dr = rd Exemplos de segmentos de c´ ırculo: xy *cir5pt{l^r} endxy '! xy *cir5pt{dl_u} endxy ! xy *cir5pt{dr^ur} endxy ! xy *cir5pt{dr_ur} endxy '!#$ xy *cir5pt{ur^dr} endxy '%#$ Se s˜o dadas a mesma diagonal duas vezes, ent˜o nada ´ produzido, como a a e em xy *cir5pt{d^d} endxy, que produz “ ”. No pr´ximo exemplo produziremos um “smile” usando c´ o ırculo, vetores, e os operadores ?, _ e !: xy (0,0)*{};(4,0)*{} **dir{} ? *_!/3pt/dir{)} '!$# ? % *_!/7pt/dir{:}; (2,2)*cir5pt{}; endxy O operador ?, que j´ explicamos anteriormente, serve para “pegar” a a posi¸ao da ultima conex˜o. O operador _ serve para girar um objeto 90o c˜ ´ a em sentido hor´rio (para o sentido anti-hor´rio usar´ a a ıamos o operador ^). O operador ! serve para tornar a dire¸˜o obl´ ca ıqua ao direcional usado (skew ). Finalmente, os vetores /3pt/ e /7pt/ servem para deslocar os objetos “)” e “:” sobre a dire¸ao. c˜ 13
  • 14. Vamos explicar passo a passo a constru¸ao do smile do nosso exemplo. c˜ Em primeiro lugar, usamos o operador ? para “pegar” a posi¸˜o do dire- ca cional “vazio” (dummy) que conecta (0, 0) e (4, 0). Sobre esta dire¸˜o ser´ ca a posto o “)”. Ilustramos isto, mostrando o direcional vazio como uma linha pontilhada para melhor visualiza¸ao: c˜ ) Para produzirmos a boca do smile devemos girar o “)” em um ˆngulo de a 90o em sentido hor´rio, e para isto usamos o operador _, resultando em: a ? Usamos o operador ! para indicar a dire¸ao obl´ c˜ ıqua ao direcional (para que possamos depois deslocar). Ilustramos com uma seta pontilhada esta nova dire¸˜o: ca y ? As mesmas opera¸˜es s˜o feitas sobre o “:”, que formar´ os olhos do co a a smile. Finalmente, deslocamos o “)” e o “:” na nova dire¸˜o, usando os vetores ca /3pt/ e /7pt/, respectivamente: ? O c´ ırculo foi usado como “toque final” para completar o smile. Poder´ıamos tamb´m desenhar um smile usando um segmento de c´ e ırculo, como em: xy (0,0)*{};(4,0)*{} **dir{} ? *_!/7pt/dir{:}; (2,2)*cir5pt{}; '!$# % (2,2)*cir3pt{dr^ur}; endxy Observe que a boca, tendo sido feita com um segmento de c´ ırculo, resultou em um smile um pouco diferente ao do exemplo anterior. Frames s˜o molduras que podem ser postas em X -figuras. Uma moldura a Y (frame) ´ um objeto X -pic na forma frm{ ... }. Na Figura 4 s˜o mostra- e Y a dos alguns tipos de molduras dispon´ ıveis (para mais veja o X -pic Reference Y Manual ). 14
  • 15. Usando Usando Usando frm{} frm{.} frm44pt{.} Usando ? Usando = HI Usando ML ON JK frm{-} 89 :; frm8pt{-} frm44pt{-} 1• • • • • 1 • • • Usando 1 • • • • • • c • Usando 1 1 1 11  Usando 11 1frm{--}1 frm{o-} • • • c frm44pt{--} • • • • • • • • • • •  • Usando Usando Usando frm{,} frm5pt{,} frm{-,} Usando `abc gfed Usando ?= 89:; Usando frm{o} frm8pt{o} frm{.o} r • vP Usando Usando Usando1 1 _^] XYZ[ PQRS WVUT ONML HIJK frm{ee} frm20pt,8pt{ee} P frm{-e} v • r Figura 4: Molduras (frames) Podemos agora, usando curvas e molduras (frames), construir o seguinte diagrama: xy Quadrado (0,0)*++{txt{Redondo}}*frm{oo}=r; b (30,30)*++{txt{Quadrado}}*frm{-,}=q; r;q **dir{} ? *++{txt{Liga}}*frm{.}=l; Liga r;l **crv{(15,0)}; l;q **crv{(15,30)} ?* dir{}; endxy wvut pqrs hijk onml Redondo Observe neste exemplo como o Liga ´ posicionado usando-se o operador e ? para obter a posi¸ao da liga¸˜o entre r e q. c˜ ca Para importar imagens postscript devemos declarar a op¸˜o import na ca declara¸ao usepackage[all,import]{xy}. Podemos usar qualquer pacote c˜ para importar a imagem, como por exemplo, graphicx, graphics, epsf ou epsfig. Neste caso, usamos o graphicx, e para isto devemos declarar o uso 15
  • 16. do pacote com o comando usepackage{graphicx}. Usamos xyimport para estabelecer um sistema de coordenadas para uma imagem em particular, permitindo que qualquer comando do X -pic seja usa- Y do, com as posi¸oes relativas ao sistema de coordenadas definido. Para isto, o c˜ comando xyimport(larg,alt){imagem} exige que se defina uma largura e uma altura, que fornece uma distˆncia em unidades de coordenadas, iniciando a no canto inferior esquerdo, onde o sistema de coordenadas usualmente deve estar localizado. Assim, usando a imagem apresentada na Figura 5, podemos produzir o que se pode ver na Figura 6, usando o seguinte c´digo: o defgrafico{includegraphics[width=9cm]{grafico.eps}} xy xyimport(100,100){grafico} {ar (75,85)*+{txt{Astr´ide}}; (60,75)*{}} o {ar (75,25)*+{txt{Elipse}}; (80,37)*{}} endxy Observe-se que defgrafico{includegraphics[width=9cm]{grafico.eps}} ´ uma macro TEX para definir a imagem a ser importada. e 5 Usando Pol´ ıgonos e Elipses Para usar pol´ ıgonos em diagramas ´ necess´rio carregar o X -pic decla- e a Y rando a op¸˜o poly, usando o comando usepackage[all,poly]{xy}. ca Pol´ ıgonos podem ser produzidos usando-se o comando xypolygon. Por exemplo, podemos criar um hex´gono usando: a ◦ I ◦II II II II xy I I ◦II ◦ /r4pc/:{xypolygon6{circ}} II endxy II II I ◦ ◦ Observe-se que /r4pc/ especifica o tamanho do pol´ ıgono em 4pc (48pt). O n´mero de lados do pol´ u ıgono ´ declarado por meio de um valor inteiro ap´s e o 16
  • 17. 3 2 1 0 −1 −2 −3 −2 −1.5 −1 −0.5 0 0.5 1 1.5 2 Figura 5: Imagem sem comandos XY 3 Astr´ide o ppp 2 xppp 1 0 q −1 Elipse −2 −3 −2 −1.5 −1 −0.5 0 0.5 1 1.5 2 Figura 6: Importando uma imagem 17
  • 18. o comando xypolygon. Assim, especificamos o hex´gono com xypolygon6. a Al´m disto, o argumento circ indica que os v´rtices do pol´ e e ıgono dever˜o a ser c´ırculos. Alguns outros exemplos de pol´ ıgonos s˜o: a xy /r8mm/: c II ◦c I , 0 ,{xypolygon6{}} II ◦  cc • •I II I  ◦ ◦ I ,+/r18mm/,{xypolygon8{@{o}}} I I I •I ◦ • II c ◦c ◦ II  I ,+/r18mm/,{*@{o}xypolygon6{@{*}}} I c  c ◦  ◦  • • endxy Nestes exemplos, 0 (origem) e +/r18mm/ (deslocamento) especificam o posicionamento dos trˆs pol´ e ıgonos, e os @{o} e @{*} especificam os v´rtices. e Mais exemplos: xy /r8mm/: , 0 ,{xypolygon6{~*{dir{*}}}} • •I • •II II • ,+/r18mm/, II • I • III III I I {xypolygon8{~{.}~{}~={45}{dir{*}}}} •I II •• •• III • I • IIII ,+/r18mm/, • • • I• • • {xypolygon6{~{=}~{:}{dir{*}}}} endxy Neste exemplo, observamos o uso de ~, ~ e ~= para indicar conex˜es o entre os v´rtices do pol´ e ıgono. Para produzir elipses usamos xycircle. Assim, (0,0)*xycircle(7,2){.} produz uma elipse centrada em (0, 0), com largura 7 e altura 2, e pontilhada: 6 Produzindo Diagramas em Matriz O X -pic oferece uma facilidade (feature) para tipografar diagramas em Y forma de matriz. Este tipo de diagrama tem aplica¸ao em diversas ´reas da c˜ a matem´tica e de ciˆncia da computa¸ao, como por exemplo em teoria dos a e c˜ autˆmatos e teoria das categorias. Para produzir um diagrama deste tipo o usamos o comando xymatrix{ ... }. O diagrama ser´ formado pelas entradas de uma matriz, organizadas a em linhas e colunas. Cada entrada pode conter uma express˜o matem´tica a a (produzida usando o modo matem´tico). a 18
  • 19. Usa-se para separar as colunas e para indicar nova linha, em uma nota¸ao semelhante ao ambiente array do modo matem´tico do L TEX. As- c˜ a A sim, se desejamos produzir uma matriz com duas linhas e duas colunas, usamos: xymatrix{ 1 2 1 2 3 4 } 3 4 Poder´ıamos omitir entradas ` direita que n˜o fossem necess´rias no dia- a a a grama, como em: xymatrix{ 1 2 1 2 3 } 3 Tamb´m podemos deixar entradas em branco na matriz, como em: e xymatrix{ 1 2 1 2 4 } 4 Para conectar entradas por setas usamos ar. O destino da seta ´ defi- e nido de forma relativa ` origem por meio de uma seq¨ˆncia de u (acima), d a ue (abaixo), l (esquerda) e r (direita), colocados entre colchetes. Assim, para conectar a entrada da primeira linha e coluna com a da segunda linha e coluna usamos ar[dr]: xymatrix{ 1 aa 2 1 ar[dr] 2 aa aa 3 4 a0 } 3 4 As setas da Figura 3 funcionar˜o tamb´m com o xymatrix: a e 19
  • 20. xymatrix{ •d CQ • {bullet} ar@{:}[r] ar@{--}[dr] {bullet} d ar@{=}[d] d d1 {bullet} ar@{-}[u] ar@{.}[r] {bullet} • G• } Este ´ um exemplo com uma matriz trˆs por trˆs: e e e √ xymatrix{ 2×4 i 2 22 ii }} ii }} 2times 4 ar[ddrr] sqrt{2} ar[ddl] ii } i i }} 2^2 ar[dl] iii ~} 2 4ii 6 2 4 6 ii ii ii 1.414 2.7 8 Ô i4 } 1.414 2.7 8 Observe que a seta que liga 2 × 4 e 8 passa sobre o 4, o que pode ser inconveniente. Para evitar isto podemos curvar a seta para cima, usando “@/^/”, ou para baixo, usando “@/_/”. Neste caso, curvaremos para baixo: √ xymatrix{ 2×4 2 22 }} 2times 4 ar@/_/[ddrr] sqrt{2} ar[ddl] }} }} 2^2 ar[dl] ~}} 2 4 6 2 4 6 1.414 2.7 8 Ô 8 } 1.414 2.7 8 Para uma curvatura maior poderiamos usar, por exemplo, @/_1pc/. Podemos colocar um r´tulo acima (ou abaixo) de uma seta. Para isto o basta usar “^” (ou “_”). Neste exemplo mostramos isto: xymatrix{ Ad dd A ar[dr]^{a} dd a dd B C 1 } B C Observe que “acima” pode n˜o significar exatamente acima da seta, se a a seta est´ voltada para a esquerda: a 20
  • 21. xymatrix{ A B A Bar[dl]^{a} ~~ ~~ ~a C ~~ } C Tamb´m podemos posicionar o r´tulo da seta sobre a seta, ou no “meio”, e o usando |: xymatrix{ GB Aar[r]|a B A a } O “|” pode ser util para fazer “buracos” nas setas (por exemplo, para ´ passar outras setas sem que se cruzem). Para isto usamos hole: xymatrix{ GB Aar[r]|hole B A } O seguinte diagrama ´ a defini¸ao de produto fibrado em teoria das ca- e c˜ tegorias. Nele usamos v´rios dos recursos do xymatrix j´ apresentados: a a xymatrix{ d ii ii k dar@/_/[ddr]_har[dr]|{h,k_a} i h,ka i i4 ar@/^/[drr]^k 6G {btimes_a c}ar[d]^par[r]_q b ×a c q c h car[d]^g p g bar[r]^f a 0 f b Ga } O comando xymatrix permite especificar a forma com que o diagrama ser´ tipografado. A especifica¸ao ´ uma seq¨ˆncia de @especifica¸ao a c˜ e ue c~ que antecedem os comandos dentro do xymatrix. Assim, por exemplo, xymatrix@1{ ... } especifica que o diagrama deve ser tipografado em uma linha, como em xymatrix@1{Aar[r]^f B}, que produz A f G B . Isto ´ util para produzir pequenos diagramas que aparecer˜o dentro do par´grafo e´ a a do texto. Da mesma forma podemos modificar o espa¸amento das linhas e das co- c lunas por meio das especifica¸˜es @Rdim e/ou @Cdim, como por exemplo co 21
  • 22. em xymatrix@R10pt@C5pt{ ... }, que especifica 10pt para o espa¸amento c das linhas e 5pt para o das colunas. Podemos explicitamente posicionar o r´tulo sobre a seta: o f xymatrix{Aar[r]^{f} B} A GB f xymatrix{Aar[r]^{f} B} A GB f xymatrix{Aar[r]^(.4){f} B} A GB Observe-se que, no ultimo caso, podemos usar um valor entre 0 e 1 como ´ fator para posicionar o r´tulo (foi usado 0,4 como exemplo). O fator 0 re- o presenta o in´ da seta, e o fator 1 representa o fim. ıcio Finalmente, outra possibilidade ´ usar !{t1;t2}, que posiciona o r´tulo e o no ponto em que a seta cruza a linha que liga os lugares t1 e t2: xymatrix{ f G Ad nnU B A ar[rr]^f ar[dr]_(.3)g |!{[d];[rr]}hole dd nnn g d d nnnn h B n nnn 2 nn G C ar[rru]_(.7)h ar[r]_i D C D i } Neste ultimo exemplo, o !{[d];[rr]} determina o ponto em que a seta ´ que liga A e D se cruza com a que liga C e B. Neste ponto ´ posto o hole. e Podemos indicar a posi¸˜o que a seta deve entrar ou sair de uma entrada ca usando as seguintes dire¸oes, que j´ haviam sido mostradas, e repetimos aqui c˜ a para facilitar: u lu y ur c = ru ul = •c c  cc  cc  lo GABD @FEC c Gr  cc  cc  c1 dl = ld d dr = rd Isto nos permite fazer uma seta “reflexiva”, especificando a seta usando o comando ar@(sa´da,entrada)[]. O [] indica que a seta apontar´ para ı a a pr´pria entrada, e a especifica¸ao @(sa´da,entrada) define as dire¸oes de o c˜ ı c˜ sa´ e entrada da seta. Assim, ıda 22
  • 23. [F] Simples [F=] Duplo 1• • • • • • 1 [F.] Pontilhado [F--] 1 Tracejado 1 • • • • • • [F-,] [F-:3pt] Sombra Arredondado [o][F-] XYZ[ _^] Redondo Figura 7: Frames em diagramas em matriz xymatrix{ id id 1 ar@(ul,ur)[]^{id} ar[r]_f Ö Ö 1 G2 2 ar@(ul,ur)[]^{id} f } Podemos produzir setas paralelas, usando uma dimens˜o para separa-las, a definida por @dim: xymatrix{ a . G Aar@1ex[r]^a_{.} Bar@1ex[l]^b Ao B b } A dimens˜o de 1ex, adotada neste caso, ´ conveniente pois corresponde ` a e a altura da letra “x”. Os recursos de frames (molduras) que podem ser usados nos objetos do diagrama s˜o apresentados na Figura 7. Os modificadores + e - podem ser a usados para aumentar ou diminuir o tamanho da moldura. Um exemplo usando frames ´:e xymatrix{ +∞ f (x)dx −∞ uu *+[F-,]{int_{-infty}^{+infty} uu uu f(x)mathrm{d}x } ar[dr] uu uu *+[o][F-]{txt{pi}} 10 7 89:; ?= pi 10 } O exemplo a seguir ´ um diagrama que representa um autˆmato finito: e o 23
  • 24. 1 89:; ?= 1 G ?= 89:; 7654 0123 1 d3 xymatrix{ ÐÐÐ 0 Ð ÐÐ *++[o][F-]{1} ar@(ul,ul)[] ar[r]^{1} ÐÐÐ 1 ar[d]^{0} *++[o][F=]{3} 89:; ?= 2v *++[o][F-]{2} ar[ur]_{1} ar@(dl,d)[]_{0}} 0 Outro exemplo: xymatrix{ evapora¸ao c˜ {txt{Oceano}} ar@/^3pc/[rr]^{txt{evapora¸ao}} c~ 1 *+[F-]{H_2O} Oceano • H2 O Atmosfera {txt{Atmosfera}} ar@/^3pc/[ll]^{txt{precipita¸ao}} c~ } precipita¸ao c˜ Ainda ´ poss´ e ıvel colocar entradas extras, que estar˜o fora da matriz, a usando o comando save ... restore. Neste caso, o que fica dentro do comando n˜o far´ parte de nenhuma entrada da matriz: a a xymatrix{ A ar@{-}[dr] save[]+3cm,0cm*txt8pc{ Este ´ um longo e Este ´ um longo coment´rio que e a coment´rio que a n~o ocupar´ nenhuma entrada a a o Ad n˜o ocupar´ a a dd da matriz} dd nenhuma entrada dd m mmm da matriz ar[l]ar[d] vmmm restore B C Bar@{-}[r] C } Observe-se que a seta ar[d], que parte do coment´rio, n˜o necessaria- a a mente ´ “para baixo”. e 24
  • 25. Referˆncias e [1] Rose, K. H. X -pic User’s Guide. Dispon´ Y ıvel em: http://tug.org/ applications/Xy-pic/soft/xyguide.ps.gz. [2] Rose, K. H. Moore, R. X -pic Reference Manual. Dispon´ em: http: Y ıvel //tug.org/applications/Xy-pic/soft/xyrefer.ps.gz. [3] Goossens, M. Rahtz, S. Mittelbach, F. The LTEX Graphics Compa- A nion, Addison-Wesley, 1997. 25
  • 26. Copyright c 2006 Carlos A. P. Campani. ´ E garantida a permiss˜o para copiar, distribuir e/ou modificar este do- a cumento sob os termos da Licen¸a de Documenta¸ao Livre GNU (GNU Free c c˜ Documentation License), Vers˜o 1.2 ou qualquer vers˜o posterior publicada a a pela Free Software Foundation; sem Se¸˜es Invariantes, Textos de Capa Fron- co tal, e sem Textos de Quarta Capa. Uma c´pia da licen¸a ´ inclu´ na se¸ao o c e ıda c˜ intitulada “GNU Free Documentation License”. veja: http://www.ic.unicamp.br/~norton/fdl.html. 26