> 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/22-how-does-expandafter-work-the-meaning-of-expansion.md).

# \expandafter nasıl çalışır: Genişletmenin anlamı

[Bölüm 1](/latex/tr/derinlemesine-makaleler/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md) [Bölüm 2](/latex/tr/derinlemesine-makaleler/22-how-does-expandafter-work-the-meaning-of-expansion.md) [Bölüm 3](/latex/tr/derinlemesine-makaleler/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md) [Bölüm 4](/latex/tr/derinlemesine-makaleler/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md) [Bölüm 5](/latex/tr/derinlemesine-makaleler/17-how-does-expandafter-work-a-detailed-macro-case-study.md) [Bölüm 6](/latex/tr/derinlemesine-makaleler/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.md)

## TeX’in “genişleme” kavramına giriş

İncelendikten sonra [TeX belirteçleri ve belirteç listeleri](https://www.overleaf.com/learn/latex/Articles/\expandafter_TeX_tokens?preview=true), arka plan konuları listemizde sıradaki `\\expandafter` TeX’in kavramıdır *genişletme*: temel TeX süreci `\\expandafter` ile çalışacak şekilde tasarlanmıştır.

### Genişlemeyi açıklama zorluğu hakkında...

Çoğumuz için TeX’in genişleme kavramı ve bunun ardındaki nedenler/mekanizmalar kafa karıştırıcı olabilir—bunları tamamen *tam olarak* basit, özlü bir biçimde açıklamak kolay değildir. TeX’in birçok iç işlemi/süreci oldukça karmaşık biçimlerde birbiriyle ilişkilidir; bu da TeX’in işlemlerinin bazı yönlerini “parçalamaya” çalışırken zorluklar yaratabilir: bunları programın bütününden bağımsız olarak ele almaya çalışmak. Genişleme kesinlikle bu kategoriye giren bir kavramdır; çünkü bu, *temel* TeX davranışının bir öğesidir ve TeX’in iç süreçlerinin tamamına derinlemesine gömülüdür. Ancak bu makale, genişlemeye dair bir açıklama kurmayı ve okuyucuların üzerine inşa edebileceği bir temel sunmayı amaçlamaktadır.

TeX’in genişleme mekanizmasını açıklamak için adım adım ilerleyeceğiz; bir dizi ilgili/ilgili konuyu gözden geçirip bunları bir araya getirerek TeX davranışının bu kritik unsurunu anlamayı geliştireceğiz. Makalenin ilerleyen bölümlerinde ve ayrıntıdan hoşlanan daha meraklı okuyucu için TeX’in içine de bakacağız; genişleme sürecini yönlendiren temel kaynak kodunu özetleyeceğiz.

### TeX belirteçleri hakkında önemli noktalar

Aşağıdaki tartışma boyunca TeX’in bir sonraki giriş öğesini iki kaynaktan alabileceğini hatırlamak önemlidir:

1. **fiziksel metin dosyaları**: üretirken *yeni belirteçler* bu dosyalardaki karakterleri ve komutları okuyup tarayarak ya da
2. **belirteç listeleri**: mevcut, *önceden hazırlanmış*, TeX’in belleğinde saklanan belirteçlerden giriş alarak.

Ayrıca hatırlayın ki TeX, okuduğu herhangi bir öğeye (karakter veya komut) dair bilgiyi düzenli biçimde “paketlemenin” kullanışlı bir yolu olarak belirteçleri kullanır.

TeX üretirken *yeni belirteçler* o, *belirteç üretimi noktasında*belirteç değerini hesapladığı öğeye dair bilgilere anında erişime sahip olur. Örneğin, yeni komut belirteçleri üretirken TeX önce `curcs` adı verilen ve TeX’in birazdan üreteceği belirtecin ait olduğu komut hakkında bilgi aramasını sağlayan bir değer hesaplar.

Ancak, TeX belirteç listelerinden ( *saklanan belirteç dizileri*) okuyorsa, listedeki herhangi bir belirteci neyi temsil ettiğini belirleyebilmeden önce önce o belirteci “paketten çıkarması” gerekir. Örneğin TeX, bir makro tanımının parçası olarak saklanan belirteçleri okuyabilir: bu belirteçler, çok önceden okunmuş, belirteçlere dönüştürülmüş ve bir kenara kaydedilmiş bir metinden üretilmiş olurdu. Belirteç türü (karakter veya komut), TeX’in “paketten çıkarma” işleminden tam olarak ne anladığını belirler:

* için *komut belirteçleri* (belirteç değeri > 4095): `curcs` şunun aracılığıyla $$\text{curcs}=\text{token value}-4095$$ hesapla ve kullan `curcs` komut hakkında bilgi aramak için;
* için *karakter belirteçleri* (belirteç değeri < 4095): karakter belirtecini bileşenlerinden oluşan (karakter kodu, kategori kodu) çiftine ayır.

### Başlangıçta...

Genişleme incelememize başlamak için, TeX motorlarının işleyebildikleri komut kümesini nasıl sınıflandırdıklarına, ya da kategorize ettiklerine bakacağız. Şimdilik, “genişletilebilir”in yalnızca TeX komutunun henüz açıklanmamış bir “özelliği” olduğunu varsayın.

### “Genişletilebilir” komutlar kavramı

Tüm TeX tabanlı dizgi programları (TeX “motorları”) iki ana komut “sınıfını” anlar:

* doğrudan yürütülebilir motorun kendisine yerleşik komutlar: sözde *ilkellerinden*;
* kullanıcı tarafından tanımlanan komutlar: sözde *makrolar*.

TeX motorları ayrıca tüm komutları iki gruba ayırmak için bir komut “davranışı” türü olarak “genişletilebilir olma”yı da kullanır:

* genişletilebilir komutlar;
* genişletilemez komutlar.

Dolayısıyla tüm komutlar kümesinin (ilkeller + makrolar) aşağıdaki görselde gösterildiği gibi sınıflandırılabileceğini düşünebiliriz:

![Tüm TeX komutlarının sınıflandırılmasını gösteren diyagram](/files/a5720d0018d1c83f2d44e13eb48a50ac0cf34960)

Genişlemenin/genişletilebilir olmanın tam olarak ne anlama geldiğini henüz bilmiyor olsak da şunu görebiliriz:

* tüm makrolar genişletilebilir komutlar olarak sınıflandırılır;
* bazı ilkel (yerleşik) komutlar da genişletilebilir olarak sınıflandırılır (çoğunluğu değildir).

**Etkin karakterler hakkında not**: İlkel komutlar ve makrolara ek olarak üçüncü bir “genişletilebilir” öğe sınıfı vardır: etkin karakterler—kategori kodu 13 atanmış herhangi bir karakter de “genişletilebilir” kabul edilir; çünkü bunlar “minyatür makrolar” olarak işlenir.

#### TeX bir komutun “genişletilebilir” olup olmadığını nasıl bilir?

TeX belirteçleri [üzerine yaptığımız tartışmadan](https://www.overleaf.com/learn/latex/Articles/\expandafter_TeX_tokens?preview=true) belirteçlerin, TeX’in bir giriş öğesine—bir karaktere ya da komuta—dair bilgileri “paketlemek” için hesaplayıp kullandığı tam sayı değerlerinden ibaret olduğunu biliyoruz. Ayrıca, herhangi bir belirteç (tam sayı) değeri verildiğinde, TeX’in gerektiğinde belirteçleştirme sürecini tersine çevirerek bir belirteci “paketten çıkarabileceğini” ve onun temsil ettiği komut ya da karakter hakkında verileri ortaya koyabileceğini de not etmiştik.

TeX’in yeni bir belirteç oluştururken ürettiği verileri ya da mevcut bir belirteçten—örneğin bir makroda veya başka bir belirteç listesinde saklanan bir belirteçten—çıkarılan verileri kullanarak TeX, bu belirtecin temsil ettiği komut (veya karakter) hakkında ayrıntılı bilgi bulmak için kendi iç veri saklama tablolarını denetleyebilir. Aşağıdaki görsel, bir komut belirteci oluşturma (“paketleme”) sürecini ve ardından TeX’in bilgiye ihtiyaç duyduğunda süreci tersine çevirip belirli bir belirteç değerinin temsil ettiği komut hakkında veri elde etmesini (“belirteci paketten çıkarma”) özetlemektedir.

![TeX’in belirteçleri nasıl paketleyip/paketten çıkardığını gösteren diyagram](/files/6f71acbaeb6ba05d8f624e8554d276143450968f)

### Komut kodları

TeX’in her komut (ilkel veya makro) hakkında sakladığı bilgilerin bir parçası, *komut kodu*adı verilen bir şeydir: TeX motorlarının komutları sınıflandırmak için (içsel olarak) kullandıkları bir tam sayı değeri—benzer davranış/işlevselliğe sahip komutlar aynı komut kodunu paylaşır.

**Not**: Tekil bir, *aktif olmayan*, karakter için komut kodu, *kategori kodu* TeX tarafından okunduğu (taranıp alındığı) anda kendisine atanan değerdir. Ayrıca, karakterler dışında komut kodlarının tamamen TeX’in iç işleyişine ait olduğunu da unutmayın: bunlara makrolar veya ilkel komutlar aracılığıyla erişilemez—bu ayrıntıları görmek için TeX’in kaynak kodunu okumanız gerekir!

İşte bazı komut kodu örnekleri:

* `\hbox`, `\vbox`, `\vtop`, `\vcenter`, `\\box` (ve diğerleri) hep birlikte “kutu oluşturma” komutları olarak sınıflandırılır ve 20 numaralı komut kodunu paylaşır;
* `\def`, `\edef`, `\gdef`, `\xdef` hepsi “makro tanımı” komutlarıdır ve 97 numaralı komut kodunu paylaşırlar;
* tüm makrolar 111, 112, 113 veya 114 komut kodlarından biriyle sınıflandırılır: farklı komut kodları, makroyu tanımlarken `\\long` ya da `\\outer` kullanımına göre belirlenir:
* 111: uzun olmayan, dış olmayan makro için komut kodu (ör. `\def\foo{...}`)
* 112: uzun, dış olmayan makro için komut kodu (ör. `\long\def\foo{...}`)
* 113: uzun olmayan, dış makro için komut kodu (ör. `\outer\def\foo{...}`)
* 114: uzun, dış makro için komut kodu (ör. `\long\outer\def\foo{...}`)

TeX ayrıca “genişletilebilir” olarak sınıflandırılan komut alt kümesini tanımlamak için komut kodlarını kullanır. Bunu yapmak için TeX, genişletilebilir komutları 100 eşik değerini aşan komut kodu değerleriyle ilişkilendirir (Knuth’un özgün TeX’inde, e-TeX ve pdfTeX’te kullanılan değer). Sonuç olarak:

* *genişletilemez* komutların (çoğunluğu) komut kodu <= 100 değerine sahiptir
* *genişletilebilir* komutların komut kodu > 100 değerine sahiptir

Dolayısıyla TeX belirli bir komutun ayrıntılarını arayıp komut kodunun > 100 olduğunu tespit ederse, TeX bunun hemen genişletilebilir olduğunu bilir. Tüm makrolara ve az sayıda ilkele (yerleşik komutlara), bunların genişletilebilir olduğunu gösteren bir komut kodu atanır: peki TeX neden bu “genişletilebilir” sınıflandırmasıyla uğraşır? Tahmin edebileceğiniz gibi, bu yalnızca bu komutların bir bakıma “özel” olduğu anlamına gelir; yani TeX’in *genişletme*.

**Not (karakterler)**: Bir karakter etkin olarak tanımlanmadıysa (kategori kodu 13) tüm karakterler genişletilemezdir. Etkin karakterler tek harfli “mini makrolar” olarak düşünülebilir.

## Evet, evet ama genişleme nedir???

4095’ten büyük belirteç değerlerinin komutları temsil etmek için kullanıldığını not etmiştik; bunun sonucunda TeX, gerektiğinde o belirteci “paketten çıkarıp” bu belirtecin temsil ettiği TeX komutu hakkında bilgiye erişebilir. TeX, bu komutun komut-kodu değerine bakarak genişletilebilir olma özel kategorisine girip girmediğini belirleyebilir. Peki TeX bu bilgilerle ne yapar ve “genişletilebilir olma”, yani genişleme, *gerçekte ne anlama gelir*?

### Genişleme: Bir dizi işlem için genel bir terim

TeX’in işlem sürecinin belirli noktalarında bir belirtecin genişletilebilir bir komutu temsil edip etmediğini bilmesi gerekir:

* **Hayır**: Eğer o komut belirteci *sonlanmıyor;* genişletilebilir kategoriye giriyorsa, TeX onu bir sonraki işlem aşamasına yalnızca “iletir”.
* **Evet**: Eğer o komut belirteci *yapar* genişletilebilir kategoriye giriyorsa, bunu TeX’in “o belirteci genişletmek” diye adlandırdığı bir işlem yaparak söz konusu belirteci “süzüp çıkarmasına” yol açan bir eylem olarak düşünebilirsiniz; yani genişleme gerçekleştirilir.

Özünde genişleme, TeX’in *kaldırmak* bu belirteci girişinden kaldırmasını ve *yerine koymak* onu, aynı komut kodunu paylaşan o komuta ya da komut grubuna özgü “genişleme sürecinden” doğan belirteçlerle değiştirmesini içerir.

TeX’in ne zaman genişleme yaptığını ve ne zaman yapmadığını bilmek pratik ve deneyim gerektirir—The TeXbook’un 215. sayfasında genişletilebilir belirteçlerin genişletilmediği durumlar listelenir. Gerçek şu ki, TeX’in genişleme yapma süreci karmaşık ve nüanslıdır.

#### Hangi komutlar genişletilebilirdir?

TeX motorlarının genişletilebilir olarak sınıflandırdığı ilkel (yerleşik) komutların bir listesine bakarsanız (ör. The TeXbook’un 212–215. sayfaları), pratikte genişlemenin, TeX’in biraz eklektik bir komut grubunun davranışını tanımlamak için kullandığı oldukça genel bir terim olduğu ortaya çıkar. Belirli bir (genişletilebilir) komutun genişletilmesinden elde edilen sonuçlar gerçekten değişir ve bunu, işlevlerine göre gruplandırılmış bir dizi genişletilebilir komutu listeleyerek görebiliriz. Tek tek komutların tam anlambilimi burada önemli değildir; daha ilgi çekici olan, onların eylemlerinin genel sonuçlarıdır—genişlemelerinin gerçekte *ne yaptığı ya da neyi başardığı*.

| **Komut**                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | **Açıklama**                                                                                                                                                                                                | **Genişleme davranışı**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <ul><li>tüm makrolar</li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                             | Komut/karakter belirteçlerinden oluşan saklı bir dizi                                                                                                                                                       | <p>Pratikte makro genişlemesi, TeX’in okuması için bir belirteç listesi eklemek demektir. Bu şunları içerir:</p><ul><li>herhangi bir makro argümanı için belirteç listeleri oluşturmak—bu süreç, sınırlayıcı belirteçlerin tanımlanmasını/yutulmasını da içerir;</li><li>saklanan bir belirteç listesi (makro tanımı) almak ve ilk adımda oluşturulan parametre belirteçlerini (makro tanımına) yerleştirmeye hazırlanmak.</li></ul><p>Esasen makro genişlemesi <em>makro belirtecini kaldırır</em> girdiden kaldırılır ve <em>onu değiştirir</em> tanımda bulunan belirteçlerle.</p> |
| <ul><li><code>\expandafter</code></li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                | Genişleme sırasını değiştirin                                                                                                                                                                               | Belirteç filtreleme/karıştırma                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| <ul><li><code>\noexpand</code></li></ul>                                                                                                                                                                                                                                                                                                                                                                                                                                   | Genişlemeyi engelleyin (evet, şaşırtıcı biçimde genişletilebilir bir komut olarak sınıflandırılır)                                                                                                          | Genişlemeyi geciktirin (bir tür belirteç filtreleme)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| <ul><li><code>\input</code>, <code>\endinput</code>, <code>\scantokens</code></li></ul>                                                                                                                                                                                                                                                                                                                                                                                    | Kaynak dosyaları aracılığıyla yeni bir belirteç kaynağı girmeyle ilgilidir—evet, `\scantokens` sözde “yalancı dosyalar” kullanımı nedeniyle bu kategoriye girer                                             | Yeni belirteçlerin kaynağı gibi davranın                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| <ul><li><code>\if</code>, <code>\ifcat</code>, <code>\ifnum</code>, <code>\ifdim</code>, <code>\ifodd</code>, <code>\ifvmode</code>, <code>\ifhmode</code>, <code>\ifmmode</code>, <code>\ifinner</code>, <code>\ifvoid</code>, <code>\ifhbox</code>, <code>\ifvbox</code>, <code>\ifx</code>, <code>\ifeof</code>, <code>\iftrue</code>, <code>\iffalse</code>, <code>\ifcase</code>, <code>\ifdefined</code>, <code>\ifcsname</code>, <code>\iffontchar</code></li></ul> | Bir koşullu ifadeye başlayın                                                                                                                                                                                | Belirteç “filtrelemeye” başlayın: aşağıdaki belirteçlerden hangilerinin işleneceğine karar verin.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| <ul><li><code>\fi</code>, <code>\or</code>, <code>\else</code></li></ul>                                                                                                                                                                                                                                                                                                                                                                                                   | Bir koşullu ifadeyi sonlandırın                                                                                                                                                                             | Belirteç “filtrelemeyi” durdurun: hangi belirteçlerin işleneceğine karar verin                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| <ul><li><code>\csname</code>… <code>\endcsname</code></li></ul>                                                                                                                                                                                                                                                                                                                                                                                                            | Bir komut belirteci oluşturun/üretin                                                                                                                                                                        | Bir dizi belirteci tek bir komut belirtecine dönüştürün                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| <ul><li><code>\number</code>, <code>\romannumeral</code>, <code>\string</code>, <code>\meaning</code>, <code>\fontname</code>, <code>\jobname</code>, <code>\eTeXrevision</code></li></ul>                                                                                                                                                                                                                                                                                 | Bir şeyi bir belirteç dizisine dönüştürün                                                                                                                                                                   | Bazı belirteçler üretin (bu, bir iç niceliği ya da değeri temsil eder)                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| <ul><li><code>\the</code>, <code>\unexpanded</code>, <code>\detokenize</code></li></ul>                                                                                                                                                                                                                                                                                                                                                                                    | `\\the` belirteç ekleme dahil çeşitli kullanımları vardır; `\detokenize` bir belirteç listesini karakter belirteçlerinden oluşan bir listeye dönüştürür; `\unexpanded` belirteçlerin genişlemesini engeller | Bazı belirteçler ekleyin/üretin ya da genişlemeyi denetleyin                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| <ul><li><code>\topmark</code>, <code>\firstmark</code>, <code>\botmark</code>, <code>\splitfirstmark</code>, <code>\splitbotmark</code>, <code>\topmarks</code>, <code>\firstmarks</code>, <code>\botmarks</code>, <code>\splitfirstmarks</code>, <code>\splitbotmarks</code></li></ul>                                                                                                                                                                                    | Özel kullanımları olan belirteç listelerine erişen komutlar                                                                                                                                                 | Saklanan belirteçlerin bir kaynağına (belirteç listeleri) erişin                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |

Yukarıdaki listeye dayanarak, bu komutlar topluluğundan herhangi bir “genel davranış” çıkarmak mümkün mü—genişleme anlayışımızı daha da netleştirmek için? Yaklaşık olarak, bir komutun genişletilmesinin sonuçları birkaç temel etkinlikte toplanır:

* belirteç üretimi
* belirteç ekleme
* belirteç filtreleme
* sonraki belirtecin genişlemesini değiştirme/denetleme

### Ve son olarak: genişlemenin anlamı nedir?

Bir komut belirtecinin (etkin karakterler dahil) genişlemesinin TeX’in **kaldırmak** o komut belirtecini girişten kaldırmasını ve **yerine koymak** onu, genişleme davranışından doğan başka belirteçlerle değiştirmesini içerdiğini düşünebiliriz: belirteçler üretme/yerleştirme, belirteçleri filtreleme ya da sonraki belirtecin genişlemesini değiştirme/denetleme. Bir belirteç genişletildikten sonra TeX, genişleme sürecinden doğabilecek herhangi bir belirteci okumaya/işlemeye devam ederdi. TeX’in tam olarak ne zaman ya da nerede genişleme yapacağı bambaşka bir sorudur: TeX’in işlem sürecindeki incelikler ve karmaşıklıklar nedeniyle bunu bu makalede tam olarak ele almamız mümkün değil, ancak TeX’in ana giriş işleme davranışına genel bir bakış sunabiliriz.

## Genişleme ve TeX’in yapısı

TeX’in genişletilebilir ve genişletilemez komutlar arasında nasıl/nerede ayrım yaptığını görmenin en iyi yolu muhtemelen TeX’in kaynak koduna bakmaktır.

İçeride TeX son derece karmaşık bir yazılım parçasıdır; dolayısıyla TeX’in çalışmasına özgü çok sayıdaki nüanslı davranışı tam olarak açıklamaya çalışmak pratik değildir. Belirtildiği gibi, TeX’in belirteçleri okurken gerçekte ne zaman genişleme yapacağı “biraz karmaşıktır”; bu nedenle aşağıdaki tartışma, TeX’in genişlemenin gerçekleşmesini gerektiren bir durumda olduğunu varsayar. TeX’in belirteçleri okuduğu/oluşturduğu ama genişleme yapmadığı durumlar arasında, `\def` makro tanımlama komutu için belirteç oluşturma/saklama ya da belirteçleri bir `\\toks` kayıtta saklama yer alır.

Aşağıdaki diyagram, TeX’in giriş ve belirteç işleme ile ilgilenen temel yapısının basitleştirilmiş bir genel görünümünü sunar: amaç, genişletilebilir ve genişletilemez belirteçlerin TeX’in giriş işleme sürecinde nasıl “süzüldüğünü” vurgulamaktır. Çeşitli temel işlevleri tanımlamak için C programlama dili kullanılmıştır; ancak umarız ki C diline aşina olmasanız bile temel yapı anlaşılır olacaktır.

![](/files/6e3eac38ee1bed1787710cd9aacd8ed068f9c714)

### TeX yapı diyagramının açıklaması

Ana hatlarıyla, TeX’in işlemesi `maincontrol()` adı verilen bir işlev tarafından yönlendirilir; TeX’in kaynak kodunda Knuth buna “chief executive” olarak atıfta bulunur ve onu şöyle tanımlar:

> “Şimdi `maincontrol` rutinine geliyoruz; bu rutin, TeX’in tüm çeşitli parçalarının işlerini doğru sırayla yapmasına neden olan ana anahtarı içerir… bu programın büyük doruk noktasıdır… Şimdi ağın merkezindeyiz, diğer parçaların çoğuna dokunan ve onları birbirine bağlayan merkezi sinir sistemi.”

Aşağıdaki açıklama biraz sadeleştirilmiştir, ancak TeX tabanlı yazılımın alt yapısının bir “havasını” verir: genişletilebilir komutların TeX’in giriş işlemesi sırasında nasıl tanımlandığı (“yakalandığı”) ve süzülüp çıkarıldığı.

Özünde, TeX’in giriş işlemesinin en erken aşamasında o, mevcut komutun (belirtecin) komut kodu değerini kullanarak genişletilebilir komutları (makrolar, genişletilebilir ilkeller ve etkin karakterler) saptar; biri belirlenirse, bu tür komutlar genişletilerek “yakalanır” ve “ön işlemden geçirilir”. Bu filtreleme (genişleme) süreci sayesinde TeX, genişletilebilir komutları girişten kaldırır ve bunları ilgili genişleme davranışlarından doğan belirteçlerle değiştirir. Genişleme süreci tamamlandığında TeX, bu genişlemeden üretilen herhangi bir belirteci okuyacaktır. Yalnızca genişletilemez öğeler TeX’in işlemesinin bir sonraki aşamasına aktarılır: TeX’in tüm genişletilemez ilkel komutları çalıştırdığı ve karakterleri dizdiği “büyük anahtar”.

### maincontrol() işlevini anlamak

Bu `maincontrol()` işlevi büyük bir sözde [switch ifadesi](https://en.wikipedia.org/wiki/Switch_statement)içerir—Knuth buna “big switch” der—TeX bununla tüm *genişletilemez* ilkel komutları işler: yani komut kodu <= 100 olanları.

Belirli bir komutu (veya karakteri) işlemek için bu “büyük switch” ifadesi TeX’in geçerli kipinin bir birleşimini kullanır:

* iç/dış dikey kip ya da
* kısıtlı/paragraf yatay kipi ya da
* satır içi/gösterimli matematik kipi

*artı* her ilkel ya da karakter için komut kodunun değeri—bir *aktif olmayan* karakterin komut kodu onun *kategori kodu* değeridir. Kayıt için, TeX’in 6 kipinin tamamına, çeşitli yapıları—matematik, paragraflar, kutular vb.—dizgilerken kipini değiştirmek ve mevcut kipini koruyup geri yüklemek için TeX tarafından kullanılabilecek bir tam sayı değeri atanır. İşte TeX’in çeşitli kiplerine atanan tam sayılar:

|                              |                                              |                |
| ---------------------------- | -------------------------------------------- | -------------- |
| **Kip**                      | **Anlam**                                    | **Kip değeri** |
| Dış dikey                    | Paragraflar arasında (sayfalar oluştururken) | 1              |
| İç dikey                     | Doğrudan bir `\vbox{...}`                    | -1             |
| Yatay                        | Paragraflar dizilirken/oluşturulurken        | 102            |
| Kısıtlı yatay                | Doğrudan bir `\hbox{...}`                    | -102           |
| Gösterimli matematik         | Dizgi *gösterim* denklemler/formüller        | 203            |
| Satır içi (formül) matematik | Dizgi *satır içi* denklemler/formüller       | -203           |

Çeşitli kiplerin tümleyeni için negatif değerlerin kullanımına dikkat edin; örneğin iç ve dış dikey kip gibi. Komutlar işlenirken `maincontrol()`TeX geçerli kipin mutlak değerini kullanır—yani negatif işareti yok sayar. Örneğin, TeX yatay kiplerinden birindeyse ve kategori kodu 11 olan bir karakteri işlemesi gerekiyorsa, $$102 + 11 = 113$$ “büyük switch”inin içinde, o karakterleri herhangi bir yatay kipte işleyen koda dallanmak için toplamı kullanır (paragraf oluşturma ya da bir `\hbox`).

#### Bir sonraki belirteci alma

Bu `maincontrol()` işlevi `getxtoken()` işlevini çağırarak bir sonraki giriş belirtecini alır; bunun karşılığında, `getxtoken()` en düşük seviyeli giriş işlevini çağırır `getnext()`. After `getnext()` işini tamamladıktan ve kilit *genel değişkenlerin*, `getxtoken()` değerini ayarladıktan sonra,

hakkında bazı notlar `getnext()` ve `getxtoken()`:

* **`getnext()`**: bu, TeX’in temel giriş işlevidir. Fiziksel bir dosyadan giriş karakterlerini okur ve işler ya da bir belirteç listesinden belirteçler okur. Şunu not edin ki `getnext()` gerçekte belirteç değerlerini hesaplamaz ama bir dizi önemli *genel* değişkeni (ör. komut kodu ve `curcs`) ayarlar; bunlar daha sonra işlemde kullanılır.
* **`getxtoken()`**: “genişletilmiş belirteci al” `getnext()` işlevini kullanarak bir sonraki giriş öğesini okur. Ardından okunan öğenin komut kodunu sınar ve o öğenin genişletilebilir bir komutu temsil edip etmediğini kontrol eder: eğer öyleyse, genişletilir ya da makro çağrılır. Genişletilemez öğeler için `getxtoken()` bir belirteç değeri hesaplar ve bu ayrıntılar bir sonraki işleme aşamasına aktarılır: genişletilemez ilkellerin çalıştırıldığı ve karakterlerin dizildiği “büyük switch”.

Özünde, `getxtoken()` sayesinde tüm genişletilebilir öğeler işlenmeden önce “süzülüp çıkarılır”; `maincontrol()`bu da TeX’in “büyük switch”inin yalnızca genişletilemez ilkel komutları işlemesi sonucunu doğurur.

Bir kez daha vurgulayalım ki yukarıdaki diyagram bir sadeleştirmedir; çünkü TeX’in işlemesinin başka alanları da belirteçlerin genişletilmesine neden olur; örneğin:

* TeX sayısal değerleri ararken (tararken) tam sayıları bulma arayışında genişlemeyi tetikler ( `getxtoken()`) ;
* ilkel komutu çağırarak `\romannumeral` genişlemeye neden olur—bu gerçeğin nüanslı kullanımı için [ile Genişleme `\romannumeral`](https://www.texdev.net/2011/07/05/expansion-using-romannumeral/) makalesine bakın;
* Bu `\edef` (“genişletilmiş tanım”) makro tanımlama komutu tam genişlemeyi zorlar;
* TeX, bir `\halign` ya da `\valign` önsözünü işlerken belirli noktalarda belirteçleri genişletir (her iki komut da TeX’in tablo dizgi algoritmalarıyla ilgilidir).

[Bölüm 1](/latex/tr/derinlemesine-makaleler/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md) [Bölüm 2](/latex/tr/derinlemesine-makaleler/22-how-does-expandafter-work-the-meaning-of-expansion.md) [Bölüm 3](/latex/tr/derinlemesine-makaleler/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md) [Bölüm 4](/latex/tr/derinlemesine-makaleler/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md) [Bölüm 5](/latex/tr/derinlemesine-makaleler/17-how-does-expandafter-work-a-detailed-macro-case-study.md) [Bölüm 6](/latex/tr/derinlemesine-makaleler/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.md)


---

# 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/22-how-does-expandafter-work-the-meaning-of-expansion.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.
