> 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/21-how-tex-macros-actually-work-part-3.md).

# TeX makroları gerçekte nasıl çalışır: Bölüm 3

[Bölüm 1](/latex/tr/daha-fazla-konu/19-how-tex-macros-actually-work-part-1.md) [Bölüm 2](/latex/tr/daha-fazla-konu/20-how-tex-macros-actually-work-part-2.md) [Bölüm 3](/latex/tr/daha-fazla-konu/21-how-tex-macros-actually-work-part-3.md) [Bölüm 4](/latex/tr/daha-fazla-konu/22-how-tex-macros-actually-work-part-4.md) [Bölüm 5](/latex/tr/daha-fazla-konu/23-how-tex-macros-actually-work-part-5.md) [Bölüm 6](/latex/tr/daha-fazla-konu/24-how-tex-macros-actually-work-part-6.md)

## Duraklama zamanı!

Bu hikâyenin bir sonraki bölümüne geçmeden önce kısa bir özet yapmamız gerekiyor: nereye gittiğimizi hatırlayalım ve tüm önemli fikirlerin yerli yerinde olduğundan emin olmak için düşüncelerimizi toparlayalım. Hatırlatma olarak, işlenmiş örneğimiz TeX'in aşağıdakileri içeren bir metin satırı okuduğu varsayımına dayanıyor `Hello World \jobname` ve TeX'in bir paragraf oluşturmak için bunu dizdiği.

### Nihai amaç

Amacımız TeX makrolarının doğasını ve nasıl çalıştıklarını daha iyi (daha derin) anlamak. Ancak buna ulaşmak için önce TeX'in bir giriş dosyasını nasıl okuduğunu ve içindeki karakterleri nasıl işlediğini anlamamız gerekiyor. İşte şimdiye kadar ele alınan konuların özeti.

* TeX girişinizdeki her karakteri okur (tarar) ve her karakter için TeX'in iki bilgi parçası vardır:
* **karakter kodu**: o karakteri tanımlamak için kullanılan bir tamsayı; örn. bir .tex giriş dosyasında saklandığında;
* **kategori kodu**: TeX'e özgü, girişten okunan her karaktere anlam atamak için kullandığı başka bir tamsayı.
* TeX tarafından bir karakter okunur okunmaz, her karakterin kategori kodu *kalıcı olarak* bir karakter belirteci oluşturularak o tekil karakterle ilişkilendirilir:
* TeX, bir karakter kodunu ve buna karşılık gelen kategori kodunu, karakter belirteci adı verilen bir tamsayı içinde “bir araya paketlemek” için basit bir formül kullanır.
* TeX'in henüz okumadığı herhangi bir karakterin anlamını değiştirebilirsiniz *henüz okunmamış* davranışını değiştirmek istediğiniz herhangi bir karaktere farklı bir kategori kodu atayarak—yani TeX'in o karakteri ele alış biçimini değiştirerek.
* Kategori kodlarını yeniden tanımlamak (yeniden eşlemek), TeX'in ilkel `\catcode` komutunu.
* TeX bir kategori kodu 0 gördüğünde özel bir tarama moduna geçer ve bir komut aramaya başlar: ya (potansiyel olarak) çok harfli bir *denetim sözcüğü* ya da tek karakterli bir *denetim simgesi*.

Şimdiye kadar, TeX'in giriş tarama sürecine, tek tek karakterleri nasıl tanımladığına ve sonraki adımda ne yapacağını anlamak için her karakterin kategori kodunu nasıl kullandığına baktık. Bazı karakterler dizgi dizgi için yalnızca sıradan metin öğeleridir (örn. kategori kodu 11) ama boşluk karakterlerini (kategori kodu 10) ve kaçış karakterlerini (kategori kodu 0) da gördük. Kısalık olsun diye bakmadığımız başka kategori kodları da vardır—örneğin kategori kodu 1 (“grup başlangıcı”, örn., `{`), kategori kodu 2 (“grup sonu”, örn., `}`) ve diğerleri. Her kategori kodunun, TeX'in giriş taramasında ve ardından TeX içindeki yazılım süreçleri/algoritmaları tarafından yapılan sonraki işlemede kendine özgü bir rolü vardır.

