Web arabiriminde formül ve kod kullanarak dokümantasyon oluşturma
Yeni bir konuya giriyorum; genelinde tensör matematiği ve özelinde bunun videodan bilgi çıkarmak için kullanımı. Sıfırdan başlayacağım desem pek yalan olmaz. Aldım, başladım ağırından okumaya. Multilineer cebir bir nevi. Onu anlamak için iyi bir nümerik ve lineer cebir bilgisi gerekiyor. Onları anlamak için başka şeyler derken gövde dallara, dallar yapraklara... Çoğu yaprağı biliyorum zaten. Dalları da çıkmak kolay ama hafızada tutmak zor. Çalışırken anlaşılıyor, sonra ne nerdeydi, bu nasıldı falan derken zaman ölüyor. Malum beyin bedava ama zaman öyle değil! Velhasıl-ı kelâm bunları nasıl etsem de bir havuzda toplasam diye kafa yormaktayım. İstediğim dokümantasyon şuna benzer olsun,
- Kaynak kod ile doğrudan çalışayım. Yani editör kullanma imkanım olsun, mysql'de falan tutulmasın. Ben kaynak kodları svn deposunda tutar, ona bir de Trac koyar kendi kendimi yönetirim.
- İçine LaTeX yazılabilsin ki formülleri güzelce gösterebilsin.
- LaTeX kodları için
\newcommand
kullanabileyim. - İçine örnek kod eklersem (c, matlab veya python) onları allayıp pullayıp gösterebilsin.
- Arama özelliği olsun.
- İndeks olsun.
- Sayfalara yorum girilebilsin.
- Değişiklikleri yapınca tek tık ile tüm projeyi güncelleyebileyim.
Maksadım her ihtiyacım olduğunda kullanabileceğim bir elkitabını peyderpey oluşturmak. Bunu webden hocam ile de paylaşmak. Sonra lazım olduğunda buradaki bilgileri kopyalayıp yapıştırarak daha derli doplu yayınlar üretmek. Sizin de ilginizi çekerse buyrun bir tarama...
Html içine formül ekleme
Bu iş için birçok yöntem mevcut. En gözdeleri jsMath, MathML, MathJax. Gösterim örneklerine bakacak olursak herbiri için şöyle: jsMath (1, 2), MathML, MathJax (1, 2). Konu ile ilgili Terence Tao'nun ve Brian Hayes'in güzel yazıları var.
Ben bunlardan MathJax'ı çok beğendim. Görüntüsü gayet başarılı, kullanımı yaygınlaşıyor (yine ilginç bir şeye denk geldim, Gmail'e TeX yazılabiliyor: GmailTex). Mesela bu veya şu sayfa gereksinime çok iyi uyuyor. Bu şekilde hazırlanan içeriği başka kaynaklara kopyalamak çok zor değil. Sıkça sorulan sorularda yazdığına göre TeX makrosu yazılabiliyormuş.
Ayrıca Python kullanarak yazılacak bir dokümanda matplotlib kullanılabiliyor formüller için. Örneğin Sphinx dokümantasyon sistemi jsMath yanında onu da kullanıyormuş. Python'u seviyorum ama içine muhtemelen Matlab ve C kodu da ekleyeceğim bir dokümantasyon için neden ona bağımlı kalayım, bu konuda ikna olamadım. Ayrıca resimlere bakılırsa MathJax'in hiç aşağı kalır yanı yok, hatta tarayıcıda yüklenirken yaratılıp gösteriliyor, formülün içindeki LaTeX'i kopyalama imkanı var.
(Tarama yaparken denk geldim, bahsetmeden geçmeyeyim. Çıktı alınmış dokümanları tarayıcı ile tarayıp LaTeX'e çevirenler var.)
Html içine eklenen örnek kodları şık formatlama
Google-code-prettify projesi bu iş için çok uygun gözüküyor. Programlama diline göre renklendirme ve numaralandırma desteği var. Ben de bunları istiyorum zaten. Bu site için wp-syntax eklentisini kullanıyorum ve memnunum. Google-code-prettify genel kullanım için iyi. Aslında şurada birçok uygun alternatif var.
Sphinx ve Trac bu iş için Pygments kullanıyor. Python bağımlılığı var. Çok şık stilleri var. Bu örnekteki stili değiştirerek farklı güzelliklere bakmak mümkün.
Sayfalara Yorum Özelliği Ekleme
Disqus ile sayfalara yorum özelliği eklenebiliyor. Örneğin İstihza'nın Sphinx ile yazılmış Python kitabında bu özellik var. Alternatif olarak Intensedebate var. Gerekirse ikisinin de Türkçe desteği var (1, 2).
İndeks oluşturma
İndex iki türlü esasında. Biri içindekiler tablosu, ikincisi de kitapların arkasına eklenen indeks gibi bir özellik. İçinde aramak dışında indeks olabilse çok iyi olur. Bunun için indeks eklenmesini istediğim bir şeyi ayrı bir sözdizimi ile belli edeyim; örneğin \index[Hadamard product]{Hadamard product}
gibi bir sözdizimi ile bunları koda gömeyim. Sonra bunlar otomatik bulunup bir indeks sayfası oluşturulsun.
Çapraz bağlantılar
Bir dokümantasyon büyüdüğünde en büyük sorun bu oluyor! MS Word'ün küçük bir dosya için ideal olmasına rağmen içerik arttıkça LaTeX'le kıyaslayınca sorunlu olmasının sebebi bu. Sphinx içinde label
özelliği var. Denklemlere bile atıf yapmak mümkün!
Sonuç
Python bağımlılığını kabul etmek durumunda Sphinx tüm ihtiyaçları fazlasıyla karşılıyor. Şu tartışmadaki düzenlemelerle MathJax'ı projeye dahil etti mi tamamdır bu iş. Şurda güzel bir örneği var. Sphinx için güzel bir stil dosyası yapmak hoş olacak.
Aksi taktirde bir MathJax yine olacak, fakat diğer çoğu işlev için kendim bir kod yazacağım. Bu gibi durumlarda topluluğun çok kullandığı şeyin peşinden gitmek daha iyi olabilir.
Not: Latex2html çoğumuzun aklına ilk gelen şey ama istediğim kesinlikle o değil.