> 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/14-how-do-tex-engines-typeset-tables.md).

# TeX motorları tabloları nasıl dizer

## TeX motorları tabloları nasıl dizer

## Giriş: Bu seri neleri kapsıyor?

Estetik açıdan hoş tablolar üretmek, ister görsel bir düzen aracı, ister LaTeX ya da HTML veya markdown gibi bir işaretleme dili kullanıyor olun, zaman alıcı bir görev olabilir. Özellikle LaTeX kullanıcıları için tabloları dizmek, muhtemelen “tablolar”ın en çok [tex.stackexchange'te en çok etiketlenen konulardan biri](https://tex.stackexchange.com/tags).

tex.stackexchange'teki yanıtlar ve örneklere ek olarak, LaTeX ile tablo dizimi konusunda mevcut desteğe üstünkörü bir bakış bile tabloyla ilgili çeşitli bilgi kaynaklarını ortaya çıkarır:

* Overleaf’in [yardım sayfaları](https://www.overleaf.com/learn/latex/tables) ve aşağıdaki gibi diğer siteler [learnlatex.org](https://www.learnlatex.org/en/lesson-08)
* Kapsamlı TeX Ağı olan CTAN, şundan fazla listeler: [70 TeX/LaTeX paketi](https://ctan.org/topic/table) tablo oluşturmaya ilişkin
* tam bir [LaTeX kullanarak tablo dizimi üzerine kitap](https://www.amazon.co.uk/Typesetting-Tables-LaTeX-Herbert-Voss/dp/1906860254)
* mükemmel bir [çevrimiçi LaTeX tablo oluşturucusu](https://www.tablesgenerator.com/latex_tables)

Şunun için basit bir Google araması: [LaTeX tabloları](https://www.google.com/search?q=latex+tables) yardım, tavsiye, örnek ve açıklama sunan birçok siteyi listeleyen çok sayıda sonuç verir.

### LaTeX değil, TeX

LaTeX kullanarak tablo dizimi üzerine mevcut literatür zenginliği düşünüldüğünde, onlar hakkında yazılacak başka bir şey var mı—daha fazla tablo örneği ve paket komutlarının sıralanması/gösterilmesi? Tablo dizimi konusuna, tablo diziminin temel ilkelerini ve kavramlarını ortaya çıkaran veya bunlara odaklanan bir şekilde yaklaşmak mümkün mü? Mümkün, ama LaTeX soğanının katmanlarını soymayı gerektiriyor…

Okuyuculara altta yatan *mekanik* TeX tabanlı tablo diziminin mekaniği hakkında arka plan bilgisi ve açıklamalar sunmayı amaçlayan bir makale serisi hazırlamaya karar verdik. Belirli LaTeX makroları/paketleri kullanarak tablo dizimine odaklanmak yerine, *temeldeki davranışı* TeX motorlarının davranışını inceleyeceğiz: LaTeX makro komutlarının üzerine inşa edildiği temelleri sağlayan düşük seviyeli dizim mekanizmasını keşfedeceğiz. Nihai amaç, TeX tabanlı tablo diziminin temel yöntemlerini ve algoritmalarını ortaya çıkarmak ve açıklamaktır; böylece okuyucuların/kullanıcıların tabloların neden böyle davrandığını daha iyi anlamalarına yardımcı olmaktır. Bu yaklaşımın, LaTeX makro yalıtımının koruyucu katmanlarını soymanın kaçınılmaz bir sonucu, kullanıcıların genellikle (ve memnuniyetle) LaTeX makro kodu katmanları aracılığıyla gizlendiği karmaşık düşük seviyeli ayrıntılara maruz kalmaktır.

Bu makaleleri araştırmak, yazmak ve resimlemek çok zaman aldı; bu nedenle, okuyucuları bilgilendirecek ve TeX diziminin bu karmaşık alanını daha iyi anlamalarına yardımcı olacak materyaller sağlayarak literatüre değerli bir katkı olmalarını umuyoruz. Bu makale serisinin *yapmaz* tartışmasına girmeyeceğini *estetik* tablo tasarımının—bu, öznel tercihlerle dolu bir konudur ve tartışmalarının başka yerde yapılması gerekir…

### TeX tablolarının mekaniğini keşfetmek: Bunu nasıl yapabilirsiniz?

Tablo dizimi gibi TeX motorlarının içinde gerçekleşen daha düşük seviyeli mekanizmaları ve süreçleri incelemek ve ardından bunlar hakkında yazmak için Overleaf, Knuth’un TeX motorunun Martin Rucket’in [Web2W süreci](https://w3-o.cs.hm.edu/users/ruckert/public_html/web2w/index.html).

Geleneksel olarak TeX'i derlemek, TeX Live içinde kullanılan ve TeX'in özgün Pascal kaynak kodunu C eşdeğerine dönüştürerek C kodu üreten Web2C adlı bir süreci içerir. Bu süreç, insanlar tarafından değil yalnızca C derleyicileri tarafından okunması amaçlanan C kodu üretir. Mekanik olarak üretilen C kodu *son derece* deney amaçlı olarak okunması veya değiştirilmesi zordur.

Buna karşılık Web2W, C kaynak kodu üretir (mevcut [burada](https://w3-o.cs.hm.edu/users/ruckert/public_html/web2w/ctex.c)) ve bu kod *büyüklük mertebeleri kadar* Web2C tarafından üretilen koddan daha okunabilirdir. Sonuç olarak, Web2W'nin C kaynak kodu öğrenme/deney amaçları için değiştirilmeye çok daha uygundur.

Web2W, TeX'in (“CTeX”) şu özellikte bir sürümünü üretir: *Web2C* Knuth'un özgün programına yakındır: “CTeX”, SyncTeX, komut satırı işleme ve Kpathsea aracılığıyla dosya arama gibi Web2C sürecinin getirdiği birçok değişiklik ve iyileştirmeyi içermez. Bu değerli iyileştirmelerden vazgeçseniz de ortaya çıkan (Web2W) C kodunda, TeX Pascal ile yazılmış olmasına rağmen, Knuth'un yayımlanmış TeX kaynak kodunu kullanarak gezinmek nispeten kolaydır.

* **Adlar hakkında bir not:** Kesin olarak söylemek gerekirse, “TeX” adı yalnızca Donald Knuth tarafından yazılan ve yayımlanan özgün yazılıma atıfta bulunmalıdır. Yazılımında yapılan her türlü değişiklik, ortaya çıkan TeX tabanlı dizim yazılımı için farklı bir ad kullanmalıdır. Burada, aslında hâlâ Knuth'un özgün yazılımı olan bir motor oluşturmak için Web2W sürecini kullandık. Ancak herhangi bir şüpheye yer bırakmamak için, Web2W kullanılarak oluşturulan belirli sürümü ifade etmek üzere “CTeX” terimini kullanacağız; ayrıca “TeX”i ya Knuth'un özgün motorunu belirtmek ya da Knuth'un TeX ilkelerine dayalı dizim dili için genel bir terim olarak kullanacağız. Kesin olarak doğru terminolojinin titiz uygulanması/kullanımındaki ara sıra meydana gelebilecek hatalarımızı okuyucuların affedeceğini umuyoruz: anlamın/niyetin bağlamdan anlaşılmasını umuyoruz.

CTeX'in hata ayıklama sürümü, [Eclipse IDE](https://www.eclipse.org/downloads/packages/)kullanılarak çalıştırıldı; bu, Knuth tarafından tablo dizimini desteklemek üzere tasarlanan düşük seviyeli ilkel (yerleşik) TeX komutlarını ve algoritmaları uygulayan C kodunun gerçek zamanlı işlenmesini gözlemlemeyi mümkün kıldı.

Aşağıdaki kısa (yaklaşık 90 saniye) video, CTeX motorunun şunun içinde çalıştığını gösterir: [Eclipse IDE](https://www.eclipse.org/downloads/packages/):

{% embed url="<https://videos.ctfassets.net/nrgyaltdicpt/7drdFwYR6h5xD88XnurDIH/36511f504755ab274f4da2e3f3fc1ce5/TeXtables.mp4>" %}

CTeX'e ek olarak, Knuth'un özgün yazılımında bulunmayan birkaç ek ilkele erişmek için e-TeX'i de derledik. CTeX ve e-TeX artık eski TeX tabanlı motorlar olsalar da, tablo diziminin mekaniğini incelemek için hâlâ uygun bir temel oluştururlar; çünkü bu temel ilkeler tüm TeX tabanlı dizim motorları için hâlâ geçerlidir.

### Tabloları incelemek için neden daha eski bir TeX motoru kullanılır?

İlk olarak, basılı kitap, [TeX:The Program](https://www.amazon.co.uk/Computers-Typesetting-TeX-Program-TEX/dp/0201134373), 30 yıldan uzun süre önce (1986) yayımlanmış olmasına rağmen TeX'in kaynak kodunu listeleyen ve açıklayan, TeX'in iç işleyişinin bulanık sularında hâlâ son derece kullanışlı bir rehberdir. Elbette TeX'in kaynak kodu belgelerini kendiniz de dizebilirsiniz; örneğin Overleaf projesine bakın: [TeX, e-TeX veya pdfTeX için kaynak kodu belgelerini dizme](https://www.overleaf.com/latex/examples/typeset-the-source-code-documentation-for-tex-e-tex-or-pdftex/qkgfgyspnhcv). TeX:The Program'ın 1986'daki yayımlanmasından bu yana pdfTeX, XeTeX ve LuaTeX dâhil olmak üzere yeni TeX motorları gelişti; bunların tümü, Knuth'un özgün yazılımında bulunmadıkları için TeX:The Program'da belgelenmeyen özellikler ve komutlar getirdi.

TeX'in tablo dizimi gibi birçok temel süreç için, TeX:The Program'da belgelenen kod, TeX'in kaynak kodu Pascal ile yazılmış olsa bile, çalışma temeli olarak hâlâ önemlidir. Ayrıca Knuth'un TeX'i, özellikle son derece yararlı [Web2W](https://w3-o.cs.hm.edu/users/ruckert/public_html/web2w/index.html) Martin Ruckert tarafından geliştirilen süreci aracılığıyla, nispeten kolay ve hızlı derlenir. Derlemenin kolaylığı/hızı, bu makale serisinde daha sonra kullanılan SVG grafikleri oluşturmak gibi basit yollarla TeX'i değiştirmeyi çok daha kullanışlı hâle getirir.

### TeX ile LaTeX arasındaki farkı anlamak

Birçok okuyucu LaTeX'in aslında *çalıştırılabilir* bir dizim programı değil, nihayetinde TeX adı verilen daha düşük seviyeli bir dizim/programlama dilinde yazılmış büyük bir komut koleksiyonu (*makrolar*) olduğunu zaten bilecektir. LaTeX kodunuz, yalnızca *TeX motoru*adı verilen çalıştırılabilir bir program tarafından işlendikten sonra dizilmiş çıktı üretir—LaTeX kodunuz (belgeniz) ile dizilmiş PDF arasında yer alan yazılım. Günümüzde kullanıcılar, LaTeX kodlarını dizmek için pdfTeX, XeTeX ve LuaTeX varyantları dâhil çeşitli TeX motorları arasından seçim yapabilirler.

TeX/LaTeX ekosistemine yeni katılanlar, karşılaştıkları araçlar için kullanılan gizemli görünümlü adların bolluğu karşısında sıklıkla ve anlaşılır biçimde şaşkına dönerler: TeX, LaTeX, pdfTeX, pdfLaTeX, XeTeX, XeLaTeX, LuaTeX ve LuaLaTeX. Siz de aynı şekilde hissediyorsanız, Overleaf makalesinde yardım bulabilirsiniz: [Bir İsimde Ne Var: TeX'in Çok Sayıdaki Çeşidine Rehber](/latex/tr/derinlemesine-makaleler/55-what-s-in-a-name-a-guide-to-the-many-flavours-of-tex.md) bu makale tüm bu terimlerin kökenini ve anlamını açıklar.

#### Lehçeler ve TeX ilkelleri

Her TeX motoru, adı verilen bir yerleşik komut kümesine sahiptir *ilkellerinden* bunlar topluca, her motora yerleşik olarak eklenen yetenekleri yansıtan, o motorun TeX dizim dilindeki “lehçesini” oluşturur. Burada TeX motorlarının yerleşik komutlarını tanımlamak için kullanılan “ilkel” terimi, bu komutların *yapmaz* temel veya basit olduğu anlamına gelmez; temel ve bölünemez oldukları, yani makroların aksine başka komutlardan oluşturulmadıkları anlamına gelir. Tüm TeX motorları geniş bir temel ilkel kümesini paylaşır, ancak bazıları o motora özgü ilkeller içerir; bu da TeX'in bir “lehçesi” kavramını ortaya çıkarır.

LaTeX belgenizi dizmek için hangi TeX motoru kullanılırsa kullanılsın, görevi belgenizi yazmak ve oluşturmak için kullanılan LaTeX komutları (yani makrolar) koleksiyonunu işlemek (“çalıştırmak”)tır. TeX motoru aslında LaTeX kodunuzu (makroları) *tekrar* motorun gerçek dizimi gerçekleştirmek için çalıştırabileceği, kendilerini oluşturan TeX motoru ilkel komutlarına “dönüştürür”. *zorunda* TeX motorlarıyla belgeleri dizmek için LaTeX komutları kullanmak zorunda değilsiniz— *yapabilirsiniz* belgelerinizi tamamen TeX ilkelleriyle, yani doğrudan düşük seviyeli *TeX programlama dilinde* oluşturmayı seçebilirsiniz; bu dil TeX motorlarına yerleşiktir. Ancak günümüz standartlarına göre TeX dili oldukça eski usuldür ve genellikle programlaması zor bir dil olarak kabul edilir—ayrıca dizim hedefinize ulaşmak için çok sayıda yerleşik ilkel gerektirebilir; bu da hataya açık ve potansiyel olarak tekrarlayıcı bir programlama görevi yaratır.

Doğrudan TeX dilinde yazmak veya aynı komut dizisini sürekli yeniden yazmak zorunda kalmamak için TeX motorları, adı verilen “kısayollar” oluşturmanıza olanak tanır *makrolar*. Makrolar oluşturarak, TeX dili ilkellerinin (veya başka makroların) potansiyel olarak uzun ve karmaşık dizilerini tek bir “üst seviye” komutta paketleyen kendi komutlarınızı tanımlarsınız. TeX programcıları, LaTeX'in sağladığı komutlar gibi, çok sayıda işlevi tek bir komut içinde kapsülleyen son derece gelişmiş makrolar yazabilir. LaTeX (veya [ConTeXt](https://wiki.contextgarden.net/Main_Page)) gibi makro paketlerini kullanarak belge yazarları, yazım ve dizime odaklanmalarını sağlamak üzere birçok sıkıcı ayrıntıdan (çoğunlukla) yalıtılır; TeX dilinin karmaşıklıkları ve incelikleriyle sürekli uğraşmak zorunda kalmazlar.

## Başlangıçta...

Knuth, matematik dizimi ve gelişmiş satır bölme için algoritmalar tasarlamanın yanı sıra TeX yazılımını tabloları dizecek şekilde programlama zorluğuyla karşı karşıya kaldı. Açıkça, herhangi bir tablo oluşturma algoritması kullanıcıların neredeyse sonsuz çeşitlilikte tablo düzeni oluşturma özgürlüğünü engelleyeceğinden, aşırı kısıtlayıcı olmamalıdır. Ayrıca tablo hücreleri; matematik, grafikler ve güzelce dizilmiş satırlara bölünmüş metin parçaları dâhil olmak üzere çok çeşitli içerikler barındırabilir—aslında TeX'in dizebildiği her şeyi. Bu esnekliği sağlamak, TeX'in tablo oluşturma algoritmalarının TeX'in dizim mekanizmasının diğer bölümleriyle el ele çalışmasını gerektirir.

Ancak TeX motorları, tablo oluşturma yeteneklerinin sağladığı esnekliğin bir bedelini talep eder: Yerleşik (ilkel) tablo dizim komutlarının düşük seviyeli davranışında çok sayıda incelik ve nüans bulunur; bunların sayısı 9'dur:

* **`\halign`**, **`\valign`**: temel tablo oluşturma komutları
* **`\tabskip`**: \halign sütunları veya \valign satırları arasına yerleştirilen esnek boşluk
* **`\cr`**: tablodaki tüm satırlar için zorunlu “satır sonu” sonlandırıcısı
* **`\noalign`**: \halign satırları veya \valign sütunları arasına malzeme ekler
* **`\everycr`**: \cr algılandıktan sonra okunacak komutlar (token yazmacı)
* **`\span`**: çift işlevli bir komut: \span, sütunlara veya satırlara yayılan hücreler oluşturur ya da tablo önsözündeki komutları genişletir (bunu ayrıntılı olarak ele alacağız)
* **`\omit`**: belirli bir hücre için şablonları atla
* **`\crcr`**: kullanıcılar gerekli bir \cr'yi unutursa hataları önlemek için makrolarda kullanılır

Tablo oluşturma yolculuğumuz boyunca bu komutlarla karşılaşacağız.

### Zorlukların uzak yankıları

Şunun içinde gömülü [TeX'in kaynak kodu](https://www.overleaf.com/latex/examples/typeset-the-source-code-documentation-for-tex-e-tex-or-pdftex/qkgfgyspnhcv) tablo dizimi için tasarlanmış düşük seviyeli \halign ve \valign komutlarını uygulama konusuna dair biraz göz korkutucu bir giriş yer alır:

> “\halign ve \valign her çalıştığında bu bir tür mucizedir, çünkü TeX'in çok sayıda denetim yapısını keserler. Bu nedenle mevcut sayfa muhtemelen yeni başlayan birinin bu programı okumaya başlaması için en iyi yer değildir; önce diğer her şeye hâkim olmak daha iyidir.”

Knuth şöyle devam eder:

> “\halign işlenirken, korkusuzca denetimi TeX'in geri kalanına bırakırız. Kritik noktalarda, küçük bir eylem gerçekleştirmek için bir hizalama yordamı devreye çağrılır, ancak çoğu zaman bu yordamlar sadece arka planda pusuya yatar. Bu, hipnoz sonrası telkine benzer.”

Bu yorumlardan, Knuth için bile TeX'in tablo dizimini uygulamanın “bir tür zorluk” olduğu sonucuna varmak makul görünmektedir—kullanıcıya denetim ve esneklik sağlarken aynı zamanda TeX'in otomatik tablo oluşturma algoritmalarının TeX'in temel dizim süreçleriyle iyi koordine edilmesini sağlamak.

Yazar, TeX'in tablo dizimi yeteneklerinin ardındaki kod ve algoritmaların karmaşıklığına, ama aynı zamanda nispeten az miktarda, her ne kadar yoğun olsa da, Pascal (veya C) kodunda bulunan sırf yetenek miktarına duyduğu hayranlığa kolayca tanıklık eder.


---

# 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/14-how-do-tex-engines-typeset-tables.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.
