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

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

[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ş: Bu serinin amaçları

Bu makale serisinin iddialı bir amacı var: açıklamak *nasıl* TeX makrolarının (LaTeX komutları gibi) gerçekte nasıl çalıştığını—en temel düzeyde, gerçek TeX motoru yazılımının içinde. Güvenmek yerine *yalnızca* TeX'in çeşitli özelliklerini, uç durumlarını ve davranışlarını göstermek üzere tasarlanmış bir örnek makro paketine dayanmak yerine, TeX'in içinde ne olduğunu görmek için bakacağız *nasıl* ve *neden* makro programlama yöntemleri neden böyle çalışır.

Amacımıza ulaşmak için oldukça düşük düzeyli konuları tartışarak başlamamız gerekiyor ve başlangıçta bunlar belgelerinizi dizme göreviyle biraz uzak görünebilir. Umarım, daha derine indikten sonra daha iyi bir anlayış oluşturmanız için bir temel edinirsiniz; bu da sonunda size çok zaman kazandıracak ve belki de hayal kırıklığı düzeyini azaltacaktır.

### TeX programlama dili: Bu duyguyu biliyor musunuz?

TeX programlama dilini biraz gizemli olarak tanımlamak gereğinden fazla sert değildir, çünkü öyledir—en azından günümüzde kullanılan çoğu yaygın programlama dilinin standartlarına göre. TeX/LaTeX hakkında daha fazla şey öğrenme yolculuğunuza başladığınızda, özellikle de basit olmayan makrolar yazmak istiyorsanız, kategori kodları, belirteçler/belirteçleştirme ve komutların veya makroların “genişletilmesi” gibi kavramlarla hızla karşılaşırsınız. Bu kavram bombardımanı size oldukça yabancı gelebilir; başarıya giden yolunuzun TeX/LaTeX'in neredeyse anlaşılmaz hata iletileriyle her zaman kolaylaştırılmaması nedeniyle sizi şaşkın ve zaman zaman belki biraz hayal kırıklığına uğramış hissettirebilir.

## Peki, nereden başlarız? Kategori kodlarıyla.

TeX motorları, adı verilen bir yazılım sınıfına girer [derleyiciler](https://en.wikipedia.org/wiki/Compiler): bir dosyada yazılmış bir dosyayı girdi olarak alan programlar *kaynak* dili ve onu *derleyen* (dönüştüren) ve bir dosyada yazılmış çıktı dosyasına dönüştüren *hedef* dili. Daha özel olarak TeX, bir *belge derleyicisidir*. TeX motorları (derleyiciler) için girdi dosyası TeX dizgi dilinde yazılır ve hedef, [DVI](https://en.wikipedia.org/wiki/Device_independent_file_format) veya PDF gibi başka bir “dilde” yazılmış bir çıktı dosyasıdır—gerçi burada “dil” kavramımızı biraz esnek kullanıyoruz.

TeX dosyanızı yazmak için kullanılan kaynak ya da girdi “diline” daha yakından bakalım. Bir `.tex` dosyası, nihayetinde, satır sonu karakterleri de dâhil olmak üzere tek uzun bir karakter dizisidir: dizilmek üzere ayrılmış metnin arasına serpiştirilmiş `\`, `}`, `$`, `[` ve görünüşte neredeyse sonsuz çeşitlilikte birleşimlerde görünebilecek her türlü karakterden oluşur. TeX/LaTeX kullanmayan biri, tipik bir `.tex` dosyasına bakıp onu, görünür bir dosya yapısı çok az olan ya da hiç olmayan, oldukça kafa karıştırıcı bir karakter yığını olarak algıladığı için mazur görülebilir. LaTeX makro paketi, bir .tex girdi dosyasına bazı temel yapıları “dayatma” konusunda kuşkusuz bir ölçüde yardımcı olur. Ancak, `\begin{document}` ve `\end{document}` arasında, oraya ne koyulacağı belge yazarına bağlıdır. Eğer `.tex` Knuth'un özgün Plain TeX makro paketi kullanılarak yazılmış dosyalarına bakarsanız, belge yapısının neredeyse tamamen bulunmadığını görürsünüz.

Dolayısıyla, genel olarak bir TeX girdi dosyası, dizilecek içeriğin arasına serpiştirilmiş ve bu içeriğin dizilmesine rehberlik eden yönergelerden (komutlardan) oluşan, görünüşte rastgele bir karışım ve oldukça yapısız görünebilir. TeX'in tipik bir `.tex` girdi dosyasını nasıl anlamlandırması mümkün olur: gelen bu karakter yığınını dizgi motoru için uygulanabilir yönergelere ve dizilecek içeriğe nasıl süzer?

### Yığını süzmek: Kategori kodlarıyla tanışın

TeX hakkında hiçbir şey bilmeyen herhangi bir insan gözlemci, bir `.tex` dosyasına bakıp örneğin şu karakterleri tanıyabilir: `$` ve bunun bir para birimi işareti olduğunu bilebilir veya bir `&` görüp bunu ve işareti olarak tanımlayabilir. Bu gözlemci bir *anlamı* gördüğü her karakter için—o karakterin insan iletişimindeki rolüne dayanan bir anlam—çıkarımında bulunur. Ayrıca, örneğin şu karakterleri görebilir: `a`, `e`, `veya` ve bunların ünlü harf olarak sınıflandırıldığını, örneğin şu diğerlerinin ise `b`, `c` ya da `d` ünsüz olarak sınıflandırıldığını bilir. İnsanlar olarak, gördüğümüz her karaktere, iletişim kurabildiğimiz dillerde o karakterin üstlendiği role dayalı bir anlam atadığımız, belleğimizde bir tür yerleşik arama tablosuna sahibiz.

Bir `.tex` dosyasını işlemek için TeX yazılımının da girdinizdeki her karaktere bakması gerekir ve onun da bir *anlamı* “gördüğü” her bir karaktere ataması gerekir. Ancak TeX, bir girdi dosyasında bulunan tamsayılar (karakter kodları) dizisi olarak depolanan metni işleyen, yalnızca yazılım tabanlı bir makinedir. Bir makine olarak TeX'in, baktığı bir karakterin anlamını nasıl belirleyeceğini ve ardından onunla ne yapması gerektiğini söyleyen ilgili verilerle programlanması gerekir. TeX bunu nasıl başarır?

Yanıt, yalnızca TeX'e özgü kavramlardan biridir: *kategori kodları,* bunlardan 0 ile 15 arasında değişen 16 tane vardır. TeX açısından, bir `.tex` dosyasında görmeyi beklediği her karakterin sözde bir *kategori kodu* kendisine önceden atanmıştır. TeX yazılımının içinde, kategori kodunu listeleyen bir tür “arama tablosu” bulunur *şu anda* bir girdi .tex dosyasında TeX'in görebileceği her karaktere atanmıştır. TeX'in kategori kodlarını, *anlamı* TeX'in incelemek (taramak) zorunda olduğu girdi akışındaki her bir karaktere atayan kodlar olarak düşünmelisiniz.

Belgenizi dizmek için bir TeX motorunun her bir karakteri okuması (taraması) gerekir; ancak TeX'in ilk anda ilgilendiği şey gerçek karakterler (karakter kodları) değildir: Bir karakterin *kategori kodu* girdiyi tararken daha büyük öneme sahiptir. Bir karakterin *geçerli* kategori kodu *geçerli anlamını* o karakterin *TeX onu okuduğu anda*belirler: bu kategori kodu, TeX'in her karakteri nasıl ele alacağını/işleyeceğini belirler—neden “geçerli kategori kodu” ve “geçerli anlam” dediğimizi açıklayacağız. TeX, kategori kodları aracılığıyla gelen karakter yığınını süzerek dizilmek üzere olan karakterleri (içeriği) işlenecek yönergeleri oluşturan karakterlerden ayırt edebilir—*komutlar* TeX'in yürütmesi gerekenler.

Aşağıdaki tabloda, bu 16 kategori kodu listelenmektedir: her birinin ne anlama geldiği ve her kategoriye genellikle atanan karakter örnekleriyle birlikte.

| **Kategori kodu** | **Açıklama**                                                       | **Standart LATEX/TEX**                                            |
| ----------------- | ------------------------------------------------------------------ | ----------------------------------------------------------------- |
| 0                 | Kaçış karakteri—TEX'e bir komut aramaya başlamasını söyler         | `\`                                                               |
| 1                 | Bir grup başlat                                                    | {                                                                 |
| 2                 | Bir grubu sonlandır                                                | }                                                                 |
| 3                 | Matematik geçişi—matematik moduna girip çıkma                      | $                                                                 |
| 4                 | Hizalama sekmesi                                                   | &                                                                 |
| 5                 | Satır sonu                                                         | ASCII kodu 13 (`\r`)                                              |
| 6                 | Makro parametresi                                                  | #                                                                 |
| 7                 | Üst simge—matematik dizgilemede: `$y=x^2$` $$y=x^2$$               | ˆ                                                                 |
| 8                 | Alt simge—matematik dizgilemede: `$y=x_2$` $$y=x\_2$$              | \_                                                                |
| 9                 | Yoksayılan karakter                                                | ASCII 0 `<boş>`                                                   |
| 10                | Boşluk ayırıcı                                                     | ASCII kodları 32 (boşluk) ve 9 (sekme karakteri)                  |
| 11                | Harf                                                               | A...Z, a...z, (ve binlerce Unicode karakter)                      |
| 12                | Diğer                                                              | 0...9 ile birlikte ,.;?" ve daha birçokları                       |
| 13                | Etkin karakter                                                     | ˜ gibi tek karakterli makrolar oluşturmak için özel kategori kodu |
| 14                | Yorum karakteri—satır sonuna kadar onu izleyen her şeyi yoksay     | %                                                                 |
| 15                | Geçersiz karakter, .tex giriş dosyasında görünmesine izin verilmez | ASCII kodu 127 (`DEL`)                                            |

Kategori kodlarının kullanımı, TeX'in gelen karakter akışını süzmek ve girdinizi anlamlandırarak şunları belirlemek için temel mekanizmasıdır:

* dizilecek metni oluşturan karakterler;
* matematik olarak dizilmesi gereken içeriği sınırlayan karakterler;
* işlenecek veya eyleme geçirilecek komutların adları olan karakter dizileri;
* … ve diğer birçok dizgi işlemi.

Başlangıçta, her karakterin kategori kodunun (anlamının) bir tür sabit atama olduğunu düşünebilirsiniz: değiştirilemez ve TeX yazılımının iç temellerine kalıcı olarak yerleştirilmiştir; ancak durum böyle değildir. Belirtildiği gibi, TeX hangi kategori kodunun *şu anda* her karaktere atandığına ilişkin ayrıntıları depolamak için dahili bir arama tablosu tutar—bilerek *şu anda atanmış* diyoruz; çünkü herhangi bir karakterin (henüz okunmamış) kategori kodu, adı verilen ilkel (yerleşik) bir komut kullanılarak değiştirilebilir `\catcode`. Bu, önemli bir esneklik sağlar; çünkü isterseniz TeX'in daha sonra girdiden okuyacağı herhangi bir karakterin anlamını ele alma veya yorumlama biçimini tamamen değiştirebilir, gelişmiş dizgi uygulamaları için muazzam bir alan sunabilirsiniz.

Çoğunlukla işi halletmek için LaTeX kullanmakla ilgileniyorsanız, belki de gördüğünüz hata iletileri dışında kategori kodlarıyla doğrudan karşılaşmamış olabilirsiniz. Ancak emin olun, kategori kodları bir TeX motorunun işlemlerinin temel bileşenidir: LaTeX'in (ve LaTeX paketlerinin) belgenizin dizgi işini gerçekten yapmasını sağlar.

TeX motorunuz başlatıldığında (“[önyükleme yapar](https://en.wikipedia.org/wiki/Bootstrapping)”) karakterlerin kategori kodlarına yönelik bir dizi varsayılan atama kullanır; ancak `\catcode` komutu aracılığıyla bu varsayılanlar, temel LaTeX kodu (makrolar) ve/veya yüklediğiniz LaTeX paketleri—hatta kendi TeX kodunuz veya makrolarınız—tarafından değiştirilebilir. Bununla birlikte, zaman içinde ve gelenek/kullanım yoluyla, belirli kategori kodlarına atanan bazı karakterler “standart” olarak kabul edilmiştir ve belgelerinizin taşınabilir, meslektaşlarınız veya diğer kullanıcılarla kolayca paylaşılabilir olmasını istiyorsanız bu standartlara uyulması kesinlikle arzu edilir. Örneğin, `\` karakterine, bir TeX/LaTeX komutunun başlangıcını belirtmek için kategori kodu 0 atanır—bkz. [yukarıdaki tablo](#tbl-0).

### Girdinin okunması (taranması)

TeX, girdi dosyanızdan sonraki karakteri okuduğunda (taradığında) yaptığı ilk şey onun kategori koduna bakmaktır; bu nedenle TeX tipik bir girdi satırını okuduğunda ne olduğuna daha yakından bakalım.

Bir paragrafın herhangi bir yerinde şu metni içeren bir .tex dosyamız olduğunu varsayalım: `Hello World \jobname` Eğer `.tex` dosyasının içine bir [onaltılık düzenleyici](https://en.wikipedia.org/wiki/Hex_editor)kullanarak bakarsak, karakter dizisinin `Hello World \jobname` bizim `.tex` dosyamızdaki yalnızca bir dizi tamsayı, yani *karakter kodu*olduğunu ve aşağıdaki ekran görüntüsünde onaltılık dizi olarak gösterildiğini görürüz:

`48, 65, 6C, 6C, 6F, 20, 57, 6F, 72, 6C, 64, 20, 5C, 6A, 6F, 62, 6E, 61, 6D, 65, 20`

![Bir TeX dosyasındaki onaltılık karakter kodları](/files/5ff093d8c3807f465b44dee23b1ff70ae4789989)

Onaltılık tabandan (taban 16) onluk tabana (taban 10) dönüştürürsek, karakter kodları dizisi şöyledir:

![Bir TeX dosyasındaki onluk karakter kodları](/files/9d418d00193f5bd881d57cb1f666f093f77b7d82)

Ayrıca, TeX açısından her karakterin karşılık gelen bir kategori kodu olduğunu da biliyoruz; dolayısıyla, [yukarıdaki tablo](#tbl-0) temel alınarak aşağıdaki varsayılan kategori kodu atamalarının da (muhtemelen) kullanıldığını biliyoruz:

![TeX kategori kodları](/files/b1b53e0b60435666996beb7c58abae52ecceb7b8)

Böylece, TeX açısından girdi dosyasındaki her karakter *iki* iki sayısal değerle temsil edilir—karakter kodu ve kategori kodu:

![Karakter kodları ve karşılık gelen TeX kategori kodları](/files/2e846cc3d73a658b6d2e53fec76b90193fff5031)

Bu noktada yalnızca TeX'in dosyanızı işlemesindeki ilk aşamayı, yani tek tek karakterleri taramayı ele alıyoruz. Peki TeX bu karakter kodu ve kategori kodu çiftleriyle gerçekte ne yapar? TeX tek bir karakteri tarayıp karşılık gelen kategori koduna baktıktan sonra, gelen karakterleri “süzmek” için bu bilgiyi tam olarak nasıl kullanır?

## Bölüm 2

2\. bölümde TeX'in girdinizi nasıl okuduğuna daha yakından bakacağız: TeX'in “gözleri” olduğumuzu varsayarak, girdinize karakter karakter bakacağız.

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