### Belirteçler: hızlı bir gözden geçirme

“Belirteçler” kavramı TeX'in çalışma biçiminin merkezindedir: TeX ile ilgili kitaplarda, makalelerde ve çevrimiçi topluluklarda “belirteçler”den sıkça söz edildiğini ya da bunlara atıf yapıldığını göreceksiniz; bu yüzden bu konuyu kısaca gözden geçirmek faydalıdır—daha fazla ayrıntıyı daha önce yayımlanmış bir makalede bulabilirsiniz ["TeX belirteci" nedir?](/latex/tr/derinlemesine-makaleler/53-what-is-a-tex-token.md)

Giriş karakter kodu ve kategori kodunu tek bir bileşik tamsayıda birleştirerek giriş karakterlerini belirteçlere dönüştürdüğünü zaten gördük. TeX komutlar için de benzer bir şey yapar: komutun adını kullanarak bir *komut belirteci* (bunu daha ayrıntılı inceleyeceğiz). Kılavuz olarak, belirteçleri TeX'in girişten okuduğu öğeleri “paketleme” yöntemi olarak düşünebilirsiniz; böylece bunlar TeX'in işlemesinin bir sonraki aşamasına gönderilmeye hazır hâle gelir. Tüm öğelerin (karakterler ya da komutlar) tek bir sayısal gösterimde düzgün biçimde sarılması, bunların işlem zincirinin ilerleyen kısımlarında işlenmesini kolaylaştırır. Örneğin, TeX girişinizin bir kısmını daha sonra kullanmak üzere saklamak istediğinde, örneğin bir makro tanımı gibi, TeX'in sadece makro tanımınızı, ne kadar karmaşık olursa olsun, her biri makro tanımınızın bir parçasını oluşturan (içinde yer alan) bir karakteri ya da komutu temsil eden bir belirteç olan bir tamsayılar dizisi olarak kaydetmesi yeterlidir.

## Peki, şimdi ne olacak?

2\. Kısım'ın son bölümünde bir kaçış karakterinin (kategori kodu 0), TeX'i bir komutun adını aradığı özel bir işleme moduna nasıl geçirdiğini gördük. Örneğimizde TeX, şu karakter dizisini tespit etti `jobname` ve 2. Kısım'ı, TeX'in bu karakter dizisiyle (bir komutun adıyla) “bir şey yapmaya” gideceği noktada bitirdik. Bu kısımda TeX'in bundan sonra ne yaptığını ayrıntılı olarak ele alacağız.

TeX, giriş dosyanızdaki belirli bir karakter dizisinin bir komutun adını temsil ettiğini belirlediğinde (burada, `jobname`) TeX, ne yaptığına bağlı olarak, o komutu yürütmek zorunda kalabilir. “Zorunda kalabilir” diyoruz çünkü TeX'in bir komutu hemen yürütmeye çalışmadığı zamanlar vardır: örneğin, bir makro tanımlarken (TeX belirteç listeleri oluştururken)—bunları daha sonra tartışacağız. Ancak TeX'in bir paragraf dizdiği ve *olacaktır*, bu durumda, yürütmesi gereken örneğimizi takip etmeye devam edeceğiz `\\jobname`.

### Karakter dizisinden bir komutu çalıştırmaya: nasıl?

İlk olarak, 2. Kısım'daki Grafik 5b'ye dönelim; burada TeX, giriş içindeki belirli bir karakter dizisinin bir komutun adını oluşturduğunu belirlemişti: `jobname`. Grafik 5b, TeX'in “dahili tabloları kontrol et...” gerektiğini gösterir. Bu *aslında ne anlama gelir*?

![TeX bir komut adı ararken](/files/af00cf19826de83534e87f961cf28d3a62d07017)

