> 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/47-tex-tables-how-tex-calculates-spanned-column-widths.md).

# TeX Tabloları: TeX kapsanan sütun genişliklerini nasıl hesaplar

## Bu makalenin amacı

Bu makalede, nasıl olduğunu inceliyoruz $$\mathrm\TeX$$ tablolar, birden çok sütunu kapsayan girdiler (örneğin, tablo başlıkları) içerdiğinde tablo sütun genişliklerini hesaplar (örneğin, $$\mathrm\TeX$$ ilkellerinden `\\omit` ve `\span`) kullanılarak). Temel bir [“referans” tabloyu](#reference-table) başlangıç noktası olarak alarak, kapsanan sütunlar oluşturmak amacıyla çeşitli girdileri değiştirerek bu referans tablodan türetilen bir dizi örnek oluşturuyoruz. Bu değişikliklerin etkisini inceleyerek, altta yatan algoritma hakkında bir anlayış geliştirmeye başlayabiliriz $$\mathrm\TeX$$ kapsanan sütunların genişliğini hesaplamak için kullanır.

### Kullanarak $$\mathrm\TeX$$ yapmaz $$\mathrm\LaTeX$$

İncelemek ve açıklamak için *nasıl* $$\mathrm\TeX$$ kapsanan sütunların genişliklerine karar verirken, harikulade $$\mathrm\LaTeX$$ tablo paketlerinden kaçınmak ve temel, düşük seviyeli (ilkel) tablo oluşturma komutlarına geri dönmek gerekir: özellikle, `\halign{...}`, `\span` ve `\\omit`. [Mevcut $$\mathrm\TeX$$/$$\mathrm\LaTeX$$ tablo paketleri](https://ctan.org/topic/table) elbette temel üretkenlik araçlarıdır ve kullanıcıların $$\mathrm\LaTeX$$kullanarak çok çeşitli tablo biçimli materyalleri hızla üretmelerini sağlayan son derece yararlı işlevler sunar. Bu paketler, $$\mathrm\TeX$$’nin düşük seviyeli davranışı etrafında oluşturulmuş temel “makro iskeletini” sağlar ve geliştiricileri, temel karmaşıklıkları ele alan çok hoş karşılanan soyutlamalar ve yalıtım katmanları sunar. Bu paketlerin birçoğu, karmaşık $$\mathrm\TeX$$ programlamanın gerçekten inanılmaz başarılarıdır: ham $$\mathrm\TeX$$!

tarafından kullanılan gerçek algoritma $$\mathrm\TeX$$ kapsanan sütun genişliklerini hesaplamak için kullanılır ve [$$\mathrm\TeX\text{book}$$](https://www.amazon.co.uk/TeXbook-Donald-E-Knuth/dp/0201134489) kitabın 245. sayfasında ve daha ayrıntılı olarak, $$\mathrm\TeX$$’nin kaynak kodunu içeren basılı kitabın 801. bölümünde (sayfa 336) açıklanmıştır [$$\mathrm\TeX\text{: The Program}$$](https://www.amazon.co.uk/Computers-Typesetting-Tex-Program-TEX/dp/0201134373). Ancak, birçok kişi için (ben de dahil) Knuth’un açıklamaları bazen oldukça yoğun ve özlüdür; zaman zaman ayrıntılı olarak takip edilmeleri zor olabilir: resimli örnekler her zaman çok yararlıdır.

### Evet, tablolar karmaşıktır

Kitabın 768. bölümünde (sayfa 322) [$$\mathrm\TeX\text{: The Program}$$](https://www.amazon.co.uk/Computers-Typesetting-Tex-Program-TEX/dp/0201134373), Knuth ilginç bir yorum yapar:

> “ `\halign` ve `\valign` çalıştığında bu bir tür mucizedir, çünkü $$\mathrm\TeX$$’nin denetim yapılarının pek çoğunu keser.”

Ek olarak, dört ciltlik kitap serisinin IV. Cildi [$$\mathrm\TeX\text{ in Practice}$$](https://www.amazon.co.uk/Tex-Practice-Set-Stephan-Bechtolsheim/dp/038797296X/ref=sr_1_11?s=books\&ie=UTF8\&qid=1504256043\&sr=1-11\&keywords=TeX+in+Practice) , içinde tablo oluşturmaya tam 180 sayfa (s. 199–379) ayırır $$\mathrm\TeX$$ şunun aracılığıyla `\halign` ve `\valign`.

Dolayısıyla, şunu söylemek güvenlidir: $$\mathrm\TeX$$ tablolar gerçekten de “oldukça çetrefillidir”.

### Sütunları kapsama: \omit, \span ve \multispan

Belirtildiği gibi, incelemek için $$\mathrm\TeX$$’nin sütun genişliği hesaplamalarında “ham” $$\mathrm\TeX$$kullanmamız gerekir; bunun anlamı, ilkel komutlar ile $$\text{Plain }\mathrm\TeX$$ adlı bir makronun birleşimidir `\multispan`. Bu komutları örnek tablolarımızı doğrudan göstermek için kullanmayacak olsak da (yani tüm $$\mathrm\TeX$$ kodunu tam olarak açıklamayacak olsak da), bunları açıklayan kısa bir not eklemeye değer:

* `\halign`: Tablo oluşturmak için kullanılan iki $$\mathrm\TeX$$ ilkelden (komuttan) biri. Diğeri `\valign` ancak o kadar yaygın kullanılmaz ve bu makalede ele alınmayacaktır.
* `\\omit`: Bir $$\mathrm\TeX$$ ilkel (komut), $$\mathrm\TeX$$ ’ye bir tablo girdisinin başlangıç şablonunu yok saymasını söyler.
* `\span`: Bir $$\mathrm\TeX$$ İki bitişik tablo girdisini birleştirmek için kullanılan ilkel (komut).
* `\multispan{n}`: Düz bir $$\mathrm\TeX$$ makro; `n` sütunu kapsamak için.

Özünde, sütunları kapsamak için $$\mathrm\TeX$$ uygun sayıdaki tablo başlangıç şablonunu yok sayar ve gereken sayıdaki tablo girdisini tek bir girdide birleştirir. `\multispan{n}` , `\\omit` ve `\span` sütunu kapsamak için gereken belirteç dizisine genişleyerek çalışır. `n` Örneğin, `\multispan{3}` şuna genişler: `\omit\span\omit\span\omit`.

## “Referans” tablomuzla tanışma

İşte referans tablomuz ve ardından yapısında kullanılan öğeleri açıklayan açıklamalı sürümü:

![{{{alt}}}](/files/3e5343ec028baf2ff2bf425e91d9361ab1ed278f)

Referans tablomuzu değiştirerek, çeşitli sütunları kapsayan girdiler ekledikçe tablonun genişliğine ve tek tek sütunların genişliğine ne olduğunu gözlemleyeceğiz. Bu referans tablo ham $$\mathrm\TeX$$ kullanılarak `\halign{...}` ilkesi ve tabloları dizmek için gereken birtakım özel makrolarla oluşturulmuştur—bu makroları tartışmayacağız, çünkü örnekleri ve açıklamaları anlamak için gerekli değiller.

Özelliklerini açıklamak için referans tablomuzun açıklamalı bir sürümü aşağıdadır:

![{{{alt}}}](/files/fdaed81e59ea6174a13634c7a88f8ee09784bace)

İlk örnek tablo grubumuzun ve başlangıç referans tablomuzun tümünde `\tabskip=0pt` ayarlandı; böylece $$\mathrm\TeX$$ sütunlarımız arasına hiç boşluk eklemez: aslında hepsi birbirine değmektedir. Bunu yapmamızın nedeni, başlangıçtaki tartışmayı ve sonraki hesaplamaları basitleştirmektir—makalenin ilerleyen kısımlarında sıfır olmayan `\tabskip` yapıştırıcısını, kapsanan sütun genişliklerinin hesaplanmasına etkisini incelemek için yeniden ekliyoruz.

Açıklamalarda belirtildiği üzere, tüm kapsamayan tablo girdilerinin başına (ilk satır hariç) az miktarda beyaz boşluk (5pt) ekledik. Bu 5pt beyaz boşluk, tüm kapsamayan girdilerin (ilk satır hariç) toplam genişliğinin bir parçasını oluşturur ve yalnızca tablonun biraz daha az sıkışık görünmesi için eklenmiştir.

### Tablo genişlikleri hakkında kısa bir not

Bu `\halign{...}` komutunun üç biçimi vardır:

* `\halign{...}`: tabloyu, $$\mathrm\TeX$$ girdilerin (ve `\tabskip` yapıştırıcının) boyutuna dayanarak hesapladığı genişliğe ayarla;
* `\halign to *width* {...}`: $$\mathrm\TeX$$ ’ye tabloyu belirtilen bir `*width*`;
* `\halign spread *amount*{...}`: hesaplanan genişliği `*amount*`.

Ne zaman $$\mathrm\TeX$$ kadar ayarla `\halign{...}` kullanarak bir tablo dizdiğinde, onu dizmek için gereken çeşitli hesaplamaları gerçekleştirmek üzere tablonun tamamını belleğe okumak zorundadır. Bu nedenle, genişliği `\halign to *width* {...}` kullanarak belirtmediyseniz, nihai genişliği $$\mathrm\TeX$$ işlemeyi (dizmeyi) bitirene kadar bilemezsiniz.  `\halign{...}` tarafından üretilen bir tablonun genişliğini elde etmenin bir yolu, önce tabloyu bir `\vbox{...}` içinde dizmektir (örneğin, `\setbox0=\vbox{\halign{...}}`) ve ardından örneğin `\the\wd0` kullanarak genişliği elde etmektir.

### Tablo girdilerinde otomatik satır sonlandırma yoktur

Şunu belirtmek önemlidir: $$\mathrm\TeX$$ , `\halign{...}` ile oluşturulan bir tabloyu dizdiğinde, tablo girdilerindeki metin otomatik olarak satır sonlandırmaya tabi tutulmaz: tablo girdileri *kısıtlı yatay modda*dizilir—tıpkı bir `\hbox`gibi. Satır sonlandırmayı etkinleştirmek için, bir tablo girdisinin metni bir `\vbox{...}` içine alınmalı ve bununla birlikte `\hsize` içinde uygun bir değer kullanılmalıdır `\vbox{...}`. Ancak, bir `\noalign{...}` komutu (bir $$\mathrm\TeX$$ içinde kullanılan ilkel) `\halign{...}` şuna tabidir: $$\mathrm\TeX$$’nin satır sonlandırması. Aslında ve adının da belirttiği gibi, `\noalign{...}` , $$\mathrm\TeX$$ ’nin `\halign{...}` dışına “kaçmasına” ve tablonun satırları arasına materyal yerleştirmesine olanak tanır—bu genellikle tablo satırları arasında yatay çizgiler oluşturmak için yapılır.

### İzin verilmez: \hbox{...} içinde \halign{...}

Şunu yapamazsınız: *doğrudan* bir `\halign{...}` bir `\hbox{...}`içinde dizmek.  `\hbox{\halign{...}}` kullanmaya çalışmak oldukça kafa karıştırıcı bir hata üretir:

```latex
! Missing } inserted.
<inserted text>
                }
<yeniden okunacak>
                   \halign
l.1 \hbox{\halign
```

#### Bu hatanın açıklaması

Saran `\hbox{...}` $$\mathrm\TeX$$ nedeniyle, *kısıtlı yatay modda*içindedir; ardından `\halign{...}` tespit eder; bu da bir *dikey mod* komutudur. Örneğin, `\halign{...}` bir paragraf içinde kullanırsanız, $$\mathrm\TeX$$ paragrafı sonlandırır, `\halign{...}` işler ve ardından paragrafın geri kalanıyla devam eder.

Bir `\hbox{...}`, ikinci `\halign{...}` içinde kullanıldığında, $$\mathrm\TeX$$ şunu tetikler: $$\mathrm\TeX$$ ’nin, geçerli grubun kapanmasını zorlamaya çalışarak dikey moda geri kaçmaya çalışmasını:`bir “! Missing }`” bildirir ve gruplama kullanımınızda hata yaptığınızı düşündüğü için bir hata verir. Sağ ayraç (`}`) $$\mathrm\TeX$$ kodunuzda eksik olmayabilir, ancak hata mesajı `\hbox{...}` ’nin “araya girmesinin” ve $$\mathrm\TeX$$ sorunu çözmek için uygun eylem tarzı konusunda “en iyi tahminini” yapmasının bir belirtisidir.

## Kapsanan sütunlara sahip tablo örnekleri

Aşağıdaki tablo grafikleri dizisi, tablo sütunlarını kapsamanın etkisini göstermek üzere çeşitli örnekler sunar: uzun tablo girdilerinin belirli sütunların genişliği ve dolayısıyla tablonun kendisinin genişliği üzerinde beklenmedik sonuçları olabileceğini gösterir. Ele alacağımız soru şudur: $$\mathrm\TeX$$ Belirli bir tablo girdisi birden fazla sütunu kapsıyor ancak “sığamayacak kadar genişse” ne yapar? Yukarıda belirtildiği gibi, $$\mathrm\TeX$$ sütun genişliklerini hesaplama sorununa gerçekten belirli bir algoritma uygular: aşağıdaki örnekler, bu algoritmanın işleyişi hakkında bir “his” geliştirmeye yardımcı olmak üzere tasarlanmıştır.

### Örnek tablo 1

Bu örnekte `\multispan{2}` komutunu, metni **Bir tablo başlığı**:

![{{{alt}}}](/files/122fd595cec7f85ebedb66f0aee88889c250bb8f)

#### olan bir girdiyle 1. ve 2. sütunları kapsamak için kullanıyoruz

* Bu tablonun genişliği, [referans tablonun](#reference-table): $$327.71722\text{pt}$$.
* 1\. ve 2. sütunları kapsayan girdinin genişliği $$81.04953\text{pt}$$ ve kapsadığı sütunlardaki girdilerin toplam genişliğinden küçüktür: $$52.56676\text{pt} + 57.06679\text{pt} = 109.63355\text{pt}$$

## Örnek tablo 2

Şurada olduğu gibi: [Örnek tablo 1](#example-table-1), bu örnekte de `\multispan{2}` komutunu 1. ve 2. sütunları kapsamak için kullanıyoruz, ancak burada metni **Biraz daha uzun bir tablo başlığı**.

![{{{alt}}}](/files/85c6fdfc9ab71cbf81a267bf2977152ad0c81a37)

#### olan bir girdiyle 1. ve 2. sütunları kapsamak için kullanıyoruz

olan daha uzun bir girdi kullanıyoruz. Bu örneği [referans tablonun](#reference-table) ile karşılaştırırsanız, şunları görebiliriz:

* Bu tablonun genişliği $$327.71722\text{pt}$$ ile $$374.37032\text{pt}$$değerinden arttı: toplam $$46.6531\text{pt}$$.
* 1\. ve 2. sütunları kapsayan girdinin genişliği ($$156.28664\text{pt}$$) kapsadığı sütunlardaki girdilerin toplam genişliğinden büyüktür: $$52.56676\text{pt} + 57.06679\text{pt} = 109.63355\text{pt}$$. Bu fark $$156.28664\text{pt}-109.63355\text{pt} = 46.6531\text{pt}$$ olup, tablo genişliğinin arttığı miktarla aynıdır.
* $$\mathrm\TeX$$ gerekli ek alanı sağlamak için 2. sütunun genişliğini ayarlamıştır. Daha sonra, $$\mathrm\TeX$$ 2. sütunun ne kadar artması gerektiğini nasıl hesapladığını göreceğiz.
* 1\. sütun etkilenmemiştir: genişliği, 1. ve 2. sütunları kapsayan girdiden etkilenmemiştir.

### Örnek tablo 3

Bu örnekte `\multispan{3}` komutunu, metni [Örnek tablo 2](#example-table-2): **Biraz daha uzun bir tablo başlığı**.

![{{{alt}}}](/files/0546059a1f2f93982f26dc22351599d37e61b4aa)

#### olan bir girdiyle 1. ve 2. sütunları kapsamak için kullanıyoruz

* Bu tablonun genişliği, [referans tablonun](#reference-table): $$327.71722\text{pt}$$.
* ile aynı olan bir girdiyle 1. ila 3. sütunları kapsamak için kullanmak$$156.28664\text{pt}$$1. ila 3. sütunları kapsayan girdinin genişliği ( $$52.56676\text{pt} + 57.06679\text{pt} + 59.03899\text{pt} = 168.67254\text{pt}$$.
* ) kapsadığı üç sütundaki girdilerin toplam genişliğinden küçüktür:

1\. ila 3. sütunları kapsayan girdiden hiçbir sütun genişliği etkilenmemiştir.

### Bir örüntünün ortaya çıktığını görmeye başlıyor musunuz?

Örnek tablo 4 [Örnek tablo 3](#example-table-3)Şurada olduğu gibi: `\multispan{3}` , burada da **komutunu 1. ila 3. sütunları kapsamak için kullanıyoruz, fakat bu kez metni oldukça daha uzun olan bir girdiyle:**.

![{{{alt}}}](/files/a4c3f22a503c6a7b58e3c572420870c461b443c8)

#### olan bir girdiyle 1. ve 2. sütunları kapsamak için kullanıyoruz

* Çok uzağa uzanan, oldukça daha uzun bir tablo başlığı [referans tablonun](#reference-table)ile karşılaştırıldığında, bu tablonun genişliği $$327.71722\text{pt}$$ ile $$465.95685\text{pt}$$değerinden arttı: artış $$138.23963\text{pt}$$.
* 1\. ila 3. sütunları kapsayan girdinin genişliği $$306.91216\text{pt}$$.
* Kapsanan üç sütundaki girdilerin toplam genişliği $$52.56676\text{pt} + 57.06679\text{pt} + 59.03899\text{pt} = 168.67254\text{pt}$$.
* Uzun kapsayan girdi ile 1. ila 3. sütunlardaki girdiler arasındaki genişlik farkı $$306.91216\text{pt}-168.67254\text{pt}=138.23962\text{pt}$$. Tablo genişliğinin arttığı miktarla aynı (4 ondalık basamağa kadar!).
* Yalnızca 3. sütunun genişliği artırılmıştır: ne 1. ne de 2. sütun etkilenmiştir.

#### Bir örüntü ortaya çıkıyor

Şuna bakarsak: [Örnek tablo 2](#example-table-2) ve [Bir örüntünün ortaya çıktığını görmeye başlıyor musunuz?](#example-table-4) , her iki durumda da **kapsamdaki son sütunun** sütunları kapsayan uzun girdiye yer açmak için genişliği artırılan sütun olduğunu görebiliriz:

* İçinde [Örnek tablo 2](#example-table-2): Uzun girdi 1. ve 2. sütunları kapsıyordu. 2. sütun “esnetildi”.
* İçinde [Bir örüntünün ortaya çıktığını görmeye başlıyor musunuz?](#example-table-4): Uzun girdi 1. ila 3. sütunları kapsıyordu. 3. sütun “esnetildi”.

#### 3. sütunun genişliği: Bir algoritma ortaya mı çıkıyor?

Aşağıdaki hesaplamalar, $$\mathrm\TeX$$ ’nin ne yaptığını daha net gösterir. Bildiklerimiz şunlardır:

* 1\. ila 3. sütunları kapsayan uzun girdinin genişliği $$306.91216\text{pt}$$.
* 1\. ve 2. sütunlardaki girdilerin toplam genişliği $$52.56676\text{pt} + 57.06679\text{pt} = 109.63355\text{pt}$$.

Bu değerler arasındaki fark nedir? $$306.91216\text{pt}-109.63355\text{pt} = 197.2786\text{pt}$$ Bu değer 3. sütun için kullanılan genişliktir: doğrudan $$\mathrm\TeX$$.

### tarafından kullanılan algoritmadan kaynaklanır

Örnek tablo 5 [Bir örüntünün ortaya çıktığını görmeye başlıyor musunuz?](#example-table-4): **komutunu 1. ila 3. sütunları kapsamak için kullanıyoruz, fakat bu kez metni oldukça daha uzun olan bir girdiyle:**&#x44;aha karmaşık bir örneğe geçmeden önce, bir “basit” örnek daha verelim. Bu tablo, `ile aynı uzun girdiyi içerir; ancak bu kez` \multispan{6} [referans tablonun](#reference-table) ($$327.71722\text{pt}$$komutunu kullanıyoruz; bu, o girdinin tablonun tamamını kapsamasına olanak tanır. Gördüğünüz gibi, ortaya çıkan tablo hâlâ$$306.91216\text{pt}$$ile aynı genişliktedir; bu da hiçbir sütunun bu çok uzun girdiden etkilenmediği anlamına gelir. Açıkça, bunun nedeni girdinin genişliğinin ( $$327.71722\text{pt}$$) kapsadığı tüm girdilerin toplam genişliğinden küçük olmasıdır:

![{{{alt}}}](/files/5d5cd4ad357c0f1530698d91abc8217248cddd02)

### ; yani tablonun genişliği.

Örnek tablo 6: Biraz daha karmaşık [Burada, her ikisi de 5. sütuna kadar uzanan iki farklı girdinin etkisini göstermek için üç örnek tablo dizisine (6(a)–6(c)) bakıyoruz.](#example-table-6a) ve [Örnek tablo 6(a)](#example-table-6b) Örnek tablo 6(b) [her biri, 5. sütuna kadar birkaç sütunu kapsayan tek bir girdi içeren bir tablo gösterir.](#example-table-6c) Örnek tablo 6(c) $$\mathrm\TeX$$.

#### Burada, her ikisi de 5. sütuna kadar uzanan iki farklı girdinin etkisini göstermek için üç örnek tablo dizisine (6(a)–6(c)) bakıyoruz.

![{{{alt}}}](/files/df07b0af4ab9427675234cce07affb1426d22b3f)

**olan bir girdiyle 1. ve 2. sütunları kapsamak için kullanıyoruz**

* Çok uzağa uzanan, oldukça daha uzun bir tablo başlığı [referans tablonun](#reference-table)ile karşılaştırıldığında, bu tablonun genişliği $$327.71722\text{pt}$$ ile $$371.11153\text{pt}$$değerinden arttı: artış $$43.39431\text{pt}$$.
* iki kapsayan girdiyi tek bir tabloda birleştirir ve şu soruyu sorar: 5. sütunun genişliğini gerçekte hangi girdi belirler ve neden? Yanıt bizi $$215.06683\text{pt}$$.
* tarafından kullanılan algoritmanın özüne götürür $$59.03899\text{pt} + 52.98344\text{pt} + 59.6501\text{pt} = 171.67253\text{pt}$$.
* 3\. ila 5. sütunları kapsayan girdinin genişliği $$215.06683\text{pt}-171.67253\text{pt}=43.3943\text{pt}$$3. ila 5. sütunlardaki girdilerin toplam genişliği

#### Örnek tablo 6(a)

![{{{alt}}}](/files/92a29118ee4ab6c9669fb9bdd7f0249968d9c2b9)

**olan bir girdiyle 1. ve 2. sütunları kapsamak için kullanıyoruz**

* Çok uzağa uzanan, oldukça daha uzun bir tablo başlığı [referans tablonun](#reference-table)ile karşılaştırıldığında, bu tablonun genişliği $$327.71722\text{pt}$$ ile $$353.3233\text{pt}$$değerinden arttı: artış $$25.60608\text{pt}$$.
* 3\. ila 5. sütunlarda kapsanan girdiler ile kapsayan girdinin genişliği arasındaki fark $$306.91216\text{pt}$$.
* : tablo genişliğinin arttığı tam miktar (4 ondalık basamağa kadar!). $$52.56676\text{pt} + 57.06679\text{pt} + 59.03899\text{pt} + 52.98344\text{pt} + 59.6501\text{pt} = 281.30608\text{pt}$$.
* 1\. ila 5. sütunları kapsayan girdinin genişliği $$306.91216\text{pt}-281.30608\text{pt}=25.60608\text{pt}$$: **note** 1. ila 5. sütunlardaki girdilerin toplam genişliği *1. ila 5. sütunlarda kapsanan girdiler ile kapsayan girdinin genişliği arasındaki fark* bu [daha az](#example-table-6a)değerinden küçüktür $$43.3943\text{pt}$$.

#### her biri, 5. sütuna kadar birkaç sütunu kapsayan tek bir girdi içeren bir tablo gösterir.

Örnek 6(a) [, ki bu](#example-table-6a) ve [Burada, örnek tablolardaki girdileri birleştiriyoruz](#example-table-6b) 6(a)

![{{{alt}}}](/files/cf88f6dcf5facce39dfd4db6233855d56dc84487)

**ve**

* Çok uzağa uzanan, oldukça daha uzun bir tablo başlığı [referans tablonun](#reference-table)ile karşılaştırıldığında, bu tablonun genişliği $$327.71722\text{pt}$$ ile $$371.11153\text{pt}$$değerinden arttı: artış $$43.39431\text{pt}$$6(b) [Burada, her ikisi de 5. sütuna kadar uzanan iki farklı girdinin etkisini göstermek için üç örnek tablo dizisine (6(a)–6(c)) bakıyoruz.](#example-table-6a).

#### tek bir tabloda: ne olur? $$\mathrm\TeX$$ Gözlem

. Bunun, $$\mathrm\TeX$$ile tamamen aynı olduğunu not ediyoruz

![{{{alt}}}](/files/318f36c83a8132df72888723efe995874b770c43)

Ne yapıyor $$25.60608\text{pt}$$?

![{{{alt}}}](/files/7a7db7227be1d41846f61b19b9c9448a9efb6017)

Sonuçlarını anlamak için $$43.3943\text{pt}$$’nin algoritması ve karar verme süreçlerinde, bu girdinin **tarafından kapsanan girdilerin ötesine uzandığını not ediyoruz; ancak bu girdi** kapsanan girdilerin daha da ötesine uzanır:$$43.3943\text{pt}$$kadar. Dolayısıyla bu girdi “yarışı kazanır” ve 5. sütunun genişliği bu iki değerin $$59.6501\text{pt} + 43.3943\text{pt} = 103.0444\text{pt}$$ en büyüğü

## kadar artırılır (

). 3. ila 5. sütunları kapsayan girdiye yer açmak için 5. sütunun genişliği artık $$\mathrm\TeX$$olur. Tam “olaylar dizisi” açıklamamız biraz basitleştirilmiştir, ancak sonuç tarif ettiğimiz gibidir. `\tabskip=0pt`Karmaşıklığı biraz geri getirmek `\tabskip` Tartışmalarımızın karmaşıklığını en aza indirmek için (şimdiye kadar),

### ilkelerini göstermek amacıyla nispeten basit örnekler kullandık

’nin algoritması; özellikle, $$\mathrm\TeX$$ ayarını yaptık. Pratikte, “gerçek dünyadaki” tablolar muhtemelen bir dizi sütunu kapsayan birçok girdi içerecek ve elbette `\tabskip`yapıştırıcısı için sıfır olmayan değerlere sahip olacaktır—şimdi yeniden ele alacağımız bir konu.

* \tabskip yapıştırıcısı ve kapsanan sütun genişlikleri
* Tablo tasarımı çoğunlukla sütunlar arasına beyaz boşluk eklenmesini gerektirir ve elbette,
* adlı ilkel bir komut aracılığıyla bu olanağa sahiptir

. Bu komut, sabit veya esnek yapıştırıcı (aralık) koymak için kullanılabilir:

![{{{alt}}}](/files/f0d29bc7bfd9e083bf16aff3ce68800d423b53a2)

### bir tablodan önce (yani, 1. sütunun solunda);

bir veya daha fazla sütun arasında; `\tabskip` tablodan sonra (yani, son sütunun sağında). $$\mathrm\TeX$$ Kendimize hatırlatmak için bir örnek verelim:

\tabskip yapıştırıcısı kapsanan sütun genişliklerini nasıl etkiler? `\tabskip` Sıfır olmayan

* sütunlar arasındaki yapıştırıcının varlığı, kapsayan girdilerin `\tabskip=0pt`.
* kapsamın son sütununun genişliğini artırmayı düşünmeden önce “emebileceği” ek alan sağlar. [referans tablonun](#reference-table) Bir sonraki örneğimizde, iki sütunu kapsamanın sonuçlarını karşılaştırmak için iki tablo kullanacağız. Tablolar arasındaki tek fark, `yapıştırıcısının kullanımıdır.` İlk örnek, hatırlarsanız `ayarını yapmış olan özgün “referans” tablomuzu kullanır` İkinci örnek,

değiştirilmiş bir sürümünü kullanır *(yukarıda açıklamalı olarak gösterilmiştir); bu sürümde* \tabskip=10pt *tablodan önce ve sonra ayarlanmıştır, fakat daha önemlisi, sütunlar arasında* [referans tablonun](#reference-table).

### \tabskip=20pt

ayarlanmıştır. [referans tablonun](#reference-table) değiştirilmiş [referans tablonun](#reference-table)referans tabloda iki kapsanan sütunun sütun genişlikleri (ve tablo genişliği) üzerinde etkisi yoktur; ancak**özgün**referans tabloda 2. sütunun (ve tablo genişliğinin) genişliğini etkilerler.

![{{{alt}}}](/files/b10f7dddde06793394cb5f23009cbffae51e4a0e)

### Özgün referans tablo: \tabskip=0pt

Burada, özgün**özgün**referans tablomuzu, özgün `\tabskip` referans tablomuzdan türetilmiş ikinci bir tabloyla birlikte gösteriyoruz; bu ikinci tabloda 1. ve 2. sütunları kapsayan “`20pt`Daha uzun bir tablo başlığını test et

![{{{alt}}}](/files/961315e651d2d8d28a8cd4a6d6efcfb849d6145f)

## ” girdisi vardır. Oldukça açık biçimde, diyagramdaki ikinci tablonun 2. sütunu ve dolayısıyla tablonun tamamı kapsanan sütunlardan etkilenmektedir. $$\mathrm\TeX$$Değiştirilmiş referans tablo: \tabskip=20pt

Burada, değiştirilmiş referans tablomuzu, değiştirilmiş referans tablomuzdan türetilmiş ve yine 1. ve 2. sütunları kapsayan “ $$\mathrm\TeX$$ ” girdisine sahip ikinci bir tabloyla birlikte gösteriyoruz. Oldukça açık biçimde, diyagramdaki ikinci tabloda ne 2. sütunun ne de tablonun genişliği kapsanan sütunlardan etkilenmektedir. Bu durumda, $$\mathrm\TeX$$ yapıştırıcısının ( **) sütunlar arasında bulunması, 1. ve 2. sütunları kapsayan girdideki metnin gerektirdiği alanı “emmesine” yardımcı olmuştur:** ’nin algoritmasının özü `\tabskip` Umarız, yukarıda sunulan örnek çeşitliliği, $$\mathrm\TeX$$ ’nin kapsayan girdilere yer açmak için ne yaptığı ve $$\mathrm\TeX$$gerekirse her kapsanan sütun aralığındaki son sütunun genişliğini nasıl ayarladığı konusunda bir “fikir” geliştirmeye yardımcı olmuştur. Kapsanan tek tek sütunlardaki girdilerin genişliğine ek olarak, sıfır olmayan yapıştırıcının varlığı, herhangi bir sütun genişliğini ayarlaması gerekip gerekmediğine karar verirken dikkate aldığı önemli bir faktördür. Hatırlanması gereken temel nokta, hedefinin uygun bir genişlik hesaplamak olduğudur **son sütun** kapsanan sütun aralıklarının her birinde.

### Son tablo örneği: kapsanan bir aralıktaki son sütunlar

Bu son örnekte, yeniden değiştirilmiş referans tablomuzu (ile `\tabskip` yukarıda tartışılan yapışkan değerleri) kullanarak, kurallar tarafından kapsanan çeşitli sütunlar içeren başka bir tablo türetiyoruz — kapsanmaları daha kolay görülsün diye kurallar kullandık.

İki tablo, üst tablodaki 5. sütundan önceki hiçbir sütunun kapsanan sütunlardan etkilenmediğini göstermek için dikkatlice hizalandı. Diyagramın solundaki daha koyu yeşil alan, her iki tablonun 1 ila 4. sütunlarının hâlâ tam olarak hizalı olduğunu gösteriyor. Sağda, yalnızca 5. ve 6. sütunların kapsanan girdilerden etkilendiğini gösteren daha açık yeşil gölgeli bir alan var.

Üst tabloda, kapsanmalar şu şekildedir:

* 1 ila 5. sütunlar: bir $$400\text{pt}$$ kural tarafından kapsanmış;
* 3 ila 5. sütunlar: bir $$200\text{pt}$$ kural tarafından kapsanmış;
* 4 ila 6. sütunlar: bir $$250\text{pt}$$ kural tarafından kapsanmış.

![{{{alt}}}](/files/aefeb30dfc159dd42344c6852b085cd8bd1dd252)

Bir kez daha, açıklama şudur: kapsanan bir sütun dizisi içinde yalnızca son sütunun genişliği ayarlanır (gerekirse): aradaki sütunlar etkilenmez ve burada bu, 1 ila 4. sütunlar demektir — ancak elbette, 1 ila 4. sütunların (ve aradaki `\tabskip` yapışkanların) genişliği, 5 ve 6. sütunların ayarlanmış genişlikleri hesaplanırken dikkate alınır.

### Bir ... üzerinden adım adım inceleme $$\mathrm\TeX$$Değiştirilmiş referans tablo: \tabskip=20pt

Bir *basitleştirilmiş* “$$\mathrm\TeX$$’in düşünce süreçlerinin” kapsanan girdilerdeki sütunların genişliklerini nasıl belirlediğine dair bir adım adım incelemeyle bitireceğiz. Bunu anlatmak $$\mathrm\TeX$$’in algoritmalarını anlatmak her zaman kolay değildir; bu yüzden olup biteni genel bir bakışla sunmak için bazı “basitleştirici sanatsal serbestlikler” kullanacağız. Tüm karmaşık ayrıntılarla ilgilenen okuyucular, basılı kitabın 801. Bölümüne (336. sayfa) başvurabilirler; $$\mathrm\TeX$$’nin kaynak kodunu içeren basılı kitabın 801. bölümünde (sayfa 336) açıklanmıştır [$$\mathrm\TeX\text{: The Program}$$](https://www.amazon.co.uk/Computers-Typesetting-Tex-Program-TEX/dp/0201134373).

Gerçek dünyadaki tablolar çoğu zaman `\span` primitive (örn., içinde $$\mathrm\LaTeX$$ paketler) tablonun içinde kapsanan sütunların birden çok örneğini oluşturmak için kullanılır. Bunu yönetmek için, veri yapıları (derinlerinde $$\mathrm\TeX$$) bilgileri (sözde *span düğümleri*) tutar; bunlar $$\mathrm\TeX$$ tablo girdileri/sütunları arasındaki bağlantılar (kapsamalar) hakkında bilgi verir. Açıkçası, $$\mathrm\TeX$$ algoritmalarını sistematik bir şekilde uygulamak zorundadır ve son hesaplamalarını yapmak için tüm tabloyu işlemesi gerekir — tüm sütun genişliklerini, tablonun toplam genişliğini ve gerekirse tabloda kullanılan esnek yapışkanların ne kadar esneme veya büzülme yapması gerektiğini belirlemek için. Şaşırtıcı değildir ki $$\mathrm\TeX$$ size, tablo genişliğinin son değerini, `\halign{...}` komutu tamamen işleyene kadar söyleyemez — gerçekten yapacak çok işi var!

Sütun genişliği hesaplamaları için başlangıç noktası 1. sütundur çünkü elbette, 1. sütunun solundan (ve *üzerine/arasına*) hiçbir şey yayılmaz. $$\mathrm\TeX$$ 1. sütunun genişliğini, en büyük *doğal genişliğe*sahip olan girdiyi belirleyerek hesaplamaya başlar. O maksimum genişliğe $$w\_1$$adını verelim ve 1. sütundan 2. sütuna uzanan girdiler varsa, o girdinin genişliğine $$w\_{12}$$ (1’den 2’ye genişlik) diyelim. Ayrıca, 1. ve 2. sütunlar arasındaki `\tabskip` yapışkanı $$t\_{1}$$olarak gösterelim — burada yalnızca bu *doğal genişliğe* yapışkanın `\tabskip` göz önünde bulundurduğumuzu ve şimdilik sahip olabileceği herhangi bir esneme ya da büzülme bileşenini yok saydığımızı not edin. Ayrıca, 2. sütundaki tüm kapsanmayan girdilerin maksimum doğal genişliği $$w\_2$$.

Burada dikkat edilmesi gereken kilit nokta, $$\mathrm\TeX$$ 2. sütunun genişliğini hesaplarken yalnızca kapsamanın *başladığı* ve *2. sütunda* bittiği girdileri dikkate almaya çalıştığıdır.  $$\mathrm\TeX$$ için kilit husus testtir $$\max(w\_{2}, w\_{12} - (w\_1+ t\_1))$$—1. ve 2. sütunları kapsayan birden çok giriş olabilir: bazıları dar (küçük $$w\_{12}$$), diğerleri çok geniş (büyük $$w\_{12}$$) olabilir; dolayısıyla $$\mathrm\TeX$$ en büyük etkiye sahip olanı arıyor (bu yüzden $$\max(\text{...})$$). Burada, $$w\_{12} -(w\_1+ t\_1)$$ değeri, 1. ve 2. sütunları kapsayan bir girdinin 1. sütundan 2. sütuna “taşma” miktarıdır: not edin ki $$\mathrm\TeX$$ 1. sütunun genişliğini kullandığını **ve** şu `\tabskip` referans tablomuzdan türetilmiş ikinci bir tabloyla birlikte gösteriyoruz; bu ikinci tabloda 1. ve 2. sütunları kapsayan “$$t\_{1}$$) 1 ve 2. sütunlar arasında. Bir kez $$\mathrm\TeX$$ 1’den 2’ye olan herhangi bir kapsamanın 2. sütunun genişliğini etkileyip etkilemediğini belirledikten sonra, belirlediği maksimum değere göre 2. sütunun genişliğini ayarlar (tanımlanan testi kullanarak). $$\mathrm\TeX$$ diğer tüm sütunlar boyunca ilerlemeye devam eder, benzer testler yapar.

Ve son olarak, tamlık açısından, burada $$\mathrm\TeX$$sütun genişliklerini hesaplamaya yönelik algoritmasının özünü aktarıyoruz (Knuth’un $$\mathrm\TeX$$):

Aşağıdaki $$w\_{ij}$$ şu sütunları kapsayan tüm girdilerin doğal genişliklerinin maksimumu olsun $$i$$ ile $$j$$, dâhil. Son sütun genişlikleri şu formülle tanımlanır

$$\begin{equation\*} w\_j=\max\_{1\leq i\leq j}\biggl(w\_{ij}-\sum\_{i\leq k< j}(t\_k+w\_k)\biggr) \end{equation\*}$$

burada $$t\_k$$ ise sütunlar arasındaki tabskip yapışkanının doğal genişliğidir $$k$$ ve $$k+1$$.

## Kolofon: Tabloyu SVG grafikleri olarak üretmek için Overleaf kullanımı

Bu makalede sunulan tüm $$\mathrm\TeX$$ tablolar, Overleaf platformunda üretilmiş Ölçeklenebilir Vektör Grafikleri (SVG) dosyalarıdır. Açıklamalar (oklar ve yeşil kutular), SVG grafiği Inkscape’te açılarak eklendi — ancak açıklama metninin $$\mathrm\TeX$$ tabloya eşlik eden ek metin olarak LaTeX’te dizildiğini not edin: Inkscape’te yalnızca oklar ve yeşil arka planlar eklendi. Bunun nasıl başarılmakta olduğunu merak ediyorsanız, okumaya devam edin.

Overleaf’in sunucuları $$\mathrm\TeX \text{ Live}$$ dağıtımını kullanır; bu dağıtım, $$\mathrm\TeX$$tabanlı dizgi motorlarına ek olarak, son derece yararlı çok sayıda $$\mathrm\TeX$$ilgili yazılım araçları ve yardımcı programları sağlar. Bunlardan biri [`dvisvgm`](https://dvisvgm.de) olup, adından da anlaşılacağı gibi, $$\mathrm\TeX$$’in geleneksel DVI (**D**e**V**evice **I**ndependent) çıktı dosyası biçimini SVG’ye dönüştürür. Çok sayıdaki [komut satırı seçeneği](https://dvisvgm.de/Manpage/) `dvisvgm` arasında, tüm metni`-n` ya da `--no-fonts`) seçeneği vardır; bu seçenek, tüm metni *yollara* dönüştürmesini söyler; yani SVG grafiklerindeki metin gerçek yazı tipleri ve glifler yerine çizgiler ve eğriler kullanılarak çizilir. Bu, ortaya çıkan SVG grafiğinin dosya boyutunu artırabilir; ancak SVG grafiklerinin son derece taşınabilir olmasını ve hemen her cihazda sorunsuz çalışmasını neredeyse garanti eder.

### Peki... nasıl yapıldı?

Bir [önceki makalede](https://www.overleaf.com/blog/510-using-luatex-to-run-tools-and-utilities-installed-on-overleafs-servers) Overleaf’in sunucularına kurulmuş çeşitli yazılım araçları ve yardımcı programları çalıştırmak için $$\text{Lua}\mathrm\TeX$$ nasıl kullanılabileceğini tartışmıştım—it son derece kolay ve kullanışlı bir tekniktir. Bu teknik, dizilmiş $$\mathrm\TeX$$ tabloların SVG grafiklerini üretmek için şu şekilde kullanıldı. Ana $$\mathrm\TeX$$ belge dosyasının içinden, her tabloyu dizmek için kullanılan kod (kullanılarak oluşturulan `\halign`) bir `.tex` dosyasına yazıldı. Bu, tablo kodunu benim `\beginscoop` ve `\endscoop`adını verdiğim bir çift komutun içine alarak gerçekleştirildi. İstenen sonuçları elde etmenin başka birçok yolu muhtemelen vardır ama işte kullandığım makro tanımları:

```latex
\def\cc{\catcode`\#=12\relax}
\long\def\scoop#1\endscoop{\global\fulltoks={#1}\egroup}
\def\beginscoop{\global\advance\numfigs by1\relax\bgroup\cc\scoop}
```

Bunları şu şekilde kullanırsınız:

```latex
\beginscoop
\halign{...}
\endscoop
```

Şuna dikkat edin ki, `\endscoop` belirteci yalnızca `\scoop` makro: $$\mathrm\TeX$$ parametresinin sınırlarını belirlemeye yarar; `\endscoop` belirteci ise etkili biçimde yok sayar, bu yüzden onu aslında tanımlamamıza gerek yok (örneğin, `\def\endscoop{...}`).

Bu $$\mathrm\TeX$$ içindeki kod `\halign{...}` bir `toks` register’ına kaydedilir `\fulltoks`. Karşılaştığım zorlayıcı bir nokta (ile $$\text{Lua}\mathrm\TeX$$) şuydu: yazılırken `#` karakterlerinin `\halign{...}` önsöz içindeki `##` iki katına çıkarılıp `.tex` dosyasına dönüştürülmesini engellemek gerekiyordu. Bunu önlemek için, `\catcode`için bir belirteç değeri oluşturur `#` karakterlerini geçici olarak 12’ye ayarlamam gerekti $$\mathrm\TeX$$ kodunu (belirteçleri) token register’ına kaydetmeden önce. `\fulltoks` içindeki belirteçleri

içindeki belirteçleri bir `\fulltoks` dosya olarak yazmak $$\mathrm\TeX$$ dosyası—çünkü $$\text{Lua}\mathrm\TeX$$ kullanıyordum *Web2C* bu, teşekkürler $$\text{Lua}\mathrm\TeX$$’in harika Lua API’si sayesinde `\writefile{...}` adında bir makro yazdım; bu makro, parametre olarak, belirteçlerini bir dosyaya yazdırmak istediğiniz bir token register’ının adını alır (örneğin, `\writefile{fulltoks}` ). `\writefile{...}` makrosu içinde, token register’ın metinsel temsilini almak için Lua API’sini kullandım: `\fulltoks` token register’ı:

```latex
\def\writefile#1{%
\directlua{
...
...
 local p=tex.toks["#1"]
...
...
}}
```

İşte Lua API’sinin biraz daha fazlasını gösteren bir ekran görüntüsü `\writefile{...}` komutuyla:

[![{{{alt}}}](/files/9b04ec699d8b2bb40c886d2352be812877866bd5)](https://www.filepicker.io/api/file/ngeDmgRStGWvG044RE1A)

Lua dili ve Overleaf tarafından sağlanan Lua API $$\text{Lua}\mathrm\TeX$$ çoğu zaman $$\mathrm\TeX$$ programlama görevlerini basitleştirebilir ve bu kullanışlı ve güçlü özellikler sayesinde $$\text{Lua}\mathrm\TeX$$ kullanıyorum — yaklaşık 2009’dan beri — ve bu gerçekten harika $$\mathrm\TeX$$ motorunun hâlâ büyük bir hayranıyım. Tamam,  $$\text{Lua}\mathrm\TeX$$ reklam şimdi sona eriyor.

Bu kadar kolay bir şekilde elde etmiş olduktan sonra $$\mathrm\TeX$$ içinde saklanan kod `\fulltoks` bir dosyaya, onu düzgün biçimde oluşturulmuş bir $$\mathrm\LaTeX$$ dosyasına dönüştürmek için bazı ek kodlarla birlikte yazılır. Sonraki adımlar şunlardır:

1. İşleyin `.tex` tablomuzu içeren dosyayı $$\text{pdf}\mathrm\LaTeX$$ ile (DVI kipinde) böylece tabloyu dizsin ve bir `.dvi` dosyası oluştursun `dvisvgm` işlemesi için. Evet, kullanabilirsiniz $$\text{Lua}\mathrm\TeX$$ çalıştırmak için $$\text{pdf}\mathrm\LaTeX$$—bir kez daha bir makalede tartışılan yöntemi kullandım [önceki makalede](/latex/tr/derinlemesine-makaleler/52-using-luatex-to-run-tools-and-utilities-installed-on-overleaf-s-servers.md).
2. Ve son olarak, çalıştırın `dvisvgm` dizilmiş `.dvi` tablonun SVG grafiğini oluşturmak için dosyayı işlemek üzere $$\mathrm\TeX$$ tablo.
3. Asıl SVG grafiklerini elde etmek için Overleaf’ten bir ZIP dosyası indirebilirsiniz — seçtiğinizden emin olarak **Girdi ve Çıktı Dosyaları** seçeneği.


---

# 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/47-tex-tables-how-tex-calculates-spanned-column-widths.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.
