LaTeX’de ağaç çizmek (xypic)

LaTeX’le ya da başka bir araç kullanarak ağaç ve şekil çizmek her zaman en büyük işkencelerden birisidir. WYSIWYG bir ortamda bile fareyle şekil yerleştirmek , varolan bir şekli düzenlemek ömür törpüsüdür. LaTeX ‘de xypic kullanarak ağaç benzeri şekilleri kaynak kodun içerisinde, ayrıca araç kullanmadan düzenleyebilirsiniz.

xypic Örnek AğaçYandakine benzer ağaçları çizmek xypic makrolarıyla çok kolay. Üstelik ağacın ilişkileri parantezlerle gruplandığından programlamaya alışkınsanız kolaylıkla değişiklik yapabileceksiniz.

Temel kurallar:

  • Ağacın her düğümü matrisin bir hücresidir.
  • her hücreden “:[dr]” benzeri bir ifade ile d:aşağı, r:sağa, l:sola, u:yukarı şeklinde başka bir hücreye doğru bir ok çizip o hücrenin tanımından devam edersiniz.
  • bir hücre içeriğinden sonra parantez açarak bir geri dönüş noktası yaratırsınız. Takip eden her virgül son parantezin olduğu hücreye geri döner.

Bu kurallara göre yukarıdaki ağacı çizecek kod:

\\documentclass{....}
\\usepackage[frame,graph,arrow]{xypic}
\\begin{document}
\\xygraph{[]!{<10mm,0mm>:}
A (:[dll]  B ( :[dl] 2 ,
               :[dr] C ( :[dl] D (:[dl] 3,
                                  :[dr] 1),
                         :[dr] 4)),
    :[drr] E ( :[dl] F ,
               :[dr] 6))
}

Kodda ilk satırda gördüğünüz :[dll], A düğümünden sonra bir kez aşağı, iki kez sola gidiyor ve B düğümünü çiziyor. Sonraki parantez B’nin konumunu anımsıyor. B’den :[dl] ile bir kez aşağı, bir kez sola gidiliyor ve 2 çiziliyor. “,”e gelindiğinde son parantez olan B’ye dönülüyor :[dr] ile B’den bir aşağı bir sağa gidilip C çiziliyor ve bu böyle devam ediyor.

:[dll] benzeri ifadedeki :, çizilecek çizginin tanımı. Eğer : yerine – koyarsanız ağaçta ok yerine normal çizgiler olacak. İlk satırdaki []!{<10mm,0mm>:}
ifadesinin ne yaptığını anlamak için biraz denemeniz lazım. Amaç ağacın büyüklük ve yönünü ayarlamak. <10mm,0mm> koordinat ekseninde X yönündeki birim vektörü tanımlıyor. Bunla oynayarak ağacınızı (metinler hariç) dilediğiniz gibi çevirebilirsiniz. Örneğin soldan sağa bir ağaç için <0mm,10mm>, 45 derece eğimli bir ağaç için <10mm,10mm> yapabilirsiniz.

Bu yaklaşımla ağaç dışında “lattice” ya da benzeri çizgeleri de üretebilirsiniz.
Bunun için bir sonraki ipucuna bakabilirsiniz.