TeX'in bir karakter dizisine sahip olmaktan (örn., `jobname`) komutun tam olarak ne olduğunu ve ne anlama geldiğini anlamaya geçmek için “dahili tabloları nasıl kontrol ettiğine” ilişkin daha ayrıntılı bir açıklama, daha önceki bir makalede bulunabilir ["TeX belirteci" nedir?](/latex/tr/derinlemesine-makaleler/53-what-is-a-tex-token.md) Burada, aşırı tekrar yapmaktan kaçınmaya çalışarak temel fikirleri özetleyeceğiz.

Bir benzetmeyle başlayalım. Diyelim ki bir kitap okuyorsunuz ve yabancı bir kelimeyle karşılaştınız: ne yaparsınız? Günümüzde bu neredeyse kesinlikle “Google’a sarılmak”tır ama daha eski bir yöntemi tercih ettiğinizi varsayalım: kelimeleri listeleyen ve anlam(lar)ını veren bir sözlüğe başvurursunuz. TeX'in buna benzer bir mekanizması vardır: TeX'in şu anda bildiği tüm komutları ve bu komutların “anlamını” listeleyen bir iç “sözlük”. “Anlam” derken, bunun hangi tür bir komut olduğunu kastediyoruz: ne işe yarar ve ayrıca TeX'in o komutu çalıştırmak için ihtiyaç duyabileceği başka bilgiler. Ayrıca “komut” teriminin kullanıcılar/TeX programcıları tarafından yazılan tüm TeX/LaTeX makrolarını ve [yüzlerce yerleşik ilkel komutu](/latex/tr/daha-fazla-konu/46-tex-primitives-listed-by-tex-engine.md).

Sözlük benzetmemize devam edelim. Biz, insan okuyucular olarak, bir kelimenin anlamını bulmamız gerektiğinde sözlüğün sunduğu alfabetik listeyi kullanarak sözlükte arama yaparız—ama elbette TeX tam olarak böyle çalışmaz. İlk örneğimize geri dönersek, `jobname` TeX kendi “sözlüğü” içinde `jobname`'in “anlamını” nasıl bulur—ve o “anlam” aslında TeX'e ne sağlar?

TeX'in bildiği tüm komutların içsel bir “alfabetik listesini” sunmak yerine biraz farklı bir şey yapar. TeX, bir komutun adında bulunan karakterlerin tüm dizisini, o komutu tanımlamak (temsil etmek) için kullanılacak tek bir tamsayıya dönüştürür. İçeride TeX, bilinen tüm komutların büyük bir “sözlüğünü” tutar ve bu sözlükte *tamsayıları* komut adlarından hesaplanan—dikkat edin, bu sözlük gerçek komut adlarını harf dizileri olarak saklamaz (bunlara *dizgiler*). TeX bu sözlüğü tüm yerleşik komutları (ilkelleri) için kullanır *ve* ayrıca kullanıcılar tarafından oluşturulan herhangi bir makronun (komutun) ayrıntılarını saklamak için de kullanır: makronuzun adı bir tamsayıya dönüştürülür ve bu tamsayı TeX'in sözlüğüne “kaydedilir”.

TeX, girişinizde kullanılan bir komutu her algıladığında ve o komut hakkında bir şeyler bilmesi gerektiğinde, komut adındaki karakterler dizisini “eşdeğer” bir tamsayıya dönüştürür ve bu tamsayıyı komutu kendi “büyük sözlüğü” içinde aramak için kullanır. Aranızdaki programcılar, TeX'in bir tür [hash işlevi](https://en.wikipedia.org/wiki/Hash_function) karma fonksiyonu

![Bir karma fonksiyonunun diyagramı](/files/d1dd6876177409b73d591d9ba3a83a5f85e97fc9)

### Grafik 6: Karakterlerden komut anlamına

Aşağıdaki grafik, TeX'in karakter dizisini eşdeğer bir tamsayıya dönüştürürken bir komutun geçirdiği yolculuğu gösterir; bu tamsayıya **curcs**denir ve bu tamsayıyı TeX'in “büyük sözlüğü” içinde komutun anlamını aramak için kullanır. Bu aramanın sonucu iki bilgi parçasıdır: adı verilen iki tamsayı, **curcmd** ve **curchr**TeX'in komutun tam olarak ne yaptığını ve daha sonra nasıl yürütüleceğini anlamak için kullanabileceği.

