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

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

[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)

## Giriş ve genel bakış

4\. Kısımda, TeX makrolarının temel özelliklerinden bazılarını, TeX makrolarının altında yatan mekanizmaya yakından baktığımız sonraki iki makale için hazırlık amacıyla gözden geçirdik: özel belirteç listeleri. Bu son iki makalede, düğüm listeleri olarak adlandırılan ve Knuth’un özgün TeX yazılımının özel olarak değiştirilmiş bir sürümü kullanılarak üretilen verilerden hazırlanan diyagramları kullanıyoruz; bu değişiklikler, normalde kullanıcıya erişilemeyen TeX’in iç veri yapısına erişmek için tasarlanmıştı. TeX’in iç makro işleme ve yürütme rutinlerine “bağlanarak”, TeX’in makro işleme davranışının daha ayrıntılı ve doğru bir tartışmasını mümkün kılan grafik veriler yazdırmak mümkündü. Overleaf, bu diyagramların okuyucuların TeX makrolarının gerçekte nasıl çalıştığını daha iyi anlamalarına yardımcı olmasını umuyor.

### Olası ek arka plan okuması

Overleaf, TeX belirteçleri ve TeX belirteç listeleri hakkında ek arka plan bilgisi sağlayan iki belirteçle ilgili makale yayınlamış durumda. Anlayışınızdaki olası boşlukları doldurmanız ve bu serinin 5. ve 6. Kısımlarından en iyi şekilde yararlanmanıza yardımcı olması için lütfen bunlara göz atmaya zaman ayırın.

* ["TeX belirteci" nedir?](/latex/tr/derinlemesine-makaleler/53-what-is-a-tex-token.md)
* [TeX belirteç listesi nedir?](/latex/tr/derinlemesine-makaleler/54-what-is-a-tex-token-list.md)

## Belirteç listeleri olarak makrolar

TeX bir makro oluşturma komutu tespit ettiğinde (`\def`, `\edef`, `\gdef` ya da `\xdef`) giriş akışı içinde, her iki bölümü de dönüştüren bir süreci başlatır `<parametre metni><yerine geçecek metin>` makromuzun tanımını tek bir uzun belirteç listesine dönüştürür — ancak bu, çok belirli bir belirteç listesi türüdür.

Makrolar için belirteç listeleri, TeX içinde kullanılan diğer belirteç listelerinden biraz farklıdır; çünkü yalnızca TeX’in kendi iç süreçlerinin oluşturup üretebildiği “özel” belirteç değerleri içerirler: bu özel belirteçler, .tex dosyanıza ekleyebileceğiniz herhangi bir komutla doğrudan oluşturulamaz. TeX, makro çağrınızı işlemeye yardımcı olmak için bu “özel” belirteç değerlerini oluşturur ve kullanır; aşağıda bunu inceleyip açıklayacağız.

### Belirteç listelerinin nasıl saklandığına dair kısa bir not: düğümler

