LaTeX’de çizgeler (xypic)

LaTeX’de Sınırlı Durumlu Otomata (Finite State Automata) gibi çizge şeklindeki şekkileri yapmak için çoğu kişi harici bir programla çizim yapıp bunu includegraphics gibi bir paket kullanarak LaTeX’in içine alıyor. Tabi bunun bazı temel dezavantajları var:

  • LaTeX dosyası artık tek bir dosya olarak taşınamıyor, çizim dosyasıyla birlikte taşınmak zorunda
  • Küçük bir değişiklik için çizim programına girip fare ile birçok iş yapmak gerekiyor
  • Çizim programında LaTeX’in güzelliklerini kullanamıyoruz

Basit bir otomata Sağdaki şekili yine xypic makroları kullanarak yaptım. graph modülü sayesinde çizge düğümleri yapıp bunları birbirine oklarla bağlamak ve okları isimlendirmek çok kolay. Tek yapmanız gereken düğümlerin array benzeri bir tabloda olduğunu düşünerek düğümleri doldurmak. Sonra düğümden çıkan okları da göreceli olarak belirttiğiniz zaman çizge ortaya çıkıyor. Bir süre sonra da okumaya ve düzenlemeye alışıyorsunuz. Bu çizgeyi aşağıdaki LaTeX kodu ile ürettim:

\documentclass[a4paper]{article}
\usepackage[curve,frame,line,arrow,matrix]{xy}
\begin{document}
\entrymodifiers={++[o][F-]}
\xymatrix{
S \ar^{a/0}[r]
\ar@(d,l)_{b/0}[dr] & 1 \ar@/_3mm/^{b/1}[d]
\ar@(r,u)_{a/0} \\
*{} & *++[o][F=]{2} \ar@(r,r)_{a/1}[u] \\
}

Burada gördüğünüz gibi S, 1, boş ve 2 düğümleri 2*2 bir tabloya konmuş durumda. Sözdizimi de son derece alışık olduğumuz array gibi. Baştaki \entrymodifiers={++[o][F-]} kısmı bütün düğümlerin nasıl çizileceğini söylüyor. Buradaki ++ düğümü genişletme, o yuvarlak bir çerçeve çizme, F- ise çerçevenin düz çizgiden oluşacağını belirtiyor. 2’nin yer aldığı düğümün içeriği * ile başlıyor ve bu öntanımlı değerin yerine geçiyor. Buradaki değişiklik çerçevenin çift çizgi olması. Eğer diktortgen şeklinde ve noktalardan oluşan bir çerçeve isterseniz ++[F.] yapabilirsiniz.

Şimdi biraz daha sorunlu gözüken oklara gelelim. En basit ok \ar[r] şeklinde çizilebilir. Bu sağa doğru ve üstünde yazı olmayan bir ok çizer. [r] yerine l,u,d,ul,dr,ur,dl yazarak okun hedef düğümünü göreceli olarak seçebilirsiniz. Bunu yazmazsanız hedef aynı düğüm olacaktır.

Takip eden _{abc} ya da ^{abc} okun altına ya da üstüne bir yazı yazmanızı sağlar. Ardışık olarak verdiğinizde hem altına hem üstüne yazı yazabilirsiniz. Yani \ar_{ali}^{12}[dr] sağ alt düğüme bir ok çizecek ve okun üstünde ali, altında 12 yazacaktır.

Şimdiye kadarki bütün oklar doğru olarak iki düğümü bağlıyordu. Bunu eğri haline çevirmek için iki şey yapabilirsiniz. \ar sonrasına @/_3mm/ ya da @/^4mm/ yazarak okun 3mm aşağı, ya da 4mm yukarı bombelenen bir eğri olmasını sağlayabilirsiniz. Yani \ar@/_5mm/_{abc}[d] aşağıdaki düğüme sola (okun yönü güney olduğu için aşağısı batı olacaktır) doğru bombelenmiş ve solunda abc yazan bir ok çizcektir.

Yapabileceğiniz diğer birşey ise @(u,l) kullanarak okun kaynaktan hangi yönde çıktığı ve hedefe hangi yönden girdiğini belirtmektir. Böylelikle bu yöne göre gerekli bombeye sahip bir eğri oluşur. u ve l yerine tahmin edeceğiniz gibi d, r, ul, dl, dr, ur gibi farklı yönler verilebilir. Yani ar@(d,l)[dr] sağ alt düğüme aşağı doğru başlayan ve sağa doğru kıvrilarak yatay bir şekilde hedefe ulaşan bir ok çizer.

xypic‘un daha birçok özelliği var ama şimdilik bunlar size yetecektir. Ayrıntılı bilgi için kullanıcı dokümanlarına bakabilirsiniz