![TeX'in bir karakter dizisini komutun anlamını aramak için eşdeğer bir tamsayıya dönüştürmesi](/files/b94406392747bc18ca351e8fffde4735e09e54d5)

İçeride, TeX aşağıdaki adlı bir değişken tutar **curcs** (**cur**rent **c**ontrol **s**dizisi) TeX'in şu anda üzerinde çalıştığı komutun tamsayı değerini saklamak için kullanılır—yani, **curcs** komutun adından hesaplanan tamsayıyı saklar. Ancak hikâye bununla tamamen bitmez çünkü bir ayrıntı daha vardır: TeX az önce bir komut değil de bir karakter okudu/işledi ise, **curcs** son okunan şeyin bir karakter olduğunu, bir komut olmadığını hatırlamak için değeri 0'a ayarlar.

### Komutların TeX için anlamı

Şu kümesine bakarsak [TeX motorları tarafından sağlanan yerleşik komutlar](/latex/tr/daha-fazla-konu/46-tex-primitives-listed-by-tex-engine.md) bu komutların bazılarının yakından ilişkili olduğunu görebiliriz: benzer görevler yaparlar; örneğin, tüm TeX motorlarının makroları tanımlamak (oluşturmak) için kullandığı 4 ilkel komut vardır: `\def`, `\gdef`, `\edef`, `\xdef`. Bu 4 komutun hepsi makro tanımlar ama elbette her biri bunu biraz farklı yapar. Buna programlama açısından bakarsak: genel olarak aynı işi yapan 4 makro tanımlama komutumuz var ama her birinin kendine özgü davranışını karşılamak için aralarında seçim yapmamız gerekir.

Bunu ele almak için TeX her komuta iki değer atar ve TeX'in bir komutun “anlamı” olarak anladığı şey bu iki değerdir (rolü / ne yaptığı)—bu iki değer TeX'in içindedir, yazılımın derinliklerinde yer alır ve kullanıcılara açık olmayan “iç mekanizmanın” bir parçasıdır. Her TeX komutu, ister yerleşik bir ilkel olsun ister kullanıcı tanımlı bir komut olsun, davranışını TeX'e göre tanımlayan/sınıflandıran iki değer alır—TeX için ne anlama geldiğini belirleyen şey budur. TeX bir komutu kendi “büyük sözlüğü” ile aradığında şu iki önemli bilgiyi bulur:

* **komut kodu**: ne tür bir komut olduğunu gösteren bir tür “genel sınıflandırma”—örneğin bir “makro tanımlama” komutu (şunlardan biri: `\def`, `\gdef`, `\edef`, `\xdef`); bir “kutu oluşturma” komutu (şunlardan biri: `\hbox`, `\vbox` ya da `\vcenter`) ve TeX motorlarının desteklediği yüzlerce komut için benzerleri. Makrolara (kullanıcı tanımlı komutlara) da bir komut kodu atanır.
* **komut değiştiricisi**: Bu, TeX'e bir komut hakkında özel bilgi veren ek bilgidir. Makrolara (kullanıcı tanımlı komutlara) da bir komut değiştiricisi atanır—ancak makrolarda komut değiştiricisi, ilkellerde oynadığı rolden biraz farklı bir rol oynar (makrolarda komut değiştiricisi, makro tanımının bellekte nerede saklandığını gösterir).

Birlikte ele alındığında, komut kodu ve komut değiştiricisi her komutu benzersiz biçimde tanımlar. İşte Knuth'un özgün TeX yazılımında kullanılan makro tanımlama komutlarının komut kodları ve komut değiştiricileri—dikkat edin, diğer TeX motorları farklı değerler kullanabilir ama aynı ilkeyi birebir izlerler:

|           |                                                       |                                                               |
| --------- | ----------------------------------------------------- | ------------------------------------------------------------- |
| **Komut** | <p><strong>Komut</strong><br><strong>kod</strong></p> | <p><strong>Komut</strong><br><strong>değiştirici</strong></p> |
| `\def`    | 97                                                    | 0                                                             |
| `\gdef`   | 97                                                    | 1                                                             |
| `\edef`   | 97                                                    | 2                                                             |
| `\xdef`   | 97                                                    | 3                                                             |

### Özet: tüm bu değişkenlerin/değerlerin anlamını kavramak

Bu noktada, değerler, değişkenler, komut değerleri ve her türlü ayrıntı hakkında çok fazla bilgiyle dolup taşıyoruz—bu hızla kafa karıştırıcı olabilir, bu yüzden bildiklerimizi bir toparlayalım. TeX girişinizden bir şey okuduğunda bu ya bir karakterdir ya da bir komut. TeX girişten bir şey okuduğunda, az önce okuduğu (taradığı) şey hakkında bilgiyi saklaması gerekir:

* için **karakterlerini**: karakter kodunu ve kategori kodunu kaydetmesi gerekir. Ayrıca TeX'in bu değerleri kullanarak hesapladığı belirteç değerini oluşturup saklaması gerekir.
* için **komutlar**: TeX'in sayısal eşdeğeri bilmesi gerekir, **curcs**komut adından hesapladığı. Ayrıca TeX'in komutu kendi “sözlüğünde” arayarak elde ettiği “anlamı” da saklaması gerekebilir: komut kodu ve komut değiştiricisi. Bunun üstüne TeX, bu komutu temsil eden bir belirteç değeri de hesaplamak zorunda kalacaktır.

Evet, kafa karıştırıcı: ortalıkta çok sayıda değişken ve belirteç fikri dolaşıyor; gelin bunu anlamlandırmaya çalışalım.

İçeride, TeX'in en son okuduğu (ya da şu anda “üzerinde çalıştığı”) öğe hakkındaki bilgileri saklamak için dört genel değişken kullanılır—bu değişkenleri ayrıntılı biçimde ele almayacağız ama varlıklarını bilmek, gerçekte ne olduğunu anlamak için biraz daha arka plan sağlar:

* **curcmd**: (geçerli komut) bir tamsayı değişkenidir. Şunu saklamak için kullanılır *geçerli komut* değeri işlenen komut için *ya da* işlenenin mevcut *kategori kodu* özelliğini saklar;
* **curchr**: (geçerli karakter) bir tamsayı değişkenidir, ancak neyi sakladığı TeX'in girişinden az önce ne okuduğuna bağlıdır:
* **karakteri**: En son okunan öğe bir karakterse, **curchr** geçerli *karakter kodu*.
* **komut**: En son okunan öğe bir komutsa, **curchr** şunu saklar *komut değiştiricisi*: TeX'in ...yı desteklemek/açıklığa kavuşturmak için kullandığı ek bilgi **curcmd**—çünkü yukarıda gördüğümüz gibi, bazı komutlar aynı ... değerini paylaşır **curcmd**
* **curcs**: (geçerli denetim dizisi) bir komut adındaki karakter dizisinden hesaplanan değeri saklayan bir tamsayı değişkenidir. **curcs** = 0; eğer son okunan öğe bir denetim dizisinin adı (bir komut adı) değil de tek bir karakter ise;
* **curtok**: (geçerli belirteç) geçerli belirtecin değerini tutan bir tamsayı değişkenidir—bu belirteç ya bir komut belirteci ya da bir karakter belirtecidir.

Yukarıdaki bilgiler bir tablo olarak gösterilmiştir:

|                                           |                                                                                                                                                                                                                                              |                                                                                                                                                                                                                                                                    |
| ----------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **TeX içinde kullanılan genel değişken:** | **TeX bir karakteri taradığında:**                                                                                                                                                                                                           | **TeX bir komutu taradığında:**                                                                                                                                                                                                                                    |
| **curcmd**                                | Geçerli karakterin kategori kodunu saklar                                                                                                                                                                                                    | Şunu saklar *komut kodu*—geçerli komutun “türünü” belirler                                                                                                                                                                                                         |
| **curchr**                                | Geçerli karakterin karakter kodunu saklar                                                                                                                                                                                                    | Ek veriyi saklar (şu adla anılan *komut değiştiricisi*), bu da geçerli komut hakkında ek bilgi sağlar                                                                                                                                                              |
| **curcs**                                 | 0                                                                                                                                                                                                                                            | Komut adında bulunan karakter dizisini kullanarak (bir karma fonksiyonu aracılığıyla) hesaplanan sıfır olmayan pozitif bir tamsayı. TeX'in “sözlüğüne” erişmek, bir komutun geçerli anlamını aramak ve komut kodu ile komut değiştiricisini almak için kullanılır. |
| **curtok**                                | 8 bitlik TeX motorları için bir *karakter belirteci* şu formül kullanılarak hesaplanır: $$\text{curtok}=256\times \text{curcmd} + \text{curchr}$$ burada $$\text{curcmd}$$ karakterin kategori kodudur ve $$\text{curchr}$$ karakter kodudur | 8 bitlik TeX motorları için bir *komut belirteci* şu formül kullanılarak hesaplanır: $$\text{curtok}=4095 + \text{curcs}$$                                                                                                                                         |

### Geçerli belirteç hakkında ek notlar

Karakterler için mümkün olan en büyük belirteç değeri, en büyük kategori kodu (15) ve 8 bitlik TeX motorları için 255 olan en büyük karakter kodu kullanılarak elde edilir. Teoride (8 bitlik TeX motorları için), en büyük karakter belirteci değeri, $$\text{curtok}\_{\text{max}}$$şöyledir:

$$\text{curtok}\_{\text{max}}= 256\times 15 + 255 = 4095$$

“Teoride” diyoruz çünkü kategori kodu 15, TeX'in bir hata üretmesine neden olan “geçersiz bir karakteri” temsil etmek için kullanılır: geçersiz bir karakter TeX'in giriş tarama sürecini asla geçemez ve dolayısıyla hiçbir zaman bir karakter belirteci olamaz.

Komutlar için geçerli belirteç ($$\text{curtok}$$) şu şekilde hesaplanır $$\text{curtok}=4095 + \text{curcs}$$ ancak komutlar için $$\text{curcs}$$ şudur *her zaman* sıfırdan farklıdır, böylece TeX bir belirtecin neyi temsil ettiğini kolayca belirleyebilir:

* Eğer $$\text{curtok} > 4095$$ o zaman bu bir komut belirtecidir;
* Eğer $$\text{curtok} < 4095$$ bu bir karakter belirtecidir.

Aslında TeX, girişten okunan bir öğe hakkında bilmesi gereken tüm bilgileri “paketlemek” için basit bir tamsayı değeri olan belirteçleri kullanır.

## Bölüm 4

4\. Kısım'da, bir makronun `<parametre metni>` bölümü, ayırıcı belirteçlerin kullanımıyla oluşturulabilen bir “belirteç şablonu” olarak görev yapmak üzere.

[Bölüm 1](/latex/tr/daha-fazla-konu/19-how-tex-macros-actually-work-part-1.md) [Bölüm 2](/latex/tr/daha-fazla-konu/20-how-tex-macros-actually-work-part-2.md) [Bölüm 3](/latex/tr/daha-fazla-konu/21-how-tex-macros-actually-work-part-3.md) [Bölüm 4](/latex/tr/daha-fazla-konu/22-how-tex-macros-actually-work-part-4.md) [Bölüm 5](/latex/tr/daha-fazla-konu/23-how-tex-macros-actually-work-part-5.md) [Bölüm 6](/latex/tr/daha-fazla-konu/24-how-tex-macros-actually-work-part-6.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://overleaf-pro.ayaka.space/latex/tr/daha-fazla-konu/21-how-tex-macros-actually-work-part-3.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.
