Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
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-
  ...
Nächste SlideShare
Wird geladen in …5
×

Tutorial de Xy-pic

2.163 Aufrufe

Veröffentlicht am

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

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

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

×