> For the complete documentation index, see [llms.txt](https://overleaf-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://overleaf-pro.ayaka.space/latex/tr/daha-fazla-konu/18-how-overleaf-created-the-tex-primitive-reference-data.md).

# Overleaf'in TeX ilkel başvuru verilerini nasıl oluşturduğu

Bu makale, TeX ilkel komutlarının iki çapraz başvuru tablosunu üretmek için kullanılan yöntem ve teknikleri açıklar:

* [TeX motoruna göre listelenen TeX ilkelleri](/latex/tr/daha-fazla-konu/46-tex-primitives-listed-by-tex-engine.md) ve;
* [CJK TeX motoruna göre listelenen TeX ilkelleri](/latex/tr/daha-fazla-konu/45-tex-primitives-listed-by-cjk-tex-engine.md).

Bu bilgi, ayrıntıların daha ince noktalarıyla ilgilenen okuyucular için sağlanmıştır; ancak çapraz başvuru tablosunu kullanmak için bir ön koşul değildir. Farklı okuyucuların ihtiyaçlarını karşılamak için, konuları daha derinlemesine incelemek isteyenler için daha uzun bir açıklamayla birlikte çok kısa bir özet sürümü de sunuyoruz.

## Kısa özet/genel bakış sürümü

Çapraz başvuru tablosunu oluşturmak için Overleaf, desteklenen ilkellerin listesini çıkarmak üzere 9 TeX motorunun kaynak kodunu işledi; bu süreç 9 metin dosyası (her TeX motoru için 1 dosya) üretti. Bu 9 ilkel kümesi, aslında tek tek ilkel kümelerinin birleşimi olan bir “ana liste” oluşturmak için bir araya getirildi; böylece çeşitli motorlara dağılmış toplam yaklaşık 1000 benzersiz ilkel elde edildi. Her motor için, kendi ilkel listesi ana dosyayla (tüm komutlar kümesiyle) çapraz olarak karşılaştırılarak bu yaklaşık 1000 komuttan hangilerini desteklediği belirlendi; bu karşılaştırmalar aşağıdaki iki tabloda özetlenmiştir:

* [TeX ilkelleri çapraz başvuru verileri](/latex/tr/daha-fazla-konu/46-tex-primitives-listed-by-tex-engine.md)
* [TeX ilkelleri çapraz başvuru verileri (CJK motorları için)](/latex/tr/daha-fazla-konu/45-tex-primitives-listed-by-cjk-tex-engine.md)

## “Yazılım derleme” 101: Bu ne anlama geliyor?

Bu makalenin geri kalanında, eğer bir programcı değilseniz ya da C veya C++ gibi derlenen dillerde programlama yapmıyorsanız, size yabancı gelebilecek olan “TeX motorlarını derleme” kavramına değineceğiz. Bizim amacımız açısından yazılım derlemek—yani TeX motorlarını—programı geliştirmek için kullanılan programlama dilinde yazılmış kaynak kod dosyalarından oluşan parçalarından bir yürütülebilir TeX programı oluşturma sürecidir.

## Tam sürüm: Ayrıntıları mı istiyorsunuz? Okumaya devam edin...

Her TeX tabanlı dizgi motoru, TeX dilinin bir “lehçesini” destekler: her motorun dizgi özelliklerini kontrol eden ve makrolar—kullanıcı tarafından tanımlanan komut dizileri—oluşturmak/tanımlamak için yapı taşlarını sağlayan belirli bir ilkel komut kümesini. LaTeX, plain TeX ya da herhangi bir başka makro paketi için yazılmış olsun, her makro nihayetinde ilkel komutlardan oluşur—her ne kadar TeX ilkellerinin o “ana kaya katmanına” ulaşmadan önce ek makro katmanlarını oldukça derinlemesine aşmanız gerekebilecek olsa da. İlkel-komut başvuru verilerini üretmek için çözümlenen 9 TeX motoru kümesinin elbette ortak birçok komutu vardır; ancak her TeX motorunun, o TeX’in belirli bir “sürümünün” özelliklerini desteklemek için geliştiricileri tarafından eklenmiş kendi ilkel komutları da vardır.

Bir TeX motorunun ilkel komutları yürütülebilir TeX yazılımının içine yerleşiktir: ilkeller kullanıcılar tarafından oluşturulmuş makrolar değildir; bunlar, her motorun dizgi davranışını kontrol etmek için kullanılan temel, bölünemez/atomik talimatlardır. Sonuç olarak, herhangi bir TeX motorunun desteklediği ilkel komutların kesin listesini oluşturmanın en güvenilir yolu, yürütülebilir TeX programlarının derlendiği (sıkıştırıldığı) gerçek kaynak kodu incelemek ve kaynak kodunda tanımlanan ilkellerin listesini çıkarmaktır. Kolay olmalı gibi geliyor, değil mi? Ancak TeX’in 40 yıllık gelişim geçmişi nedeniyle, TeX motorlarının kaynak kod dosyalarını (LuaTeX hariç) keşfetmek/incelemek pek de basit değildir. Bu karmaşıklıkların nedeni, Knuth’un özgün TeX kaynak kodunu yazmak için kullandığı araçlarda, programlama dilinde (Pascal) ve yöntemde (edebi programlama) yatmaktadır—diğer tüm motorların nihayetinde türediği kaynak budur.

LuaTeX için bir istisna olduğunu not ediyoruz; çünkü çekirdek motor kodu, Pascal kullanımını ve aşağıda ayrıntılandırılan diğer eski karmaşıklıkları (Web2C) ortadan kaldırmak için C diliyle yeniden yazılmıştır; dolayısıyla LuaTeX’in kaynak kodu kapsamlı olsa da, onun “paketlenme” ve dağıtılma biçimi diğer TeX motorlarıyla karşılaştırıldığında çok daha anlaşılırdır. Bunun bir sonucu olarak ve kaynak kodundan derlenme süreçlerine göre, TeX motorlarını iki kategoriye ayırmak uygundur:

1. LuaTeX: özel (daha modern) derleme süreci
2. Diğer tüm motorlar: eski (Web2C) derleme süreci

## Eski kodun bağlamı: (Çoğu) TeX motorunu derlemek neden karmaşıktır

Aşağıda keşfedeceğimiz gibi, Knuth özgün TeX kaynak kodunu tek, devasa bir dosya olarak yayımladı; adı `tex.web` ki Knuth, kalan hataları gidermek için her 7 yılda bir bunu güncellemeye devam ediyor—hiçbir zaman yeni özellik eklenmiyor, bu tamamen bir hata giderme çalışmasıdır.

TeX’in kaynak kodunun dosya uzantısı (`.web`) muhtemelen size tanıdık gelmeyecektir ve TeX’i yazmak için Knuth’un hangi dili kullandığını merak edebilirsiniz. Cevap Pascal’dır; ancak `.web` uzantının biraz daha açıklamaya ihtiyacı var. Knuth, onun [edebi programlama](https://en.wikipedia.org/wiki/Literate_programming) adını verdiği bir programlama yöntemi geliştirdi; bu yöntemde bir programın kaynak kodu ve dokümantasyonu bir araya getirilir ve `.web`uzantısıyla tek bir birleşik dosya olarak (kod + dokümantasyon) yayımlanır: bu dosya türüne WEB dosyası denir. WEB dosyalarını aşağıda biraz daha ayrıntılı açıklıyoruz.

### Yeni TeX motorları oluşturma: Knuth’un şartları

Knuth TeX kaynak kodunu (`tex.web`) uzun zamandır herkesin kullanımına ücretsiz olarak sunsa da, elbette mutlak hakkı olarak, onun (`tex.web`) kaynak kodunun doğrudan düzenlenmemesi/değiştirilmemesi ve “TeX” program adıyla yeniden dağıtılmaması gerektiğine dair önemli bir şart koymuştur. Kaynak kodda şöyle yazar:

```
% Bu programın telif hakkı (C) 1982 D. E. Knuth’a aittir; tüm hakları saklıdır.
% Bu dosyanın kopyalanmasına yalnızca (1) siz D. E. Knuth iseniz veya
% (2) kopyanızda kesinlikle hiçbir değişiklik yapmadıysanız izin verilir. (WEB sistemi,
% değişiklikler için bir yardımcı dosya aracılığıyla izin verir; ana dosya olduğu gibi kalmalıdır.)
```

ve ayrıca:

```
Eğer bu program değiştirilirse, ortaya çıkan sisteme
`\TeX'; denmemelidir; tek başına resmi ad `\TeX'
birbirleriyle tamamen uyumlu olan yazılım sistemleri için ayrılmıştır.
Belirli bir uygulamanın
`\TeX' olarak adlandırılmayı hak edip etmediğini belirlemeye yardımcı olmak için kullanılabilir [bkz.~Stanford Computer Science raporu CS1027,
Kasım 1984].
Özünde: ana TeX kaynak kodunu düzenleyip değiştirilmiş sürümlerini dağıtarak değişiklik yapmayın ve ona
```

demeye devam etmeyin. Değişiklik yapmak istiyorsanız, örneğin yeni ilkeller eklemek vb., bu değişiklikleri “yardımcı bir dosya aracılığıyla değişiklikler” yaparak uygulamalı ve “TeX türevinize”, “TeX”ten ayırt eden bir ad vermelisiniz; bu ad, dizgi biçiminde ( `tex.web`), Amerikan Matematik Derneği’nin ticari markasıdır.$$\mathrm\TeX$$Eski mirasın devralınması

### TeX’i modern programlama dilleri ve yöntemleriyle tamamen yeniden yazmaya yönelik girişimler olmuş olsa da—iki Java tabanlı girişim gibi

Yeni Dizgi Sistemi [εχTEX](https://en.wikipedia.org/wiki/New_Typesetting_System) ve [ve](http://www.extex.org/) biri Clojure’da [olanlar gibi diğerleri de dahil olmak üzere, hiçbiri tamamen başarılı olamadı. TeX’i daha da geliştirmek için tasarlanmış projelerin ve girişimlerin tarihi ilginç bir konudur ve okuyucular daha fazla bilgi için](https://www.infoq.com/news/2015/01/implementing-tex-in-clojure)Birleşik Krallık TeX SSS’sini ziyaret etmek isteyebilir [sahip olur.](https://texfaq.org/FAQ-enginedev) Tekniniz bağlı olduğu gibi?

Bu başarılı olmuş LuaTeX dışı girişimler, örneğin e-TeX, pdfTeX, XeTeX ve diğer motorlar, *doğrudan üstüne* kurulmuştur: onun kaynak kodunu alıp yeni bir motoru ek yeteneklerle türetmek için “değişiklikler uygulamak”—örneğin yeni ilkeller eklemek, PDF çıktısı üretmek, UTF-8 metin girişini desteklemek vb. Bu yol önemli başarılara götürmüş olsa da, bu türev motorların Knuth’un 40 yıl önce oluşturduğu eski kodu ve geliştirme tekniklerini de devraldığı anlamına gelir.

Buradaki temel çıkarım şudur: LuaTeX dışında, Knuth’un özgün kaynak kodundan türetilen çoğu TeX motoru, tek, devasa bir dosya ( `tex.web`) alınarak ve bu yeni motorun çekirdek kaynak kodunu içeren yine tek bir devasa dosya üreten değişiklikler uygulanarak oluşturulur. İleri düzey okuyucular, uygunlukla ilgili [pdfTeX ve XeTeX üzerine notlar](#aside-xetex-and-pdftex).

### Bazı ek TeX tarihi/arka planı

TeX’in doğuş anı [Knuth’un günlüğüne 30 Mart 1977 olarak kaydedilmiştir](/latex/tr/derinlemesine-makaleler/55-what-s-in-a-name-a-guide-to-the-many-flavours-of-tex.md#the-genesis-of-tex-a-brief-history), şimdi 40 yılı aşkın bir süre önce. İçsel olarak TeX, kaynak kodunu Knuth’un olağanüstü ayrıntıda [belgelemek için büyük özen gösterdiği son derece karmaşık bir programdır](https://www.amazon.co.uk/Computers-Typesetting-TeX-Program-TEX/dp/0201134373). Bunu yapmak için Knuth, adını verdiği bir programlama tarzı geliştirdi [edebi programlama](https://en.wikipedia.org/wiki/Literate_programming) edebi programlama `.web` ; bu tarzda bir programın kaynak kodu ve dokümantasyonu birleştirilir ve uzantısıyla birleşik bir dosya olarak yayımlanır (WEB dosyası olarak anılır). Knuth, TeX yazılımını yazmak için programlama dili olarak Pascal’ı seçti ve şaşırtıcı olmayan biçimde, son dokümantasyonu yazmak için TeX dizgi dilini kullandı. Sonuç olarak, Knuth’un TeX’inin ana kaynak kodu, adı verilen tek, devasa bir dosya olarak yayımlanır `tex.web`: Pascal kaynak kodu ve dokümantasyonu için TeX dizgi kodunun bir karışımı.

Eğer bir program Knuth’un edebi programlama tarzı/yöntemi kullanılarak yazılmışsa (TeX, MetaFont, BibTeX ve diğerlerinde olduğu gibi), dokümantasyonu ya da kaynak kodunu çıkarmak için WEB dosyasını ön işlemden geçirmeniz gerekir. Programın dokümantasyonuna erişmek için WEB dosyasını (örneğin, `tex.web`) ile işlemden geçirirsiniz [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) adlı bir yardımcı programla `.tex` ki bu, dokümantasyonu dizgiye dökebileceğiniz bir [dosya olarak üretir. Pascal’daki kaynak kodunu çıkarmak için](http://tug.org/texinfohtml/web2c.html#tangle-invocation) TANGLE `adlı başka bir yardımcı program kullanırsınız` ki bu da uzantısıyla bir dosya çıktı verir

.p

### ve bu dosya Pascal kaynak kodunu içerir.

Yazıldığı sırada (2019’un başları) Knuth’un TeX’inin en son sürümü Ocak 2014 tarihli 3.14159265’tir. Yine dikkat edin, Knuth’un TeX kaynak kodu, yaklaşık 25.000 satırlık TeX/Pascal kodu içeren tek bir dosyada yer alır! [Pascal’dan C’ye](http://tug.org/texinfohtml/web2c.html) TeX’in doğuşundan bu yana geçen 40+ yıl içinde Pascal gözden düştü ve bugün artık çok az kişi, varsa bile, TeX’i özgün Pascal kaynak kodundan derlemeyi düşünür. Knuth’un Pascal kullanımını aşmak için, adı verilen bir iş akışı tasarlanmıştır *Web2C* ki bu iş akışında TeX’in Pascal kaynak kodu mekanik olarak (yani yazılım aracılığıyla) C kodundaki karşılığına dönüştürülür; ardından TeX’i derlemek ve yürütülebilir programı oluşturmak için bu kod kullanılır. İyi çalışır; ancak tek dezavantajı, mekanik olarak üretilen C kaynak kodunun sıradan insan incelemesi için tasarlanmamış olmasıdır: o

![](/files/0abd6d763c338d2d6aa0956dbe201566a6cd6c0b)

### Bir başka Knuthçu özellik: WEB değişiklik dosyaları

Yukarıda belirtildiği gibi, Knuth’un özgün kaynak kodu üzerinde ilerlemek için “değişiklik uygularsınız” ya da Knuth’un sözleriyle “yardımcı bir dosya aracılığıyla değişiklikler yaparsınız”: peki bu aslında ne anlama geliyor? İşte burada *değişiklik dosyası mekanizması*.

### Değişiklik dosyaları: yeni TeX motorları oluşturma mekanizması

Geliştiriciler, Knuth’un TeX’ini bir şekilde genişletmek isteyenler, yani Knuth’un özgün çalışmasının üstüne inşa etmek isteyenler, genellikle TeX’in tamamen yeni bir “sürümünü” oluşturmak ya da herhangi bir TeX motoruna eklenebilecek bir *uzantı* sağlamak isterler. Uzantı örnekleri arasında [SyncTeX](https://github.com/jlaurens/synctex) ve [EncTeX](https://ctan.org/pkg/enctex?lang=en)—örneğin SyncTeX, artık tüm TeX motorlarına dahil edilen çok kullanışlı bir uzantıdır. EncTeX’e duyulan ihtiyaç, büyük ölçüde Unicode farkındalığına sahip TeX motorlarının evrimiyle yerini kaptırmıştır—ancak EncTeX’in pdfTeX’e yerleşik olduğunu not edin.

İster amaç TeX’in yeni bir “sürümünü” üretmek olsun (yani Knuth’un özgün TeX’inin bir türevi), ister bir uzantı oluşturmak olsun, geliştiricileri Knuth’un özgün kaynak koduyla başlar ve yeni bir TeX motoru (veya ek bir uzantı) oluşturmak için gerekli değişiklikleri uygular. Ancak yukarıda belirtildiği gibi, TeX’in davranışını değiştirmek isteyen herkes bunu “yardımcı bir dosya aracılığıyla değişiklikler” kullanarak yapmak zorundadır; çünkü bu değişiklikler/değiştirmeler *doğrudan* Knuth’un özgün kaynak kodunu düzenleyerek uygulanmamalıdır: geliştiricilerin sözde WEB *değişiklik dosyası mekanizması*. Bu kodu Knuth’un TeX’ini değiştirmek için kullanılan kod WEB “dili”nde yazılır ve bir veya daha fazla kod dosyasına kaydedilir (bunlara *değişiklik dosyaları*) ve bunlar daha sonra *birleştirilir* Knuth’un değiştirilmemiş özgün ana kaynak koduyla. Bu birleştirme süreci, artık *çekirdek* olan yeni/değiştirilmiş TeX tabanlı yazılımın kaynak kodunu içeren yeni bir birleşik WEB dosyası oluşturur. *Değişiklik dosyaları* genellikle uzantısına sahiptir `.ch` fakat pratikte geliştiricilerin istediği herhangi bir uzantıya sahip olabilirler.

#### Değişiklik dosyaları nasıl kullanılır/uygulanır?

Günümüzde, değişiklik dosyalarını uygulamanın ve bir “ana” WEB dosyasını değiştirmenin en kolay yolu, adı verilen bir yardımcı program kullanmaktır [TIE](https://ctan.org/pkg/tie). Örneğin, diyelim ki Knuth’un TeX’ini, diyelim ki birkaç yeni ilkel ekleyerek değiştirmek ya da var olan (standart) bir TeX ilkelinin davranışını değiştirmek istiyordunuz. Kodunuzu, WEB sisteminin edebi programlama yaklaşımını kullanarak (Pascal’da!) yazar ve örneğin `myprim.ch`. adlı bir dosyaya kaydedersiniz. Sonraki adım, kodunuzu ( `myprim.ch`içindeki kodla birleştirmek `tex.web` ve adını `mytex.web`koyacağımız yeni, birleşik, bir WEB dosyası üretmektir. Bunu yapmak için TIE programını şu şekilde çalıştırırsınız:

```
tie -m mytex.web tex.web myprim.ch
```

Birleştirme başarılı olursa, bunun sonucunda yeni bir WEB dosyası, `mytex.web`elde edilir ve Knuth’un ana kaynak dosyası `tex.web` gereken şekilde tamamen değişmeden kalır.

Şimdi varsayalım ki başka biri yaptığınız değişiklikleri beğeniyor ve sizin yaptığınızın üstüne, ya da buna ek olarak, kendi değişikliklerini eklemek için çalışmanızı değiştirmek istiyor. TeX’in değiştirilmiş sürümünü (`mytex.web`) dağıtıp yayımlamak yerine yalnızca değişiklik dosyasını, `myprim.ch`yayınlamaya/paylaşmaya karar veriyorsunuz. Çalışmanızın üstüne inşa etmek isteyen herkes artık örneğin `moreprim.ch` adlı kendi değişiklik dosyasını oluşturup paylaşabilir; bu dosya kodunuzu bir şekilde genişletir. Her iki değişiklik dosyasından da yararlanmak isteyen başka biri, şimdi yeni bir birleşik WEB dosyası üreterek, diyelim ki *her ikisini de* değişiklik dosyasını Knuth’un özgün dosyasına birleştirerek, diyelim ki `newmytex.web`:

```
tie -m newmytex.web tex.web myprim.ch moreprim.ch
```

### Gerçek TeX sistemleri: birden çok değişiklik dosyası

Yukarıdaki TIE açıklaması aslında pratikte birçok TeX motorunun nasıl derlendiğine çok yakındır: başlangıç olarak Knuth’un `tex.web` ve o motor için WEB kaynak dosyasını üretmek üzere ardışık bir değişiklik dosyaları dizisi eklenir. Her TeX motoru, kendi belirli değişiklik dosyaları kümesini gerektirir; bunların katı bir sırayla uygulanması/işlenmesi (birleştirilmesi) gerekir: sırayı yanlış yaparsanız birleştirme süreci başarısız olur; çünkü bir dizideki her değişiklik dosyası, zincirde daha önce gelen değişiklik dosyaları tarafından getirilen değişikliklere dayanır.

İşte Knuth’un `tex.web` üzerine birden çok değişiklik dosyasını uygulayan TIE’nin örnek bir çalıştırması `ktex.web`—Knuth’un TeX’inde, onu Web2C süreci aracılığıyla C’ye dönüştürmeye hazır (uygun) hale getiren değişiklikleri içeren birleşik WEB dosyası. Ayrıca şunlara dikkat edin:

* `tex.ch` oldukça büyük bir değişiklik dosyasıdır ve birçok şeyin yanı sıra TeX’i Kpathsea kullanacak şekilde değiştirir;
* SyncTeX uzantısı birden çok değişiklik dosyası aracılığıyla eklenir.

```
tie -m ktex.web tex.web tex.ch enctex.ch synctex-def.ch0 synctex-mem.ch0 synctex-mem.ch2 synctex-rec.ch0 synctex-rec.ch1 synctex-rec.ch2 tex-binpool.ch
Bu, TIE, CWEB Sürüm 2.4’tür.
Telif hakkı (c) 1989,1992 THD/ITI’ye aittir. Tüm hakları saklıdır.
(tex.web)
(tex.ch)
(enctex.ch)
(synctex-def.ch0)
(synctex-mem.ch0)
(synctex-mem.ch2)
(synctex-rec.ch0)
(synctex-rec.ch1)
(synctex-rec.ch2)
(tex-binpool.ch)
....500....1000....1500....2000....2500....3000....3500....4000....4500
....5000....5500....6000....6500....7000....7500....8000....8500....9000
....9500....10000....10500....11000....11500....12000....12500....13000
....13500....14000....14500....15000....15500....16000....16500....17000
....17500....18000....18500....19000....19500....20000....20500....21000
....21500....22000....22500....23000....23500....24000....24500....
(Hata bulunmadı.)
```

#### Ek not: XeTeX ve pdfTeX

Tamlık adına, pdfTeX ve XeTeX için derleme sürecinin aslında Knuth’un `tex.web`ile başlamadığını not etmeliyiz; bunun yerine `pdftex.web` ve `xetex.web` sırasıyla adlı dosyalarla başlar: büyük olasılıkla değişiklikler o kadar kapsamlıdır ki, Knuth’un özgün kodunda yapılan son derece önemli değişiklikleri zaten içeren WEB dosyalarını paylaşmak/yayımlamak daha mantıklıdır.

### Bir örnek: e-upTeX

Japon TeX topluluğu, Japonca metin dizgisinin karmaşıklıklarını karşılamak üzere tasarlanmış bir dizi TeX motoru geliştirmiştir:

* **pTeX**: Knuth’un TeX motorunun Japonca dizgi desteği eklenmiş hâli;
* **e-pTeX**: e-TeX ile pTeX’in bir birleşimi (ve pdfTeX tarafından tanıtılan birkaç ilkel daha);
* **upTeX**: CJK’nin (Çince, Japonca ve Korece) daha iyi işlenmesi için uzantılar içeren Unicode farkındalığına sahip bir pTeX sürümü;
* **e-upTeX**: e-TeX ile upTeX’in bir birleşimi (birleştirilmiş hâli).

#### e-upTeX için birleşik kaynak dosyasını oluşturma

e-upTeX için birleşik WEB kaynak dosyasını (SyncTeX ile) oluşturmak için Knuth’un `tex.web` ile başlarsınız **26** ancak tek bir birleşik dosya elde etmek için aşağıdaki sırayla tek tek değişiklik dosyalarını uygulamanız gerekir; bu dosyadan ilkel komutların listesi çıkarılabilir:

```
etex.ch, tex.ch0, tex.ch, tex.ech, etex.ch0,
ptex-base.ch, uptex-m.ch, euptex.ch0, eptex.ech,
etex.ch1, euptex.ch1, synctex-def.ch0, synctex-ep-mem.ch0,
synctex-mem.ch0, synctex-e-mem.ch0, synctex-ep-mem.ch1,
synctex-p-rec.ch0, synctex-rec.ch0, synctex-rec.ch1,
synctex-e-rec.ch0, synctex-p-rec.ch1, fam256.ch,
pdfstrcmp-eup-pre.ch, pdfutils.ch, pdfstrcmp-eup-post.ch,
tex-binpool.ch
```

#### Değişiklik dosyalarının uygulanması: hangi dosyalar ve hangi sırayla?

Belirtildiği gibi, değişiklik dosyalarının kesin bir sırayla uygulanması/işlenmesi kritik önem taşır—ama hangi dosyaların gerektiğini ve bunların hangi sırayla işleneceğini nasıl öğrenirsiniz? Neyse ki bu hayati bilgi TeX Live dağıtımındaki dosyalar içinde kayıtlıdır ve TeX Live kaynak kodu üzerinde yapılan bir inceleme, her TeX motoru için derleme gereksinimlerini yöneten kuralları ortaya çıkarmıştır. Bu kuralları izleyerek Overleaf, her TeX motoru için birleşik WEB kaynak kodu dosyasını yeniden oluşturmayı ve ileri veri işleme için bir ilkel listesi çıkarmayı başarmıştır.

## Ve son olarak: İlkellerin listesini nasıl çıkarırız?

Birleşik WEB dosyası oluşturulduktan sonra, düzenli ifadeler kullanılarak ilkellerin listesini çıkarma görevi oldukça basittir; çünkü tüm ilkel komutlar, adı verilen tek bir Pascal işlevi kullanılarak tanımlanır (“kaydedilir”) `primitive(...)`. İşte Knuth’un `tex.web` kaynak kodundan alınmış gerçek örnekler:

```
primitive("lineskip",assign_glue,glue_base+line_skip_code)
primitive("baselineskip",assign_glue,glue_base+baseline_skip_code)
primitive("parskip",assign_glue,glue_base+par_skip_code)
primitive("abovedisplayskip",assign_glue,glue_base+above_display_skip_code)
primitive("belowdisplayskip",assign_glue,glue_base+below_display_skip_code)
primitive("abovedisplayshortskip",assign_glue,glue_base+above_display_short_skip_code)
...
...
```

Gördüğünüz gibi, `primitive(...)` işlevi, düzenli ifadelerle metin işlemeye son derece uygundur: kaydedilen ilkelin adı tırnak içinde (`"..."`) yer alır; buna, her ilkelin davranışını sınıflandıran ek veriler eşlik eder (bunu ayrıntılı olarak ele almayacağız). Her motor için ilkellerin listesi çıkarıldıktan sonra, bu veriler tablo hâlindeki sonuçları içeren HTML üretmek için bazı Lua betikleri tarafından işlendi.

### LuaTeX'e geri dönelim

LuaTeX’in, diğer 8 TeX motoruyla birebir aynı derleme süreçlerini kullanmadığını belirtmiştik. Web2C sürecini, Pascal’dan C’ye dönüşümü ve değişiklik dosyası mekanizmasını kısaca inceledikten sonra, LuaTeX’in nerede farklılaştığını şimdi açıklayabiliriz: LuaTeX geliştiricileri, Pascal’ı C’ye dönüştürmenin zahmetli sürecinden vazgeçmeye karar verdiler—nitekim [LuaTeX Başvuru Kılavuzu'nda](http://www.pragma-ade.com/general/manuals/luatex):

> ...derleme çerçevesi web2c’dir ve biz bunu Pascal’dan C’ye adımını olmadan kullanmaya devam ediyoruz.

LuaTeX’in çekirdek motoru C’de yeniden yazıldı; bu da derleme sürecinin biraz daha standart ve kesinlikle çok daha kullanışlı olduğu anlamına gelir. Bunun yararlı bir sonucu, LuaTeX tarafından desteklenen ilkellerin, bunlara erişme/listelenme görevini oldukça kolaylaştıran ayrı bir C kodu kaynak dosyasında güzelce ayrıştırılmış olmasıdır.

Açık konuşmak gerekirse, LuaTeX’in bazı kaynak kodu dosyalarının, Knuth’un [CWEB](https://en.wikipedia.org/wiki/CWEB)adlı ve Pascal’a değil C’ye dayanan edebi programlama yönteminin bir varyantını kullandığını da not etmeliyiz.

### Sadece WEB dosyaları değil: başka kaynak koduna da ihtiyaç var

LuaTeX hariç herhangi bir TeX motoru için birleşik WEB kaynak dosyası oluşturulduktan sonra, Pascal kaynak kodunun çıkarılması ve C koduna dönüştürülmesi gerekir; ancak bu toplam çözüm değildir. WEB kaynağından üretilen C koduna ek olarak (Pascal⮕C) çoğu TeX motoru, tipik olarak C dilinde yazılmış bir dizi ek yardımcı kaynak kodu dosyasına (kitaplıklar) da güvenir/gereksinim duyar—örneğin [Kpathsea](https://www.tug.org/kpathsea/). Yardımcı kaynak dosyaları (kitaplıklar), WEB’de (Pascal) yazılması gerekmeyen ya da yazılamayan işlevleri uygular. TeX için WEB “dilinde” yazılan her şeyin Pascal dilini kullanması gerekir; bu da daha sonra çıkarılıp makine tarafından üretilen C’ye dönüştürülür: bunu yapmak zorunda değilseniz, neden en baştan basitçe C veya C++ ile yazmayasınız.


---

# 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://overleaf-pro.ayaka.space/latex/tr/daha-fazla-konu/18-how-overleaf-created-the-tex-primitive-reference-data.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.
