> For the complete documentation index, see [llms.txt](https://ayakaleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ayakaleaf-pro.ayaka.space/latex/tr/derinlemesine-makaleler/07-an-introduction-to-luatex-part-1-what-is-it-and-what-makes-it-so-different.md).

# LuaTeX'e Giriş (Bölüm 1): Nedir—ve onu bu kadar farklı kılan nedir?

LuaTeX bir *araç setidir*—gelişmiş yazılım araçları ve bileşenler içerir; bunlarla çok çeşitli belgeleri oluşturabilir (dizgi yapabilir)­sınız. Bu makalenin alt başlığı LuaTeX hakkında iki soru da ortaya koyuyor: O nedir — ve onu bu kadar farklı kılan nedir? “O nedir?” sorusunun yanıtı açık gibi görünebilir: “Bir TeX dizgi motoru!” Gerçekten de öyle; ancak daha geniş bir bakış açısı, ve bu yazarın da benimsediği görüş, LuaTeX’in son derece çok yönlü, TeX tabanlı bir *belge oluşturma ve mühendislik sistemi*.

### LuaTeX’i açıklamak: Nereden başlamalı?

LuaTeX üzerine yazılan bu ilk makalenin amacı, bu TeX motorunun neler sağladığını ve tasarımının kullanıcıların karmaşık dizgi ve tasarım sorunları için çok çeşitli çözümler kurmasına/tasarımına/oluşturmasına nasıl ve neden olanak verdiğini anlamak için bir bağlam sunmaktır — ayrıca, kullanıcıların giderek değişen teknik ekosisteme uyum sağlayabilen TeX tabanlı yazılımlara giderek daha fazla ihtiyaç duymasıyla birlikte, bir ölçüde “geleceğe dayanıklılık” da sunabilir. Bu yazarın görüşüne göre, özelliklerini/yeteneklerini listeleyip açıklamak, LuaTeX’in kapasitesini ve potansiyelini anlamaya çalışırken mutlaka en iyi başlangıç noktası değildir. Böyle bir yaklaşım, başka TeX motorlarına aşina olmayan ve özellik temelli karşılaştırmaların onlar için özellikle anlamlı olması muhtemel olmayan okuyucular için pek yararlı olmayacaktır.

Okurun sabrını zorlaması riskini göze alarak (“Bir an önce konuya gel!”) daha “bütüncül” bir yaklaşım izleyeceğim; umarım yararlı bir arka plan sunarım, ancak bunun bedeli biraz daha fazla okuma ve anlayışı desteklemek için birkaç programlama konusuna dalmak olacaktır. İçinde [Bölüm 2](/latex/tr/derinlemesine-makaleler/09-an-introduction-to-luatex-part-2-understanding-directlua.md) kullanmayı inceliyoruz `\directlua` ama şimdilik LuaTeX’i anlamak için temel temelleri atmaya çalışıyoruz.

Bu makale, LuaTeX’i anlama ve takdir etme yönündeki yazarın kişisel “yolculuğunu” güçlü biçimde yansıtır: LuaTeX’in geliştirilmesinin ardındaki felsefe hakkında önce biraz bilgi sahibi olmanın ve onu bir yazılım araçları kabı olarak görmenin, bu şaşırtıcı yazılımın açtığı geniş çözüm alanlarını daha iyi takdir etmenizi sağlayacağını anlatır.

## LuaTeX: Yalnızca akademi ya da matematik için değil!

LuaTeX’e yerleştirilmiş çok sayıdaki özellik ve işlevsellik, yalnızca geleneksel LaTeX aracılığıyla son derece yüksek kaliteli dizgi sağlamakla kalmaz, aynı zamanda karmaşık belge üretimi ve mühendislik sorunları için özel, LaTeX tabanlı olmayan çözümler geliştirmek için de muazzam bir alan sunar. LuaTeX, güçlü Lua betik dilini içine gömülü olarak içerir; bu da örneğin Lua kullanarak LuaTeX’e “eklentiler” (harici yazılım kitaplıkları) yükleyebileceğiniz anlamına gelir; bu da yüksek düzeyde otomasyon, mevcut yazılım sistemlerine ya da iş akışlarına entegrasyon ve veri, metin veya grafik işlemede uzman yazılımlardan yararlanmayı mümkün kılar.

Tarihsel olarak TeX, özellikle matematik alanında, akademik yazarlık/yayıncılıkla ilişkilendirilmiştir; ancak LuaTeX’in özellikle birçok başka alanda — ticari PDF belge üretimi dahil — önemli bir uygulama potansiyeli vardır. Bunun bir örneği [speedata publisher](https://speedata.github.io/publisher/) ’dır; bu araç, XML tabanlı iş akışı içinde LuaTeX’i yalnızca PDF oluşturma motoru olarak kullanır — LaTeX’i hiç kullanmaz. Gerçekten de speedata publisher neredeyse hiç TeX kodu içermez — ben [Patrick Gundlach’a](https://twitter.com/patrickgundlach)’e, speedata publisher’ın geliştiricisine, toplamda yaklaşık üç satır TeX kodu kullandığını doğruladı. Güçlü dizgi yetenekleri, LuaTeX’in Lua API’si kullanılarak Lua kodu içinde tasarlanmış ve uygulanmıştır (bu konuyu bu makalenin ilerleyen bölümlerinde tartışıyoruz).

## Kısa bir kişisel hikâye: LuaTeX’i ilk kez nasıl keşfettim

LuaTeX hakkında ilk kez 2009 sonu/2010 başında, hâlâ orta aşama beta sürümündeyken (0.50 sürümü) haberdar oldum. O sırada biraz Arapça öğrenme çabalarımın sonucunda oluşan el yazısı notları dizmek için TeX tabanlı yazılım arıyordum. Google aramaları, TUG 2009 konferansındaki video koleksiyonunu ortaya çıkardı ([şu anda YouTube’da](https://www.youtube.com/playlist?list=PL2D4DD50DC9C0BA0E)), bunlar arasında çok yüksek kaliteli Arapça dizgisi gösterimleri de vardı (Hans Hagen’in [ConTeXt paketi](http://wiki.contextgarden.net/Main_Page) aracılığıyla). Bu videolar ayrıca başlığı [LuaTeX Projesi: 1. sürüme yarı yolda](https://youtu.be/AKv4po9PGW0).

o zarif Arapça dizgiyi üretmek için kullanılan TeX motorunun adı “LuaTeX” idi. O sırada bilimsel (fizik) yayıncılıkta çalışıyordum; TeX/LaTeX hakkında tam olarak bilgi sahibi olmama rağmen LuaTeX’i hiç duymamıştım: meraklandım ve bu yeni TeX motoru hakkında daha fazla şey öğrenmek istedim. LuaTeX hâlâ beta geliştirme aşamasında ve hızla gelişmekte olduğundan, en güncel bilgilere ayak uydurmak istiyordum; bu yüzden en iyi seçenek (benim için) LuaTeX yürütülebilir dosyasını kaynak kodundan oluşturma (derleme) yoluna gitmekti. Yürütülebilir LuaTeX programına ek olarak, LuaTeX’i çalıştırmak için ortamı sağlayan bir “TeX kurulumu”na da ihtiyaç duyarsınız (ör. texmf.cnf, makro paketleri, yazı tipleri vb.). Devasa [TeX Live](https://www.tug.org/texlive/) dağıtımı indirip kurmak yerine, LuaTeX’i keşfetmek için kesinlikle en küçük özel TeX kurulumunu oluşturmayı seçtim (bu “ilginç” bir çalışmaydı; ben [kişisel blogumda belgeledim](http://www.readytext.co.uk/?cat=30)). LuaTeX’in her yeni sürümüne Reference Manual’ı da eşlik eder (örneğin,[1.0.4 sürümü](https://www.tug.org/svn/texlive/tags/texlive-2017.1/Master/texmf-dist/doc/luatex/base/luatex.pdf?revision=44591\&view=co) için) ve bu el kitabı yazılımın en son özelliklerini ve işlevselliğini belgeler. Ancak bu bir *başvuru* kılavuzudur ve (zorunlu olarak) bu inanılmaz TeX motoruyla başlamak isteyen yeni başlayanlara uygun açıklamalar açısından oldukça kısıtlıdır — düşük düzey TeX kavramlarına belirli bir aşinalık varsayılır. LuaTeX’i geliştirilmesinin nispeten erken bir aşamasında keşfetmiş olduğum için, o zamanlar iyi giriş materyali bulmak görece zordu; bu yüzden parçalar yerine oturmaya başlamadan önce biraz araştırma, deneme (ve biraz da hayal kırıklığı…) yaşadım. Söylemeye gerek yok, Arapça çalışmalarım ani bir duraklama yaşadı; çünkü bu şaşırtıcı yazılıma hayran kaldım ve sonunda Arapça dizgi için LuaTeX [eklentileri yazmaya](http://www.readytext.co.uk/?p=3143) başladım!

Benim kendi “LuaTeX yolculuğum” kesinlikle çok doğrusal değildi; ancak bu süreç boyunca (Lua)TeX’i ve TeX kurulumlarını “temelden” öğrenme fırsatı verdi: blogum, o dönemde keşfettiğim ve üzerinde çalıştığım çeşitli konulara dayanan eklektik bir koleksiyon barındırıyor. [makalelere](http://www.readytext.co.uk/?cat=3) Umarım bu makale, o zaman ve deneyimi uygun biçimde kullanır ve başkalarının LuaTeX’in yeteneklerini keşfetmeye başlamaya ilgi duymasına yardımcı olur. LuaTeX geliştirilmeye devam ediyor ve bu yazı yazıldığı sırada, TeX Live 2017 ile birlikte yayımlanan 1.0.4 sürümüne ulaşmış durumda. Geliştiriciler çok aktiftir ve bulunan hatalar genellikle bildirildikten kısa süre sonra düzeltilir — örneğin, [dev-luatex posta listesi](https://mailman.ntg.nl/mailman/listinfo/dev-luatex) aracılığıyla veya [çevrimiçi LuaTeX hata izleyicisi](http://tracker.luatex.org/my_view_page.php) üzerinden. 1.0 sürümüne ulaşmadan çok önce LuaTeX üretimde kullanılabilir durumdaydı — elbette, özelliklerin sürekli geliştiğini ve zaman zaman değişikliklerin mevcut TeX kodunuzu bozabileceğini kabul etmeniz gerekiyordu. Bugün LuaTeX, elbette, Overleaf ve ShareLaTeX platformları tarafından (LuaLaTeX olarak) desteklenmektedir.

## Değişen bir dünyada TeX: Yeni teknolojiler ve iş akışları

Açıkça görülüyor ki TeX motorları teknolojik olarak durağan bir dünyada çalışmaz ve bazen, TeX motorlarına dâhil edilmeleri için hemen ve açık biçimde aday olan yenilikler ortaya çıkar — bunlardan biri aşağıda kısaca ele aldığımız OpenType değişken yazı tipleridir. TeX tabanlı dizgi yazılımının son derece çok yönlü olduğu konusunda kuşku olmasa da, TeX motorları artık hızla değişen ve çok çeşitli bir yazılım ekosistemi içinde çalışmaktadır — yeni iş akışları, entegrasyon ve TeX’in yalnızca bir bileşen olabileceği çok çeşitli belge/dizgi çözümlerini uygulama esnekliği ihtiyacını daha da belirginleştirir.

TeX yalnızca mevcut kullanıcıları için güncel kalmak zorunda değildir; aynı zamanda gelen nesiller için de yararlı kalacak içerik oluşturma çözümlerini mümkün kılarak yeni kullanıcıları da cezbetmelidir — TeX’i bağımsız bir araç olarak değil, belki de Overleaf gibi çevrimiçi işbirlikçi platformlar üzerinden genel bir iş akışının parçası olarak kullanmak isteyebilecek insanlar.

Kısa bir göz atma bile [tex.stackexchange](https://tex.stackexchange.com/) TeX tabanlı yazılımla üretilen ve uygulanan belge ve çözümlerin muazzam çeşitliliğini gösterir — insanlar gitgide daha fazla kullanım alanı ve üretmek istedikleri içerik türü buldukça olağanüstü yaratıcılık sergiler. Ayrıca, TeX tabanlı işaretleme/içeriği işleyerek PDF olmayan (ve DVI olmayan) çıktılar — örneğin MathML/XML ve HTML — üretebilen iş akışlarına duyulan ihtiyaç hiç olmadığı kadar artmıştır. Örneğin, TeX’i [JATS XML](https://jats.nlm.nih.gov/) biçimine “dönüştürmek” (uzun süredir akademik dergi yayıncılığında kullanılan bir biçim) ve daha yakın zamanda elektronik kitap yayıncılığında kullanılan epub’un yükselişi.

### Değişken Yazı Tipi Teknolojisi — Zamanlar Değişiyor

14 Eylül 2016’da Microsoft, [Google](https://opensource.googleblog.com/2016/09/introducing-opentype-font-variations.html), [Adobe](https://blog.typekit.com/2016/09/14/variable-fonts-a-new-kind-of-font-for-flexible-design/) ve Apple yeni bir yazı tipi teknolojisi duyurdu: [OpenType değişken yazı tipleri](https://medium.com/@tiro/https-medium-com-tiro-introducing-opentype-variable-fonts-12ba6cd2369). Bu teknolojiyi ayrıntılı incelemeyeceğiz; ancak şunu söylemek yeterli: [Thomas Phinney](https://twitter.com/ThomasPhinney) ve [John Hudson](https://twitter.com/TiroTypeworks)  gibi saygın yazı tipi uzmanları,[Twitter’da](https://twitter.com/ThomasPhinney/status/917087509342851072) değişken yazı tipi teknolojisinin, mobil cihazlarda bulunan sayısız farklı ekran boyutu/çözünürlüğüne uyum sağlayan duyarlı tasarımlar gerektiren web tasarımcılarının ihtiyaçlarının da etkisiyle, birçok önceki yazı tipi yeniliğinden çok daha hızlı benimsendiğini gözlemlemiştir (

Açıkça, OpenType değişken yazı tipleri yazı tipi teknolojilerinde ilginç ve heyecan verici bir gelişmedir; TeX kullanıcıları bundan kuşkusuz yararlanabilir — nitekim bu soru kaçınılmaz olarak [tex.stackexchange’de gündeme getirilmiştir](https://tex.stackexchange.com/questions/355104/tex-luatex-xetex-fontspec-support-for-opentype-variable-fonts)  ve LuaTeX desteği LuaTeX [posta listesinde tartışılmıştır](https://www.tug.org/pipermail/luatex/2016-September/006204.html).

Bu arada, “parametrik” yazı tipi oluşturma fikrine dayanan yazı tipi teknolojisinin tamamen yeni bir fikir olmadığını belirtmekte fayda var: Knuth’un METAFONT’u ve Adobe’nin Multiple Master teknolojileri, uygulama ayrıntıları oldukça farklı olsa bile, bazı yönleriyle erken öncüllerdir.

### Değişken yazı tipleri: Onları ne zaman istiyoruz — şimdi mi?

Her yeni ve yararlı teknoloji standardının/şartnamesinin, hedeflediği geliştiriciler ve uygulayıcılar ekosistemine “yerleşmesi” için zamana ihtiyacı vardır — buna, şartnamenin kendisindeki olası belirsizlikleri veya ifade yorumlarını gidermek için gerekli süre de dahildir. Geliştiricilerin belgeleri okuyup anlaması ve bunu gerçek, çalışan yazılıma dönüştürmesi gerekir — burada buna, yazı tiplerini ve onları kullanacak teknolojileri oluşturmak da dahildir: uyumlu tarayıcılar ve dizgi motorları. TeX geliştiricilerinin, değişken yazı tipi teknolojileri için destek uygularken (programlarken) güvenilir “ölçütler” olarak kullanılabilecek yüksek kaliteli değişken yazı tiplerine erişimi olması açıkça gerekecektir.

TeX içinde değişken yazı tipleri gibi herhangi bir yeni teknolojiyi uygulamak, *potansiyel* olarak TeX motorlarının iç yapısının değiştirilmesi ihtiyacını doğurur — elbette bunu yapma gereği, söz konusu teknolojinin niteliğine ve kritik olarak TeX davranışının hangi yönünün değiştirilmekte olduğuna bağlıdır. TeX motorlarının kendisini değiştirmek her zaman gerekli değildir; belki yalnızca bu programlarda kullanılan destekleyici/tamamlayıcı yazılımda, dâhilî olan herhangi bir “bileşen”de (üçüncü taraf kod kitaplıkları) değişiklik gerektirir. Dahilî olarak, TeX motorları *akıl almaz derecede* karmaşıktır — TeX’in kaynak kodunu güvenilir değişiklikler yapabilecek düzeyde anlamak, önemli ölçüde ve son derece uzmanlaşmış bir bilgi birikimi gerektirir (ve bunun arzı çok sınırlıdır). Ayrıca, yapılan değişikliklerin TeX motorlarının uzun vadeli kararlılığını/uyumluluğunu olumsuz etkilememesi de esastır — bu, TeX topluluğu ve sonrasında bir yazarın (La)TeX dosya/dosyalarını işleyenler için hayati önem taşır: özellikle akademik yayınevleri ve Overleaf ile ShareLaTeX gibi bulut tabanlı hizmetler.

Birçok TeX kullanıcısı değişken yazı tiplerinden yararlanmaya ilgi duyacaktır; örneğin yeni tasarım olanakları uygulamak veya zorlu dizgi sorunlarına çözümler bulmak için. Bu yüzden, bir anlamda bir açmaz vardır: TeX kullanıcıları yeni bir teknolojiye erişim ister ama bunun uygulanması çok sınırlı bir kaynağa bağlıdır: bunu gerçekleştirebilecek yeterliliğe sahip geliştiricilerin sayısı. TeX’in iç yapısını değiştirmek zordur ve genel olarak mümkün olan her yerde bundan kaçınmak en iyisidir; peki TeX’e yeni özellikler/yetenekler eklemeye yaklaşmanın başka bir yolu var mı? Evet! Ve LuaTeX bu yolu seçmiştir.

#### Erken deneyler: OpenType değişken yazı tipleri ve LuaTeX

LuaTeX’in tasarımı, değişken yazı tipi teknolojisiyle hızlı deney yapmayı mümkün kılmıştır. Nisan 2017 itibarıyla, LuaTeX kullanan ConTeXt TeX biçimi bir [beta sürümüne](https://mailman.ntg.nl/pipermail/ntg-context/2017/088343.html) sahipti ve bu sürüm OpenType değişken yazı tiplerini uyguluyordu. Bu, ConTeXt’in yazı tipi desteğinin Lua kodu içinde inşa edilmiş olması sayesinde mümkündü (ve ConTeXt’in Lua ile yazılmış kendi fontloader’ı vardır).

## LuaTeX: Arka plan ve tarihçe

TeX terimleriyle LuaTeX, on yılı aşkın süredir aktif geliştirilmede olmasına rağmen “bloktaki yeni çocuk” sayılır. LuaTeX web sitesi [belgeliyor](http://www.luatex.org/roadmap.html) ki LuaTeX 2005’te hayatına başladı ve (bence) aktif ve sürdürülebilir geliştirme 2006’da başladı. Doğasında bulunan karmaşıklık ve onu inşa edenlerin özverisi nedeniyle, LuaTeX’in 1.0 sürümüne ulaşması gerçekten 10 yıllık bir geliştirme süreci aldı; bu sürüm [geliştiricileri tarafından duyuruldu](https://mailman.ntg.nl/pipermail/dev-luatex/2016-September/005882.html) (Hans Hagen, Hartmut Henkel, Taco Hoekwater, Luigi Scarso) 27 Eylül 2016’da.

Bu sürüm duyurusunda önemli bir ilke beyanı yer alır:

> “Ana hedefimiz, iç işleyişe uyarlama gerektirmeden kullanıcı uzantılarına izin veren bir TeX varyantı sağlamaktır.”

Bu ifade, LuaTeX’in geliştirilmesinin ardındaki felsefeyi mükemmel biçimde özetler ve TeX tabanlı yazılımın az önce sözünü ettiğimiz zorlukları nasıl ele alabileceğine dair bir yolu işaret eder: yeni teknolojileri benimsemek ve yeni kullanıcı kuşakları için güncel kalmak.

Şimdi, bu makalenin alt başlığında yer alan ikinci soruyu ele alma zamanı: “onu bu kadar farklı kılan nedir”. “...iç işleyişe uyarlama gerektirmeden kullanıcı uzantılarına izin verir” ifadesinin anlamını keşfederek LuaTeX’in “masaya ne getirdiğini” daha iyi anlayabiliriz.

## LuaTeX: TeX’in “kara kutusunu” açmak

Knuth’un özgün TeX programı, bugün kullanımda olan tüm modern TeX motorlarının ortak atasıdır ve LuaTeX, etkili biçimde, evrimsel sürecin en son adımıdır: pdfTeX programından türetilmiştir, ancak çok sayıda ek işlevsellik getiren güçlü yazılım bileşenlerinin eklenmesiyle. Knuth özgün TeX yazılımını yazdığında, dizgi davranışını kontrol etmek ve programlamak için TeX dilini de sağladı: yaklaşık 320 düşük düzey komut (primitif) TeX makro paketlerinin kullanıcılarına ve geliştiricilerine sunuldu. Bu komutlar, TeX’in dizgi davranışının belirli yönleri üzerinde farklı derecelerde kontrol veya etki sağlıyordu; ancak TeX’in iç işlevselliğinin, algoritmalarının, karar verme süreçlerinin, verilerinin ve veri yapılarının büyük bir kısmı kullanıcıdan gizliydi. Tartışılabilir ki Knuth’un TeX programı tamamen bir “kara kutu” değildi, ama kesinlikle çok koyu bir gri tonuydu — elbette kaynak kodu da sağlanmıştı, fakat insanların büyük çoğunluğu için bu da anlaşılmazlık bakımından bir kara kutuydu.

TeX içindeki süreçleri bir bakıma “kara kutu” olarak adlandırıyoruz; ancak LuaTeX, TeX tabanlı iç yapısını açarak kullanıcılara/geliştiricilere TeX motorunun derinliklerinde gerçekleşen bir zamanlar gizli olan birçok sürece çok daha fazla erişim ve kontrol sağlar. LuaTeX ayrıca yeni özellikler üzerinde kontrol sağlayan birçok yeni ilkel komut da ekler.

### LuaTeX: pdfTeX’ten türetilmiştir ama pdfTeX’in kodunu kullanmaz

Kesinlik adına, LuaTeX’i pdfTeX’ten türemiş olarak tanımlamış olsak da, LuaTeX’in pdfTeX’in özgün program kodunu doğrudan kullanmadığını belirtmek önemlidir. LuaTeX’in geliştiricilerinden biri (Taco Hoekwater) gerçekten *Herkülvari* bir görev üstlenerek LuaTeX’in çekirdek TeX motorunu temiz, modern C kodu (CWEB) ile baştan yazdı.

#### Tarihsel not

Knuth’un özgün TeX kaynak kodunun yaşından kısmen dolayı — modern türevlerinin ondan türediği — onu değiştirmek ve yeni TeX tabanlı dizgi motorlarına uyarlamak ya da bunları oluşturmak karmaşık ve dolambaçlı bir süreçtir. Bu sürecin bir parçası Pascal kodunu C koduna dönüştürmeyi gerektirir — ki bu da [belirli bir düzeyde karmaşıklıktan](http://www.readytext.co.uk/?p=2529)yoksun değildir. Ortaya çıkan makine tarafından üretilmiş C kodu son derece ayrıntılıdır ve okumak ya da anlamak çok zordur. Açıkça, LuaTeX’in kodunun tamamen yeniden yazılmış olması, tüm Pascal’dan C’ye dönüştürme sürecini ortadan kaldırır.

## LuaTeX’in yapı taşları

Giriş bölümünde LuaTeX’ten bir “araç seti” olarak söz etmiş ve onu bir “belge oluşturma ve mühendislik sistemi” olarak tanımlamıştık. LuaTeX 1.0 duyurusunda geliştiricilerinin şunu söylediğini de gördük:

> “Ana hedefimiz, iç işleyişe uyarlama gerektirmeden kullanıcı uzantılarına izin veren bir TeX varyantı sağlamaktır.”

Şimdi bu iplikleri ve fikirleri bir araya getirip bunun tümünün ne *aslında anlama geldiğine* odaklanma zamanı.

### LuaTeX yapbozu

“Kaputun altına” bakacak olsaydınız, LuaTeX yazılımının, yani gerçek yürütülebilir programın, LuaTeX’in genel işlevselliğini sağlamak için bir araya getirilen bir yazılım bileşenleri topluluğundan inşa edildiğini görürdünüz. Elbette bu yeni bir şey değil ve çoğu yazılım bu şekilde oluşturulur. Ancak LuaTeX’i diğer TeX motorlarından farklı kılan şey, bu bileşenlerin kullanıcılara TeX’in iç işlevselliğinin birçok yönüne çok daha fazla erişim sağlayacak şekilde birleştirilmiş olmasıdır: TeX’in dizgi algoritmaları, karar verme süreçleri, verileri ve veri yapıları. TeX’in iç yapısının bu şekilde açılması, kullanıcıların gerçek TeX motorunun kendisini değiştirmeye ihtiyaç duymadan yeni dizgi çözümleri oluşturmasına olanak tanır.

### LuaTeX içindeki Lua: “Kara kutunun” anahtarı

Lua çok güçlü ama öğrenmesi kolay bir betik dilidir ve [Brezilya kökenlidir](https://www.lua.org/about.html)—1993’te oluşturulmuştur ve hâlâ aktif olarak geliştirilir. Lua’nın güçlü yönlerinden biri, farklı yazılım bileşenlerini “birbirine yapıştırmak” için kullanılan bir programlama dili olarak işlev görmesidir; böylece onları basit ama çok yönlü bir betik dili üzerinden kullanabilirsiniz. Lua, LuaTeX TeX motorunun iç işleyişini açığa çıkarmada merkezi bir rol oynar; ancak bunun nasıl başarıldığını daha iyi anlamak için, çok kısa olarak iki programlama kavramını ele almak üzere küçük bir sapma yapmak faydalı olacaktır:

* Uygulama Programlama Arayüzü (API);
* programlama dili bağlama.

Bu kavramlarla zaten rahatsanız bu bölümü atlamaktan çekinmeyin. Her iki konu da ayrıntılı olarak ele alınmayacaktır — amacımız katı teknik titizlik değil, bu kavramların anlamı ve LuaTeX ile ilgisini fark etmek için yeterli arka plan sağlamaktır.

### Uygulama Programlama Arayüzü (API)

Diyelim ki kullanıcıların (diğer programcıların) yararlı bulabileceği bir kod yazmış bir programcısınız; ancak kodunuz karmaşıktır ve kullanıcıların bu düşük düzey ayrıntılarla uğraşmasını istemiyorsunuz. Not edin ki bu programcılar/geliştiriciler, kodunuzu yazarken kullandığınız aynı programlama diliyle çalışıyor. Ayrıca, kodunuzun bazı bölümlerini yeniden yazma planlarınız olduğunu varsayalım — örneğin daha hızlı hale getirmek, daha az bellek gerektirmek vb. Mevcut kullanıcılar bunun için endişelenmemelidir: yapmayı planladığınız değişiklikler onların programlarını bozmamalıdır. Peki çözüm nedir?

Cevap API denen şeyde yatar: bir *Uygulama Programlama Arayüzü*. Kullanıcıların (diğer programcıların), değişebilecek kodunuzun düşük düzey ayrıntılarına erişmesini gerektirmek yerine, diğer programcıların kullanabileceği belirli bir *fonksiyonlar* kümesi sağlarsınız. Bu fonksiyonlar, başka geliştiricilerin *arayüz* üdür; onların aracılığıyla diğer geliştiriciler, programınızın iç işleyişini yakından bilmeye ihtiyaç duymadan *uygulamalar* oluşturabilir. Bir bakıma bunu kodunuzu çevreleyen ve kullanıcıları dağınık, düşük düzey ayrıntılardan “yalıtan” ek bir katman olarak düşünebilirsiniz.

O fonksiyonları (arayüzü) değiştirmediğiniz sürece, yazılımınızın alt düzey ayrıntılarını özgürce değiştirebilir ve güncelleyebilirsiniz; böylece uygulamalarını oluşturmak için kodunuza güvenenlerin çalışmalarını etkilemez (bozmazsınız): işte Uygulama Programlama Arayüzü terimi buradan gelir.

#### API’ler: LaTeX paketi benzetmesi

Bir LaTeX paketinin sağladığı komutları kullandığınızda, paketin komutlarını bir API biçimi olarak düşünebilirsiniz. Bir kullanıcı olarak, bu komutların arkasındaki TeX ve LaTeX sihirbazlığıyla (yani paketin kodunda) ille de ilgilenmezsiniz: sizin istediğiniz tek şey onların sağladığı işlevsellikten yararlanmaktır.

### Programlama dili bağlama

Yararlı bir kod gövdesi yazıp yayımlayan programcıların (bir *kitaplık* olarak adlandırılır) sözde bir Uygulama Programlama Arayüzü (bir fonksiyonlar kümesi) sağlayabileceğini gördük; bunun üzerinden başka programcılar, *aynı* programlama dilini kullanarak bu kitaplıktan (kod koleksiyonundan) yararlanabilir. Her iki taraf da (kitaplık geliştiricisi ve kullanıcıları) *aynı* aynı *programlama dilini kullanıyorsa bu sorun değildir; fakat* farklı [programlama dili bağlaması](https://en.wikipedia.org/wiki/Language_binding).

nın teknik ayrıntılarını incelemek bu makalenin kapsamı dışındadır; bu nedenle genel ilkelerin kısa bir özetini vereceğiz. Özünde, özgün kitaplığa uygun ek bir “katman” kod ekleyerek onun başka bir programlama diliyle (Lua gibi) “iletişim kurması” sağlanabilir: bu kod katmanına *bağlayıcı* denir. Bu, iki dilin bir API aracılığıyla birlikte çalışmasını sağlar; ikinci dildeki (Lua gibi) programcılar bu API üzerinden kitaplığın sağladığı özelliklere/hizmetlere erişebilir.

![Bir dil bağlama kavramını gösteren şematik diyagram.](/files/ff06fa245d85512420372b54a3df1b212877fe10)

**Şekil 1**: Lua ile yazılmış bir programın başka bir programlama dilinde yazılmış harici bir kitaplığı kullanabilmesini sağlayan dil bağlama kavramını gösteren şematik diyagram. Lua bağlayıcılarının kullanımı sayesinde LuaTeX’in iç bileşenleri ve dolayısıyla LuaTeX’in iç dizgi işlevselliğinin büyük bir kısmı, kullanıcıların karmaşık dizgi sorunlarına çözümler geliştirmesine açılmış olur.

## LuaTeX: Programlama için iki seçenek — TeX ve Lua

Esasen LuaTeX, iki programlama dilini destekleyen bir TeX motorudur: geleneksel TeX tabanlı dil ve Lua betik dili. Elbette her iki dili aynı TeX belgesinde kullanabilirsiniz ya da isterseniz yalnızca TeX yoluyla dizgi yapmaya devam edebilirsiniz: örneğin LaTeX (LuaLaTeX) makro paketi aracılığıyla. TeX (veya LaTeX) kullanması ya da öğrenmesi kolay bir programlama dili değildir ve TeX’in birçok kendine özgü yönünü gerçekten ustalıkla bilen insan sayısı oldukça azdır — TeX’in [tokenlar](https://www.overleaf.com/blog/522-what-is-a-tex-token) ve genişletme kavramları, çoğu insanın bir programlama diline dair beklenti ve deneyimlerinden oldukça yabancıdır.

Lua’nın eklenmesi, çok daha erişilebilir ve geleneksel bir programlama dili aracılığıyla TeX tabanlı dizgi kullanma yeteneğini açar — bu makalenin başlarında belirtildiği gibi, Lua API’sini kullanarak [neredeyse hiç TeX kodu olmadan gelişmiş dizgi yapabilirsiniz](http://wiki.luatex.org/index.php/TeX_without_TeX).

### LuaTeX birçok yeni ilke ekler

Her TeX motoru, her bir dizgi motorunun desteklediği TeX tabanlı dilin temel yapı taşları olan sözde ilkel komutlardan yüzlerce tane sağlar. Donald Knuth’un yayımladığı özgün TeX sürümü yaklaşık 320 komut sunuyordu; ancak daha yeni TeX motorlarının (pdfTeX, XeTeX ve LuaTeX) her biri, kullanıcıların her motorun ek özelliklerine ve işlevselliğine erişmesini sağlamak için birçok yeni ilke eklemiştir. LuaTeX’in hatırı sayılır sayıdaki yeni ilkeleri kendi [Reference Manual](https://www.tug.org/svn/texlive/tags/texlive-2017.1/Master/texmf-dist/doc/luatex/base/luatex.pdf?revision=44591\&view=co).

’ında belgelenmiştir. LuaTeX tarafından getirilen birçok yeni ilke arasında bir zamanlar adı `\directlua{...}` olan ve Lua kodunu kullanmanın kapısı niteliğindeki komut vardır: gelişmiş dizgi araçları ve çözümler oluşturmak için LuaTeX motorunun iç yapısına erişir.

### \directlua{...}: Lua programlamaya açılan kapı

Daha önce tartışıldığı gibi, Lua betik dili, LuaTeX’in TeX tabanlı dizgi motoruna ve LuaTeX’in kurulduğu birçok bileşenin sağladığı işlevselliğe erişim sağlayan bir “katman” olarak görülebilir. Lua dili aynı zamanda LuaTeX’in genişletilebilirliğini mümkün kılan mekanizmadır — Lua’nın uzman harici yazılım/kod kitaplıklarını yükleme yeteneği sayesinde.

Topluca, LuaTeX tarafından sağlanan Lua arayüzü (Lua tabanlı fonksiyonlar kümesi) *Lua API’si* olarak adlandırılır: bu, LuaTeX’in iç motoru/bileşenleri ile kullanıcının belgesi arasındaki “iletişim hattıdır”.

### \directlua{...} için basit bir örnek

Aşağıdaki *son derece basit* örnek, olasılıkların buzdağının yalnızca görünen kısmının üstünü bile kazımaya başlamaz. Ancak TeX parametrelerine erişmenin “TeX yolu” ile “Lua yolu” arasındaki etkileşimin temel fikrini göstermeye yarar.

Şuna dikkat edin:

* `\hsize` bir TeX ilkesidir (komutudur) ve dizilmiş satırların genişliğini belirleyen bir dahili parametrenin değerini ayarlar — örneğin bunu genellikle bir `\vbox{...}`. `\hsize` olan *çok* TeX parametrelerinden biridir ve Lua koduyla erişebilir ve/veya değiştirebilirsiniz.
* TeX parametrelerine erişmek yalnızca *çok küçük* bir yönüdür LuaTeX’in Lua API’sinin: çok daha fazlası var!

```latex

\documentclass{article}
\begin{document}
\let\\\relax %genişletme sorunlarını önlemek için \\ anlamını yeniden tanımla
{\ttfamily\string\hsize} değerinin geçerli hali budur (\LaTeX{} aracılığıyla):
\the\hsize\par
\directlua{
% Lua API’sini kullanarak \hsize’ın geçerli değerini al
local hs=tex.hsize
% Bazı
% LaTeX kodunu ve \hsize değerini yazdırmak için bir Lua API işlevi kullan
tex.print("Burada {\\ttfamily\\string\\hsize} değeri
Lua kodundan bildirildi (ölçeklenmiş noktalarda): ")
tex.print(hs.."\\par")
% Lua API’sini kullanarak \hsize için yeni bir değer ayarla
tex.hsize="400pt" % veya tex.hsize=400*65536 kullan (ölçeklenmiş noktalarda)
}%
% \directlua bittikten sonra, LaTeX’ten
% bize \hsize’ın yeni değerini söylemesini iste
İşte {\\ttfamily\\string\\hsize} değeri
\LaTeX{} tarafından {\\tt\string\\directlua} tamamlandıktan sonra bildirilen:
\the\hsize\par
\end{document}
```

Aşağıda LuaTeX’in LaTeX kodunu (yukarıdaki) dizmesinin sonucunu gösteren bir görüntü var:

![LuaTeX çalıştırmasının sonuçları](/files/32390ef3335994de8f90a7bf3a18586d1ea1123b)

\directlua’nın `\let\\\relax` Lua kodunun LuaTeX tarafından “genişletilmesi”nin yol açtığı sorunları önlemek için kullanıldığını not edin: bu konuyu aşağıda kısaca ele alıyoruz.

### Lua kodunu kullanma

TeX/LaTeX belgelerinizde Lua kodu kullanmanın iki ana seçeneği vardır:

1. **Satır içi**: Lua kodunu doğrudan `.tex` belgenizin içine yazmak (yukarıdaki örnekte olduğu gibi);
2. **Harici**: Lua kodunu harici `.lua` kod dosyalarında saklamak ve bunları yükleyip çalıştırmak için Lua’nın olanaklarını kullanmak.

Seçenek (1), daha kısa Lua kodu parçaları için en uygunudur. Seçenek (2), daha büyük programlar veya Lua kodu kitaplıkları için kullanılır. Bunun belirgin bir avantajı, TeX’in sözde `\catcode` değerlerini içeren zor sorunlardan kaçınabilmenizdir (bunlar “oldukça sinir bozucu” olabilir). Bu `\catcode` sorunların nedeni, Lua kodunun LuaTeX’in yerleşik Lua yorumlayıcısına verilmeden önce “genişletilmesidir”. Bu genişletmeyi anlamak zor olabilir; bu yüzden sonraki bir makalede bunu daha ayrıntılı inceleyeceğiz.

Elbette, .tex dosyalarınızda Lua kodu kullanmanıza yardımcı olan LaTeX paketleri vardır — örneğin, [luacode paketini](https://ctan.org/pkg/luacode?lang=en).

## kullanabilirsiniz. Özet ve bu makalenin 2. Bölümüne giriş

LuaTeX’in oluşturulduğu yazılım bileşenleri, gömülü Lua betik diliyle birlikte, geniş bir yelpazedeki karmaşık dizgi sorunlarını çözebilen çözümler oluşturmak ve TeX tabanlı bir dizgi motoruyla yakın entegrasyondan yararlanabilecek belge üretim iş akışlarını tasarlamak için güçlü bir birleşim sunar. İçinde [Bu makalenin 2. bölümü](/latex/tr/derinlemesine-makaleler/09-an-introduction-to-luatex-part-2-understanding-directlua.md) LuaTeX tarafından sağlanan en güçlü komuta derinlemesine bir bakış atıyoruz: `\directlua`.

O zamana kadar, mutlu LuaTeX kullanımları!

## Teşekkürler

Yazar, son derece minnettardır [Luigi Scarso](https://twitter.com/luigi_scarso), LuaTeX’in geliştiricilerinden biri olarak, bu makalenin bir taslağını okumak için zaman ayırdığı ve çok sayıda son derece yararlı yorum ve öneride bulunduğu için. Kalan gerçek hatalar veya eksiklikler, elbette, yazarın sorumluluğundadır. Ayrıca, teşekkür etmek isterim [Patrick Gundlach’a](https://twitter.com/patrickgundlach), geliştiricisi [speedata publisher](https://speedata.github.io/publisher/), sorularıma yanıt vermek için zaman ayırdığı için.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://ayakaleaf-pro.ayaka.space/latex/tr/derinlemesine-makaleler/07-an-introduction-to-luatex-part-1-what-is-it-and-what-makes-it-so-different.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
