LaTeX’e kolay öğrenilen bir alternatif: Typst
(github.com/typst)- Typst, LaTeX düzeyinde güçlü olmayı hedeflerken öğrenmesi ve kullanması daha kolay olan işaretleme tabanlı bir dizgi sistemidir; bu depo, yerelde belge derlemek için gereken derleyici ve CLI’yi içerir
- Temel biçimlendirme işleri için yerleşik işaretleme, esnek fonksiyonlar, entegre betik yazımı, matematik dizgisi, kaynakça yönetimi ve anlaşılır hata mesajları sunar
- Artımlı derleme ile hızlı derleme sürelerini hedefler;
typst watch, kaynak değişikliklerini izleyerek her seferinde baştan derlemekten daha hızlı yeniden derler - CLI; sürüm ikilileri, paket yöneticileri,
cargo, Nix ve Docker ile kurulabilir vetypst compile file.typkomutuyla PDF üretir; ayrıca özel font yolları da belirtilebilir - Tasarım ilkeleri, tutarlılıkla sadelik, birleşebilirlikle güç ve artımlılıkla performans elde etmektir; hedef, anında önizleme sağlayabilecek kadar hızlı olmaktır
Typst ne sunuyor?
- Typst, LaTeX kadar güçlü olurken öğrenmesi ve kullanması daha kolay olacak şekilde tasarlanmış işaretleme tabanlı bir dizgi sistemidir
- Başlıca özellikleri şunlardır
- Sık kullanılan biçimlendirme işleri için yerleşik işaretleme
- Diğer işler için esnek fonksiyonlar
- Sıkı biçimde entegre bir betik sistemi
- Matematik dizgisi, kaynakça yönetimi vb.
- Artımlı derlemeye dayalı hızlı derleme süreleri
- Sorun çıktığında anlaşılır hata mesajları
- Bu depo, Typst belgelerini yerelde derlemek için gereken Typst derleyicisi ve CLI’yi içerir
- Daha iyi bir yazım deneyimi istiyorsanız ücretsiz işbirlikçi çevrimiçi düzenleyiciyi kullanabilirsiniz
Söz dizimi ve yazım modeli
- Typst, sayfa boyutu veya başlık numaralandırması gibi öğe özelliklerini
#setgibi set rule ile ayarlarpageyüksekliğiautoolarak bırakılırsa içerikle uyumlu olacak şekilde boyutlanır- Daha kapsamlı denetim gerekiyorsa show rules ile öğenin görünümü tamamen yeniden tanımlanabilir
- Başlıklar
= Headingsöz dizimiyle yazılır- Tek
=en üst düzey başlığı,==ise alt başlığı oluşturur - Hafif işaretleme söz diziminin tamamı syntax belgesinde görülebilir
- Tek
- Matematik ifadeleri dolar işaretleriyle çevrelenir
- İfade çevresine ek boşluk koyarsanız ayrı bir blok olarak yerleştirilebilir
- Birden çok harfli tanımlayıcılar tırnak içine alınmazsa Typst tanımları ve fonksiyonları olarak yorumlanır
floor,sqrtgibi öğeler için ters eğik çizgi gerekmezphi.alt,phiüzerinealtdeğiştiricisini uygulayarak belirli bir sembol varyantını seçer
- Betik yazımı için belge içine hash (
#) sonrasında ifade yazarak kod eklenir- Örnek, iki değişken ve özyinelemeli bir fonksiyonla n’inci Fibonacci sayısını hesaplar
tablefonksiyonu hücreleri satır bazında alır- Dizi öğelerini ayrı bağımsız değişkenler olarak geçirmek için yayma işleci
..kullanılır
Kurulum ve CLI kullanımı
- Typst CLI çeşitli yollarla kurulabilir
- En güncel sürümün kaynak kodu ve önceden derlenmiş ikilileri releases page üzerinden alınabilir
- İkili dosyayı
PATHiçindeki bir dizine koyabilir, ardındantypst updateile güncelleyebilirsiniz - Paket yöneticisi sürümleri en son sürümün gerisinde kalabilir
- Paket yöneticisiyle kurulum örnekleri şunlardır
- Linux: Typst on Repology, Typst's Snap
- macOS:
brew install typst - Windows:
winget install --id Typst.Typst
- Rust araç zinciriniz varsa
cargoile kurabilirsiniz- En güncel sürüm:
cargo install --locked typst-cli - Geliştirme sürümü:
cargo install --git https://github.com/typst/typst --locked typst-cli
- En güncel sürüm:
- Nix ve Docker da desteklenir
- Nix:
nix-shell -p typst - Typst flake:
nix run github:typst/typst-flake -- --version - Docker:
docker run ghcr.io/typst/typst:latest --help
- Nix:
- Temel derleme komutları şunlardır
typst compile file.typ: çalışma dizinindefile.pdfoluştururtypst compile path/to/source.typ path/to/output.pdf: belirtilen yolda PDF oluşturur
- Değişiklik izleme
typst watch file.typile çalıştırılır- Typst artımlı derleme kullandığı için her seferinde baştan derlemekten daha hızlıdır
- Font ile ilgili komutlar da sunulur
typst compile --font-path path/to/fonts file.typ: ek font arama dizinini belirtirtypst fonts --font-path path/to/fonts: sistemde ve belirtilen dizinde bulunan fontların listesini gösterirTYPST_FONT_PATHS=path/to/fonts typst fonts: Linux söz dizimiyle ortam değişkeni kullanımı
- Diğer alt komutlar ve seçenekler için
typst help, belirli bir komutun yardımı içintypst help watchkullanılabilir
Düzenleme ortamı ve topluluk
- IDE benzeri bütünleşik deneyim, otomatik tamamlama ve anında önizleme istiyorsanız ücretsiz Typst web uygulamasını kullanabilirsiniz
- Topluluğun geliştirdiği dil sunucusu Tinymist, çeşitli editör eklentilerine entegre edilmiştir
- Topluluk alanlarının merkezi Forum ve Discord server’dır
- Forum; soru sormak, diğer kullanıcılara yardımcı olmak ve Typst ile üretilen işleri paylaşmak için uygundur
- Discord, hızlı sorular, katkı tartışmaları ve sohbet için daha uygundur
- Typst Universe, topluluğun şablonlar ve paketler paylaştığı alandır
- Kendi yaptığınız paketleri package repository içine gönderebilirsiniz
Katkı ve derleme
- Bir hatayla karşılaşırsanız issue açabilirsiniz; yeni özellik veya hata düzeltmesi geliştirmek istiyorsanız contribution guide’u takip edebilirsiniz
- Kendiniz derlemek için en güncel kararlı Rust sürümünü kurduktan sonra şu komutları çalıştırın
git clone https://github.com/typst/typstcd typstcargo build --release
- Optimize edilmiş ikili dosyalar
target/release/içine kaydedilir - Toplulukla paket paylaşmak da katkı vermenin bir yoludur
İsmin telaffuzu ve yazımı
- Typst’in IPA telaffuzu
/taɪpst/şeklindedir "Ty", Typesetting içindekiTygibi;"pst"ise Hipster içindekipstgibi telaffuz edilir- Typst yazarken özel ad olarak değerlendirilir ve büyük
Tkullanılır
Tasarım ilkeleri
- Typst, Power, simplicity, performance olmak üzere üç hedef etrafında tasarlanmıştır
- Amaç; LaTeX’in gücüne denk, öğrenmesi ve kullanması kolay, anında önizlemeyi mümkün kılacak kadar hızlı bir sistem oluşturmaktır
-
Tutarlılıkla sadelik
- Typst’te bir şeyi nasıl yapacağınızı öğrendiğinizde, bu bilgiyi başka işlere de aktarabilmeniz gerekir
- Aynı şeyi yapmanın birden fazla yolu varsa bunlar farklı soyutlama düzeylerinde olmalıdır
= Introductionile#heading[Introduction], ilkinin ikincisinin söz dizimsel şekeri olması nedeniyle aynı işi yapmalarına rağmen izin verilen bir örnektir
-
Birleşebilirlikle güç
- Her şeye ayar eklemek yerine, az sayıdaki bileşeni farklı şekillerde birleştiren bir tasarım tercih edilir
- TeX de birleşebilir düşük seviyeli bir sistemdir, ancak insanlar bunun yerine LaTeX kullanır
- LaTeX’te çoğu durumda
\\usepackage{knob}gibi paketlere bağımlı kalındığı düşünülür
-
Artımlılıkla performans
- Typst dilinin tüm özellikleri artımlı derlemeye uygun olmalıdır
comemo, arka planda artımlı derlemeyle ilgili işlerin büyük bölümünü yürütür
Sponsorluk ve destek
- Typst açık kaynak çalışmaları için başlıca destekler olarak şunlar listelenir
- Posit: tam zamanlı derleyici mühendisi finansmanı
- NLnet: NGI Zero Core fonu üzerinden verilen çeşitli hibelerle Typst çalışmalarını destekler
- HTML export çalışması
- PDF accessibility çalışması
- Science & Startups: Berlin Startup Scholarship aracılığıyla Ocak-Haziran 2023 arasında Typst geliştirmesine finansman sağladı
- Zerodha: tek seferlik sponsorluk
- Bu liste yalnızca açık kaynak çalışmalara €10K’yi aşan ya da aşması beklenen katkıları içerir
2 yorum
LeTeX, LaTeX diye mi okunuyor? Ben
Laytekdiye okunur sanırdım.Hacker News görüşleri
Typst oldukça iyiydi ve bizim organizasyonda da çok memnunuz
Her gece 1,5 milyondan fazla PDF üretmemiz gerektiği için HTML→PDF dönüşümü için Puppeteer, pdflatex, lualatex gibi çeşitli çözümleri denedik; Typst birkaç mertebe daha hızlıydı ve kaynak kullanımı da daha hafifti
LaTeX ile PDF şablonları oluşturmanın geliştirici deneyimi iyi değildi, ancak Typst şablonları epey sezgiseldi
Bu büyük ölçekli PDF üretim yığını hakkında blogda daha ayrıntılı yazdım: https://zerodha.tech/blog/1-5-million-pdfs-in-25-minutes
Puppeteer tabanlı bir toplu PDF raporlama ürünü geliştiriyorum; gece işleri, önbellekleme ve paralel işleme kullanınca performans fena değil
https://www.cx-reports.com
Uzun zaman önce benzer bir problemle uğraşmam gerektiğinde iyi bir çözümdü
Ölçek bu kadar değildi ama yine de işe yarıyordu
Typst ile çok sayıda ödev yazdım; akademik yazım daha kısa, daha sürükleyici ve hatta söylemeye cüret edersem daha eğlenceli hale geliyor
Typst sözdiziminin fonksiyonel niteliği sayesinde bugünlerde Microsoft Word’de, bazen Google Docs’ta da görülen kaprisli davranışlarla uğraşmak zorunda kalmıyorsunuz
VSCode gibi yerel bir IDE kullanınca istediğiniz özelliklerin de neredeyse tamamına sahip olabiliyorsunuz
LaTeX ile karşılaştırınca tüm belge dizgisi çok daha sezgisel, ancak birden fazla sayfaya yayılan uzun denklem çözümleri yazarken LaTeX’in daha kolay yazıldığını hissediyorum
LaTeX sözdizimi fonksiyonel bir programlama dilinden çok Markdown’a benzediği için, fonksiyon, üst simge ve alt simge içeren çok sayıda formülü dizerken önceden daha az düşünmek gerekiyor
Şu an bir makaleyi Typst ile yazacağımı sanmıyorum
Kurum dışına çıktığınızda neredeyse mutlaka dönüştürmeniz gerekiyor ve arXiv de LaTeX kaynaklarını istiyor
Günümüzde LaTeX çevresindeki araçlar oldukça iyi ve yardımcı olan çok sayıda IDE var
Kişisel olarak LaTeX’e derlenen Emacs Org-Mode kullanıyorum
https://github.com/mitex-rs/mitex
Geçmiş tartışmalar ve ilgili kaynaklar var: https://hn.algolia.com/?q=typst
1 yıl önce, 146 yorum: https://news.ycombinator.com/item?id=35250210
8 ay önce, 34 yorum: https://news.ycombinator.com/item?id=38354422
2 yıl önce, 53 yorum: https://news.ycombinator.com/item?id=34423590
2 yıl önce, 30 yorum: https://news.ycombinator.com/item?id=32209794
HTML çıktısının baştan itibaren temel bir özellik olmayıp şu anda geliştirilmekte olması şaşırtıcı
LaTeX’in web ile sorunlu bir ilişkisi olması, sıfırdan başlayan rakip bir projenin başlardan itibaren doğru çözmeye çalışacağı bir konu gibi görünüyor
[0] https://github.com/typst/typst/issues/721
İkisi de aynı sorunla karşılaşıyor: web ve kâğıt tamamen farklı çalışıyor ve birbirine çevrilemeyen kavramlar var
Bu yüzden dizgi sonucunun başka ortamlara doğal biçimde nasıl yerleşeceğini tanımlamak gerekiyor
Typst en baştan HTML’i hedefleseydi geliştirmesi çok daha kolay olurdu; ama o zaman da aşırı karmaşık bir site üreticisinden fazlası olmazdı
Önce PDF’i hedeflemesi, bence gerçekten LaTeX ile rekabet etme niyetini gösteriyor
Yeni bir işaretleme sistemi başlatırken erişilebilir belgeler üretme planı yoksa bunu çok kötü bir karar olarak görürüm
Typst erişilebilir belgeler üretebilir hale gelene kadar kullanmayacağım
PDF’leri sevmiyorum
LaTeX’in ortadan kalkıp Typst’in onun yerini almasını bekliyorum
Kullanım deneyimi tamamen farklı ve ortaya çıkan sonuç çok etkileyici
Şimdiye kadar Jinja2 şablonlarıyla TeX dosyaları üretiyordum; ama Typst komut satırından JSON alabiliyor, kullanımı kolay ve yeterince güçlü olduğu için Python adımını tamamen ortadan kaldırabiliyor
Derleme süresinin milisaniye düzeyinde olmasından bahsetmiyorum bile
Başta LaTeX’teki yönteme alışık olduğum için Go şablonlarıyla Typst şablonu üretmeyi denedim
Ama Typst’in kendi betikleme motorunda JSON’u doğrudan kolayca kullanabildiğini görmek hoşuma gitti
1999'da stajyer olarak çalışırken, TIA'nın VoIP telefon standardı çalışma grubu için standart dokümanları yazma işi bana verilmişti.
Standardizasyon kuruluşunda herkesin kullandığı bir Word şablonu vardı ama mühendislik öğrencisi olarak bir süredir LaTeX kullanıyor ve seviyordum; bu yüzden “son çıktı nasılsa PDF olacak, biçimlendirme de daha iyi olur; neden LaTeX kullanmıyoruz?” diye düşündüm.
Gerçekten de LaTeX çıktısı daha iyiydi; müdürüm benim Word kullanmadığımı hiç fark etmeden sonucu beğendi.
Çalışma grubu üyelerinin tepkisi de iyiydi; “bu çocuk gerçekten yetenekli” havası vardı.
Bir startup açısından, çalışma grubuna katılan dev şirketler üzerinde iyi bir izlenim bırakmak şirketin geleceği, hatta belki de hayatta kalması için çok önemliydi.
Derken bir gün müdürüm, “O Word dokümanını, bizi satın alabilecek büyük şirketin üst düzey yöneticilerinden birine gönderebilir misin? Yeni doküman şablonu olarak kullanmak istiyormuş” dedi; dört yaşındayken bir arkadaşımla deneme olsun diye dolaba işeyip anneme yakalandığım zamanki gibi içime çöken bir his geldi.
Sonunda bir arkadaşımı tutup tüm hafta sonu boyunca Word'de zorlukla yeniden hazırlattım ve müdürüm dokümanı aldı.
Şirket 18 ay sonra 100 milyon dolara satın alındı.
Her hâlükârda LaTeX hâlâ Word'den 1000 kat daha iyi görünüyor.
Bu, Overleaf ya da CodiMD gibi servislerin rakibi gibi görünüyor.
Yine de başka bir sözdizimi ama pandoc destekliyor gibi.
Son zamanlarda R ile programlama yaptığım için Quarto'yu giderek daha çok kullanıyorum; özellikle HTML gibi oldukça iyi çıktılar üretiyor.
Ancak bu araçlar da akademik kullanımda önemli olan iki sorunu çözmüyor: hakemlere iyi bir diff/karşılaştırma sunmak ve teknik olmayan iş ortaklarıyla kolayca paylaşım yapıp yorum ekleyebilmeyi sağlamak.
Bu yüzden, en azından benim alanımdaki bilimsel yazımda Word'ün daha uzun yıllar boyunca kolay kolay değiştirilemeyeceğini düşünüyorum.
[1] https://github.com/overleaf/overleaf
[2] https://github.com/hackmdio/codimd
[3] https://pandoc.org/typst-property-output.html
[4] https://quarto.org/
GT kullanırken Typst PDF çıktısı, LaTeX PDF'inden biraz daha pürüzlü hissettirdi.
Düzeltilmesini umuyorum.
LaTeX ile karşılaştırıldığında Typst'te beni en çok rahatsız eden şey, temel gelişmiş tipografi özelliklerini iyi ele alamaması.
Örneğin matematik modunda aralık türlerini (mathop, mathbin, mathrel vb.) ya da ayraç boyutlarını (big, bigg vb.) işleme tarafı eksik.
Matematik modunda sembol/operatör aralıkları https://typst.app/docs/reference/math/class/ ile değiştirilebiliyor; ayraç boyutları da https://typst.app/docs/reference/math/lr#functions-lr ile değiştirilebiliyor ya da otomatik işlenebiliyor.
Ancak LaTeX için de durum benzer görünüyor.
Gerçekten iyi görünüyor ve bir denemeyi düşünüyorum.
Yine de aklımdan şu geçip duruyor:
LaTeX'in 15 yıl sonra da ücretsiz ve bakımlı olacağına dair tahmini olasılık: %99.9999
Başka yeni bir aracın 15 yıl sonra da ücretsiz ve bakımlı olacağına dair tahmini olasılık: %5
bash ve birkaç başka şey için de aynısı geçerli.
Daha iyi birçok alternatif olsa da acı noktaları yeterince büyük olmadığı için yerlerini alamıyorlar.
Typst'i seviyorum.
Özellikle programatik olarak üretilmiş girdilerle çalışırken iyi;
--inputbayrağı JSON alabiliyor.Dosya içinde özel
json.decode()fonksiyonuyla JSON'u kolayca içeri alabiliyorsunuz.Kararlı sonuçlar üretmek çok kolay olduğu için kendi projemde de LaTeX'ten Typst'e geçtim.
[0] https://typst.app/docs/reference/foundations/sys/
[1] https://resgen.app