Tutorial de X -pic
                                     Y
                         Carlos A. P. Campani
                  ...
diagramas. Para isto basta usar, no cabe¸alho do arquivo L TEX, o comando
                                        c       ...
a origem do sistema de coordenadas ´ o ponto (0, 0) (tamb´m representado
                                     e           ...
O primeiro ; define as posi¸˜es p = (0, 0) e c = (10, 0). O segundo ; atribui
                             co
a p o valor a...
xy                                                                B
                                                      ...
A¸˜o
                                ca                      Comando
            1                c ← (0, 0)              ...

                                                              
                                                      ...
c                      c                 c
 dir{}              dir^{}              dir_{}     
 dir{}        c dir^{}  ...
                                                                          c                       cc
                   ...
O /^1pc/ ´ um vetor, normalmente usado para denotar um deslocamento,
             e
e que neste caso ´ usado para especific...
ou um direcional. Neste exemplo ilustramos o uso deste recurso:
 xy
 (0,0)*++{
 xy
 (0,0)*+{A}; (0,10)*+{B} **dir{-} ?* di...
define uma macro TEX, referenciada como grafo, que ´ usada duas vezes
                                                   e
...
xy
 (0,0)*+{A}; (10,0)*+{B}*cir{} **dir{-}                    A           0123
                                           ...
Vamos explicar passo a passo a constru¸ao do smile do nosso exemplo.
                                          c˜
    Em p...
Usando                 Usando            Usando
            frm{}                 frm{.}        frm44pt{.}

           Usa...
do pacote com o comando usepackage{graphicx}.
    Usamos xyimport para estabelecer um sistema de coordenadas para uma
imag...
3




 2




 1




 0




−1




−2




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




      Figura 5...
o comando xypolygon. Assim, especificamos o hex´gono com xypolygon6.
                                                a
Al´m...
Usa-se  para separar as colunas e  para indicar nova linha, em uma
nota¸ao semelhante ao ambiente array do modo matem´tico...
xymatrix{
                                                                 •d            CQ •
 {bullet} ar@{:}[r] ar@{--}[...
xymatrix{                                                 A                  B
 A  Bar[dl]^{a}                            ...
em xymatrix@R10pt@C5pt{ ... }, que especifica 10pt para o espa¸amento
                                                     ...
[F]       Simples           [F=]         Duplo
                                                   1• • • • • • 1
         ...
1
                                                                 89:;
                                                  ...
Referˆncias
     e
[1] Rose, K. H. X -pic User’s Guide. Dispon´
                 Y                         ıvel em: http:/...
Copyright c 2006 Carlos A. P. Campani.
    ´
    E garantida a permiss˜o para copiar, distribuir e/ou modificar este do-
  ...
Upcoming SlideShare
Loading in …5
×

Tutorial de Xy-pic

1,535 views
1,441 views

Published on

Tutorial da classe LaTeX xy-pic, usada para desenvolver diagramas

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,535
On SlideShare
0
From Embeds
0
Number of Embeds
44
Actions
Shares
0
Downloads
18
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Tutorial de Xy-pic

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

×