Bir belirteç (tam sayı değerleri) listesini saklamak için TeX, [bağlı liste](https://en.wikipedia.org/wiki/Linked_list)adı verilen bir veri yapısı kullanır; TeX’in durumunda bu, sözde *düğümler* listesinden oluşur. Bir düğümü, bir veri öğeleri kümesini saklamak için kullanılabilen küçük bir bilgisayar bellek paketi olarak düşünebilirsiniz. Bir makroyu saklamak için bu düğümler zincir gibi birbirine bağlanır; burada her düğüm (zincirdeki halka) birkaç bilgi parçasını saklayabilir — buna bir belirteç değeri ve listedeki bir sonraki düğümün bellek adresi de dahildir. Daha fazla bilgi için şu makaleyi okuyabilirsiniz [TeX belirteç listesi nedir](/latex/tr/derinlemesine-makaleler/54-what-is-a-tex-token-list.md) ancak aşağıdaki diyagram, bir belirteç listesi olarak saklanan bir makronun temel özelliklerini özetlemektedir:

![Bağlı düğümlerden oluşan bir düğüm listesi olarak saklanan bir TeX makro belirteç listesinin diyagramı](/files/1358b6aef6a1add4e7be16641f99a675d3ff53eb)

### Hatırlatma: bir makro tanımının 4 kısmı

4\. Kısımda tartışıldığı gibi, herhangi bir makronun yapısı şu şekilde yazılabilir:

```
<TeX makro ilkesi><makro adı><parametre metni>{<yerine geçecek metin>}
```

burada:

* `<TeX makro ilkesi>` = bunlardan biri `\def`, `\edef`, `\gdef` ya da `\xdef`;
* `<makro adı>`= makronuzun adı, örneğin `\\foo`;
* `<parametre metni>` “null” olabilir (bulunmayabilir) ya da sınırlayıcı belirteçler ve makro parametre belirteçlerinden oluşan bir dize olabilir;
* `<yerine geçecek metin>` makronuzun gerçek gövdesidir: makroyu çağırdığınızda “yürütülen” bölüm.

**NOT**: (4. Kısımda da belirtildiği gibi) tartışma boyunca şunu varsayıyoruz ki `<makro adı>` sonunu belirtmek için bir ayırıcı olarak 10 kategori koduna sahip bir boşluk karakteriyle takip edilecektir. `<makro adı>`. Biz *açıkça göstermedik* bu boşluk karakterini metnimizde/tartışmamızda, ancak orada olduğunu varsayıyoruz. Tam olarak söylemek gerekirse, bunu aşağı yukarı şöyle göstermeliyiz:

```
<TeX makro ilkesi><makro adı><boşluk><parametre metni>{<yerine geçecek metin>}
```

Ancak, bir `<boşluk>` karakterini açıkça eklemeyi atlayacağız ve varlığını örtük olarak varsayacağız.

**NOT**: Karakterler `{` ve `}` *olmaz* makro belirteç listesinin bir parçası haline gelir: amaçları yalnızca metnin giriş tarayıcısına (belirteçleri oluşturan), `<yerine geçecek metin>` nerede başlayıp nerede bittiğini söylemektir.

TeX bir makro tanımladığında, bölümler `<parametre metni><yerine geçecek metin>` tek bir uzun, kesintisiz belirteç listesine dönüştürülür — bu listedeki toplam belirteç sayısı makronun karmaşıklığına bağlıdır. Gördüğümüz gibi, bölümünün belirli bir amacı vardır: TeX’in, gerçek makroyla kullanılacak argümanları (değerleri) oluşturan belirteçleri ayıklamak için kullandığı bir “belirteç şablonu” ya da “taslak” olarak davranmak; yani, içine beslenecek belirteçler `<yerine geçecek metin>`.

Bu fikirleri sağlamlaştırmak için bir örnek makro alalım, ancak sonraki diyagramların çok kalabalıklaşmaması için kısa tutalım:

```
\def\foo A#1\fake{123 #1}
```

Makromuz için, `\\foo`

* `<parametre metni>` = `A#1\fake`
* `<yerine geçecek metin>` = `123 #1`

Bu örnek basit bir makro olsa da, keşfetmemiz gereken tüm özellikleri içerir.

Belirtildiği gibi, TeX `<parametre metni><yerine geçecek metin>` birle tek uzun bir belirteç listesine dönüştürecek; bunu aşağıdaki diyagramda görebilirsiniz. Örneğimizde, `A#1\fake{123 #1}` ile oluşan belirteçler, bir belirteç listesinde (bağlı bir düğüm listesi olarak) saklanan ardışık bir belirteç dizisine dönüştürülmüştür.

## Gerçek bir makro belirteç listesini gösteren grafik

Aşağıdaki diyagram, makronun nasıl saklandığını gösterir `\def\foo A#1\fake{123 #1}` TeX motorunun içinden alınan gerçek verileri kullanır. Bu diyagram, makro çağrılarını yakalamak, TeX’in iç verilerini incelemek ve bunları, Graphviz adlı açık kaynaklı bir grafik programı kullanılarak işlenebilecek biçime aktarmak için ek kodla değiştirilmiş bir [Knuth’un TeX’inin özelleştirilmiş sürümü](/latex/tr/derinlemesine-makaleler/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.md#how-can-you-study-tex-tokens3f) kullanılarak oluşturulmuştur; bu sürüm, makro çağrılarını yakalamak, TeX’in iç verilerini incelemek ve bunları, [Graphviz](https://www.graphviz.org/).

Aşağıdaki grafiği şu biçimlerde indirebilirsiniz: [PDF dosyası](https://assets.ctfassets.net/nrgyaltdicpt/N6gT757eXCxRV3FtdPPga/7ce120dc05ed05962bb911ff1124734b/annotatednodelist-plain.pdf) (675 KB) veya [SVG dosyası](https://images.ctfassets.net/nrgyaltdicpt/4PkmtHDhO8KF892ZDWuLHP/2c9c8385c6948fd122b228c5c780a3a6/annotatednodelist-plain.svg) (1,8 MB).

![Açıklamalı bir TeX belirteç listesinin diyagramı](/files/8d16d7ced79f470ebd90c2d75d44bcbcf96404f5)

#### Düğümleri anlamak

Yukarıdaki diyagramda, her düğümün **sonraki düğüm** ve **geçerli düğüm**adı verilen iki veri öğesi içerdiğini göreceksiniz. Bunlar, TeX içindeki bellek konumlarını temsil eden yalnızca tam sayı değerleridir — diğer düğümlerin saklandığı konumları. Değerleri **sonraki düğüm** ve **geçerli düğüm** önemli değildir; yalnızca düğümlerin bir listede birbirine bağlanmasını sağlayan konumları (bellek adreslerini) saklarlar.

![Sonraki düğüm ve geçerli düğümün anlamı](/files/a726650aa2e29a32673963e8c6110782df6629a0)

#### Örneğe geri dönelim

Düğüm diyagramında, `A#1\fake{123 #1}` ile oluşan belirteç listesi, bu makalenin başında tanıtılan birkaç “özel belirteç” içerir. Ayrıca, makromuzu temsil eden düğüm listesi bir “özel ilk düğüm” ile başlar: bunların ne olduğunu ve ne yaptıklarını inceleyeceğiz.

Bir makro belirteç listesindeki ilk öğe (ve bazı diğer belirteç listesi türlerinde) bir belirteç değeri değil, makronun *başvuru sayısı* olarak adlandırılan bir veri öğesi saklar; bunu TeX, makronun kullanımını izlemek için kullanır.

![Başvuru sayısı düğümü, bir belirteç listesindeki ilk düğümdür](/files/65ebd886b3d773afb5890aca63b8448d5069b545)

şunun ilk belirteci `<parametre metni>` hemen ardından gelen düğümde saklanır: bunun `Bir` 11 kategori koduna sahip harfi temsil eden bir belirteç olduğunu görebilirsiniz. 2. ve 3. Kısımlardaki tartışmalardan, bir karakter belirtecinin şu kullanılarak hesaplandığını biliyoruz

$$\text{token value}=256\times \text{category code} + \text{character code}$$

ki bu da, harf için `Bir` 11 kategori koduna sahip olduğunda,

$$\text{token value}=256\times 11 + 65$$

düğümde gösterildiği gibi 2881 değerini verir.

#### \foo içinde kullanılan “komut” \fake

Makro tanımımız içinde `\def\foo A#1\fake{123 #1}` ayırıcılarından biri bir *tanımsız* komut `\fake` olup, bu, `<parametre metni>` bölümünün bir parçası olarak belirteç listesinde saklanır. Gördüğünüz gibi, genel makro belirteç listesi içinde `\fake` bir belirteçtir ve değeri `19491`—3. Kısımda tartışılan formül kullanılarak TeX tarafından hesaplanan bir tam sayı değeri. TeX `\\foo` çalıştırmaya çalıştığında `\fake` belirteç değerini `<parametre metni>` bölümünün sonunda bulmayı bekleyecektir. TeX *denemeyecek* komutunu çalıştırmaya `\fake` çünkü onun rolü yalnızca `<parametre metni>` “belirteç şablonu” içinde bir tür “noktalama işareti” sağlamaktır.

![Bir komut belirtecini makro ayırıcı olarak kullanmak](/files/7cc949a3a848e42555884e87a6cbca820626e21b)

#### Belirteç listesindeki özel belirteçler

**“eşleşme sonu” belirteci**

Bir makroyu çağırırken, TeX’in ilk görevi, kullanıcı tarafından yazıldığı gibi makroyu taramak ve kullanıcının bölümünde bulunan belirteçleri, bellekte depolanan şablon içinde bulunan belirteçlerle karşılaştırmaktır `<parametre metni>` bölümündeki `<parametre metni>` zamanında oluşturulmuş) bellekte saklanan şablon `<parametre metni><yerine geçecek metin>` oluşturulan tam tanımının, `<parametre metni>` *durur* tek bir uzun ardışık belirteç listesi olarak saklandığı için, TeX’in bu belirteç listesinde `<yerine geçecek metin>` *başladığında*ve nerede **olduğunu bilmesi gerekir. Bunu sağlamak için, TeX makroyu tanımlarken (belirteç listesini oluştururken),** belirteci olarak adlandırılan özel bir sonlandırıcı belirteci, `<parametre metni>`. The **olduğunu bilmesi gerekir. Bunu sağlamak için, TeX makroyu tanımlarken (belirteç listesini oluştururken),** belirteci kullanıcı komutlarından üretilemez; onu yalnızca TeX’in kendisi oluşturabilir, dolayısıyla TeX `<parametre metni>`.

![Bir TeX belirteç listesinde eşleşme sonu belirtecini gösterme](/files/22fc3bbdc92be4266032990a68f6e297e5144db4)

Burada, **olduğunu bilmesi gerekir. Bunu sağlamak için, TeX makroyu tanımlarken (belirteç listesini oluştururken),** sonrasında gelen ilk belirtecin `1` 12 kategori koduna sahip rakamı temsil eden bir belirteç olduğunu görebiliriz. Bunun böyle olması beklenir; çünkü `<yerine geçecek metin>` makromuz için `\\foo` şudur `123 #1`—yani, `1` (12 kategori koduyla) rakamını temsil eden belirteçle başlar.

2\. ve 3. Kısımlardaki tartışmalardan, bir karakter belirtecinin şu kullanılarak hesaplandığını biliyoruz

$$\text{token value}=256\times \text{category code} + \text{character code}$$

ki bu da, 12 kategori koduna sahip bir rakam için `1` olduğunda

$$\text{token value}=256\times 12 + 49$$

düğümde gösterildiği gibi 3121 belirteç değerini verir.

**“eşleşme parametresi” belirteçleri**

TeX makro tanımını sakladığında, içerideki herhangi bir parametre belirtecini (`#1`, `#2`… `#9`) içindekileri `<parametre metni>` adı verilen bir **eşleşme parametresi** belirtecine dönüştürür. Bu belirteçler, TeX’e, kullanıcıya ait makro çağrısı içinde, makronun argümanları olan belirteçleri aramaya başlaması gerektiğini söyler.

![Bir TeX belirteç listesinde eşleşme parametresi belirtecini gösterme](/files/1cb53e8ef8e182a3f1ab36933ad694bd7f79844d)

### Belirteç listesindeki özel belirteçler

#### “çıkış parametresi” belirteçleri

TeX her şeyi işledikten ve makroyu gerçekten çalıştırmaya (genişletmeye) hazır olduğunda, **çıkış parametresi** belirteçleri TeX’e, `<yerine geçecek metin>` içindeki konumları bildirir; burada, makro çağrıldığında kullanıcı tarafından sağlanan argümanları temsil eden belirteçleri beslemesi gerekir. Etkili olarak, “Bu konuma, kullanıcının n numaralı argümanını temsil eden belirteçleri yerleştir; burada n=1...9.”

İçinde `<yerine geçecek metin>` saklanan makro tanımı belirteç listesinin bölümünde **çıkış parametresi** karşılık gelen bir belirteç olacaktır `#1`, `#2`... `#9` orijinal tanımda bulunan her biri için.

![Bir TeX belirteç listesinde çıkış parametresi belirtecini gösterme](/files/021214ea6f87afd0364218bab778fd63cda52fb2)

Şu tanımımıza bakarsak `\\foo` (`\def\foo A#1\fake{123 #1}`), yalnızca 1 makro parametresi olduğunu görürüz (`#1`) yapılan atıf içeren girdiler `<parametre metni>` (`A#1\fake`) ve sonrasında yalnızca 1 makro parametresi (`#1`) `<yerine geçecek metin>` (`123 #1`bölümünde görünür: bunun sonucu olarak yalnızca 1 **çıkış parametresi** belirteci, `<yerine geçecek metin>`.

&#x20;şunları temsil eden düğüm listesinde şu hususlara dikkat edin `\\foo`’nin `<yerine geçecek metin>`:

* belirteci hemen önceki **çıkış parametresi** belirteci, bir boşluk karakterini temsil eder (kategori kodu 10, karakter kodu 32); çünkü `123` ve makro parametresi (`#1`) arasında bir boşluk vardır ve bu, `\\foo`;
* şu **çıkış parametresi** ilk tanımında **sonraki düğüm** listenin son belirtecidir: **çıkış parametresi** özel bir “boş” değerine sahiptir (“empty” yani “boş” anlamına gelir) ve listeyi sonlandırmak için kullanılır: `<yerine geçecek metin>` son düğümden sonra artık düğüm yoktur ve böylece makro tanımının sonu gelir.

## Bölüm 6

6\. Kısımda, makro genişletmesinin tam anlamını ve TeX’in, onları bir makronun içine beslemeden önce makro argümanlarını belirteçleştirmesinin sonuçlarını açıklamak ve incelemek için bazı ayrıntılı grafikler kullanıyoruz `<yerine geçecek metin>`.

[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/23-how-tex-macros-actually-work-part-5.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.
