> 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/36-pandora-s-hbox-using-luatex-to-lift-the-lid-of-tex-boxes.md).

# Pandora’nın \hbox’u: LuaTeX kullanarak TeX kutularının kapağını kaldırmak

## Giriş

Kutular ve glue, TeX’in dizgi modelinin ve yeteneklerinin temelini oluşturan iki temel kavramdır. Bir önceki yazıdaki giriş niteliğindeki malzeme üzerine inşa ederek, [Kutular ve Glue: LuaTeX Kullanarak Kısa ama Görsel Bir Giriş](/latex/tr/derinlemesine-makaleler/11-boxes-and-glue-a-brief-but-visual-introduction-using-luatex.md), bu bolca resimli makale kutuları ve glue’yu daha ayrıntılı inceliyor. Ayrıca yeni bir LuaTeX tabanlı [Overleaf projesi](https://www.overleaf.com/latex/examples/exploring-the-structure-of-tex-boxes-with-luatex/pwdrypmtdbgs) TeX kutularının derin iç yapısını keşfetmenizi sağlayan — ve davranışlarını gerçekten anlamanıza yardımcı olacak içgörüler sunan — bir proje sunuyoruz. Overleaf projesinin oluşturulması Patrick Gundlach’ın çalışmalarıyla büyük ölçüde kolaylaştı, bu yüzden ona [teşekkürlerimizi sunuyoruz](#credits-thanks-patrick).

## Neden LuaTeX seçilmeli?

Öncelikle, LuaTeX ile LuaLaTeX arasındaki farkı yeniden belirtmekte fayda var:

* LuaTeX, TeX tabanlı bir dizgi motoru çalıştırılabilir dosyasının adıdır;
* LuaLaTeX, LuaTeX motoruyla LaTeX makro paketinin kullanımını ifade eder.

Bu ayrım son derece önemlidir çünkü bu makalede, yalnızca LaTeX makro paketi tarafından sağlanan komutların özelliklerinden işlevselliğinden yararlanmıyoruz; bunun yerine LuaTeX motorunun kendi yerleşik yeteneklerinden faydalanıyoruz.

TeX motoru ile LaTeX makro paketi arasındaki farktan emin olmayan okuyucular, daha önce yayımladığımız makalelerimizden birini okumak isteyebilir, [İsimde Ne Var: TeX'in Birçok Türüne Rehber](/latex/tr/derinlemesine-makaleler/55-what-s-in-a-name-a-guide-to-the-many-flavours-of-tex.md), bu farkları bir miktar ayrıntıyla açıklayan. Aynı makale ayrıca “TeX”i bir programlama dili olarak ve TeX tabanlı dizgi motorlarının (örn. pdfTeX, XeTeX ve LuaTeX) yalnızca özellik ve işlevsellik bakımından değil, destekledikleri TeX dili “sürümü” bakımından da farklılık gösterdiğini tartışır. Bu bizi LuaTeX seçimimize getiriyor. TeX tabanlı bir programlama dilini desteklemenin yanı sıra LuaTeX, içine gömülü Lua betik diline de sahiptir — böylece basit ama çok güçlü, geleneksel bir programlama diline erişim sağlar. Lua ve LuaTeX’in yerleşik işlevselliği sayesinde, LuaTeX’in dizgi faaliyetlerini başka hiçbir TeX motorunun sunmadığı biçimlerde keşfedebilir ve denetleyebilirsiniz — buna TeX kutularının iç yapısını inceleme yeteneği de dahildir; bu nedenle LuaTeX, bu makale ve eşlik eden Overleaf projesi için ideal (ve tek) seçimdir.

### pdfTeX/XeTeX ve LuaTeX: resimlerle

Aşağıdaki *şemalar* pdfTeX/XeTeX ve LuaTeX’in tasarımı arasındaki önemli bir karşılaştırmayı vurgulamak için hazırlanmıştır. Elbette hem pdfTeX hem de XeTeX, kullanıcıların dizgi davranışını etkileyebilecek TeX kodu yazmasına izin verir; ancak bu TeX motorlarının içinde yer alan daha derin iç yapılar ve dizgi süreci sırasında oluşturulan düşük seviyeli veriler, çoğunlukla kullanıcı komutları ve makrolar tarafından erişilemez. Bu anlamda, bunlar *görece* LuaTeX ile karşılaştırıldığında kapalı sistemlerdir.

#### pdfTeX/XeTeX

![{{{alt}}}](/files/6df60d44e54c24c9fa32be33e3792cae2670ce24)

#### LuaTeX

LuaTeX, adı verilen yeni bir ilkel komut sunar `\directlua{...}` bu komut aracılığıyla yalnızca Lua diline tam erişim sağlamakla kalmayıp, C ve C++ gibi diller kullanarak eklentiler yazarak LuaTeX’in yeteneklerini genişletmenize de olanak tanıyan kod yazabilirsiniz. Windows’ta bu eklentilere *Dinamik Bağlantı Kitaplıkları* (.DLL); Linux’ta bunlar *Paylaşılan Nesne Kitaplıkları* (.so) olarak bilinir. Ancak LuaTeX’in gerçek gücü, LuaTeX’in iç işleyişine erişim sağlayan dev bir yerleşik Lua işlevleri kümesinden gelir—bu da TeX tabanlı dizgiyi son derece gelişmiş biçimde denetlemeyi ve programlamayı mümkün kılar. Bu tür işlevler kümesi API (Uygulama Programlama Arayüzü) olarak bilinir ve LuaTeX’in API’si aracılığıyla, Lua programlarını kullanarak onun TeX tabanlı dizgi motoru ve veri yapılarıyla iletişim kurarsınız.

![{{{alt}}}](/files/130c65bc195b3d89bdf3ba9ebcfc6c48f0ac4325)

LuaTeX’in `\directlua{...}` komutuyla, örneğin, diğer TeX motorlarında görünümden gizlenen düşük seviyeli iç TeX veri yapılarına erişebilirsiniz. Ayrıca, Lua betiklerini her türlü programlama hesabını, dize manipülasyonunu vb. gerçekleştirmek ve sonuçları TeX’e geri iletmek için kullanabilirsiniz: olasılıklar neredeyse sınırsızdır. Ancak bu makale, LuaTeX üzerine ayrıntılı bir açıklama veya öğretici olmayı amaçlamıyor — yine de bu hayret verici derecede güçlü TeX motorunun inanılmaz çok yönlülüğünü aktaran örnekler vermek cezbedicidir.

## Kutular ve glue: Kısa bir hatırlatma

Makalede tanıtıldığı gibi [Kutular ve Glue: LuaTeX Kullanarak Kısa ama Görsel Bir Giriş](https://www.overleaf.com/blog/511-boxes-and-glue-a-brief-but-visual-introduction-using-luatex) kutular ve glue, TeX’in dizgi yeteneklerinin temelini oluşturan iki temel kavramdır. Aşağıdaki diyagram, TeX’in yatay ve dikey kutu türlerinin davranışı hakkında çok kısa bir hatırlatma notu olarak sunulmuştur. Not: yatay kutular elbette Arapça veya İbranice gibi sağdan sola dillerde dizilmiş metin içerebilir; bu da kutu büyümesinin yönünün aşağıdaki diyagramda yatay kutu için gösterilenin tersine olabileceği anlamına gelir.

![{{{alt}}}](/files/7581be361e8f2b28a0738d493d7bbaf527e10722)

### Kutu oluşturmaya yönelik TeX ilkelleri

Günümüzde çoğu insan TeX belgelerini, kullanıcıları TeX’in düşük seviyeli dilinin büyük kısmından — sözde *ilkellerinden*— korumak üzere tasarlanmış komutlar sunan LaTeX makro paketini kullanarak hazırlar (TeX ilkelleriyle ilgili tartışma için makaleye bakın [İsimde Ne Var: TeX'in Birçok Türüne Rehber](/latex/tr/derinlemesine-makaleler/55-what-s-in-a-name-a-guide-to-the-many-flavours-of-tex.md) ). LaTeX makro derlemesi, kutu oluşturma ve depolama (kaydetme) için çeşitli makrolar sağlar; ancak tüm makro kodunu ayıklarsanız yalnızca 4 düşük seviyeli ilkel kutu-oluşturma komutu olduğunu görürsünüz:

Yatay listeler oluşturmak için:

* \hbox{...}

Dikey listeler oluşturmak ve yığmak için:

* \vbox{...}
* \vtop{...}
* \vcenter{...}

Bu kutu komutlarının hepsinin nasıl kullanılacağını açıklamayacağız çünkü web’de veya TeX/LaTeX kitaplarında bolca örnek ve öğretici bulunuyor — ancak kutuların TeX veri yapıları içinde nasıl temsil edildiğine ve saklandığına bakacağız.

### Glue: esnek boşluklandırma

Glue, özünde, TeX’in öğeleri yatay veya dikey olarak aralıklı yerleştirmek/konumlandırmak için kullandığı bir boşluk biçimidir. Bir TeX kullanıcısı olarak, TeX’e sabit boyutlu glue eklemesini söyleyebiliriz ya da gerektiğinde uzayıp kısalabilen, esnek bir glue kullanabiliriz. Yatay boşluk için glue oluşturan TeX komutlarından biri `\hskip` şeklindedir

`**\hskip** <doğal genişlik> **plus** <uzama miktarı> **minus** <kısalma miktarı>`

`**plus**` ve `**minus**` TeX anahtar sözcükleridir, ancak her glue için bunları kullanmanız gerekmez. Eğer `**plus**` ya da `**minus**` yoksa, karşılık gelen `<uzama miktarı>` ya da `<kısalma miktarı>` sıfır kabul edilir. Örneğin, `\hskip 3pt` uzama ya da kısalma bileşeni olmayan sabit genişlikte bir glue ekler.

Şimdilik, `<uzama miktarı>` ve `<kısalma miktarı>` olarak düşünün *önerilerimizi* TeX’e, çünkü tam uzama veya kısalma miktarı TeX tarafından hesaplanacaktır.

Bu fikirleri açıklamak için, işte glue’yu bir yay olarak temsil eden bir diyagram.  `<doğal genişlik>` yayın gerilme (uzama) ya da sıkışma (kısalma) olmadığı zamanki uzunluğudur.  `<uzama miktarı>` ve `<kısalma miktarı>` yayın doğal uzunluğuna göre gösterilmiştir.

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

#### Bir \hbox örneği

Bir `\hbox{...}` yalnızca A, B, C ve D harflerini içeren ve bu kutunun 100pt (100 TeX noktası) genişliğinde olması gereken bir

```
\hbox to100pt{%
A\hskip4pt plus3pt minus 2pt B%
\hskip 0pt plus 2fil C%
\hskip 0pt plus 2fill D%
\hskip 0pt plus 3fill}
```

Ortaya çıkan kutu şöyle görünür (netlik için büyütülmüştür):

![{{{alt}}}](/files/87b30655d1ceb8e8d04030224ef679990eee328c)

Bu `\hbox` Üzerine, karakterlerin genişliğini (TeX’in onları gördüğü biçimde) göstermek için kırmızı kesikli kutular bindirilmiştir; bu, karakterlerin genişliğini (TeX’in onları gördüğü biçimde) gösterir. Dizgi amacıyla, karakterler küçük kutular olarak kabul edilir ve bu `\hbox`bu genişliği doldurmak için gereken glue miktarı

Sonuçta TeX’in A ile B arasındaki glue’yu esnetmediği ya da küçültmediği (4pt olarak ayarlı) ve B ile C arasında hiç glue olmadığı (0pt olarak ayarlı) ortaya çıkıyor. Ancak C ile D arasındaki glue ve D ile kutunun sonu arasındaki glue oldukça gerildi; çünkü bu glue’ların esneme bileşeni en esnek olanıydı — aslında bu glue’lar kutuyu doldurmak için gereken tüm gerilmeyi üstlendi.

## LuaTeX’e geri dönelim

Şimdiye kadar kutuları ve glue’yu inceledik ve LuaTeX’in pdfTeX ve XeTeX ile görünümden gizlenen iç TeX yapıları için erişim sağladığını gördük. Bunu daha açık hale getirmek için bir örneğin zamanı geldi; ancak önce TeX’in kutuları belleğinde nasıl sakladığını kısaca öğrenmemiz gerekiyor — bir benzetmeyle başlayacağız.

### TeX’in kutuları bellekte nasıl sakladığı: bir benzetme

Herhangi bir nedenle fiziksel bir kutuyu tanımlayan bir veri modeli oluşturmanız gerekseydi, bu tür bir açıklama için hangi verileri seçerdiniz? Benimseyebileceğiniz bir yaklaşım, bilgiyi iki parçaya ayırmaktır: fiziksel kutunun kendisiyle ilgili veriler ve kutunun içeriğinin bir listesini sağlayan veriler. Dolayısıyla basit modelimiz şöyle görünebilir:

1. Fiziksel kutu hakkında veri (“meta veri”):

* width
* yükseklik
* derinlik
* ağırlık
* renk
* tür (ahşap, plastik, karton)

3. Kutu içeriği hakkında veri: İçerdiği öğeleri tanımlayan bir liste türü — muhtemelen belirli bir sıraya göre listelenmemiş.

Ve bu, TeX’in kutuları saklama biçimiyle çok yakın bir benzetmedir.

### TeX’in kutuları bellekte nasıl sakladığı: hlists ve vlists

İçsel olarak TeX, hboxes ve vboxes’i sırasıyla temsil eden *hlistler* (yatay listeler) ve *vlistler* (dikey listeler) adlı “kapsayıcılar” oluşturur. Bu hlist/vlist nesneleri kutu hakkında bir “meta veri” koleksiyonu sağlar ve ayrıca kutunun gerçekten içerdiği nesneler listesinin erişimini sağlar — bu listeye *düğüm listesi*. Fiziksel bir kutunun aksine, nesneleri içine istediğiniz sırayla koyabilirsiniz; TeX için kutu içeriğinin sırası son derece önemlidir — bunlar dizgilenecek öğelerdir. Herhangi bir programlama veya bilgisayar bilimi geçmişiniz varsa, TeX kutusundaki nesnelerin, oluşturulma sıraları korunarak, sözde bir [çift bağlantılı liste](https://en.wikipedia.org/wiki/Doubly_linked_list)kullanılarak saklandığını öğrenince şaşırmayacaksınız. Bağlı listeleri daha fazla ayrıntılandırmayacağız çünkü web’de bolca öğretici, örnek ve açıklama var.

Düğümler ve düğüm listeleri kavramı, TeX’in nasıl çalıştığının temel bir yönüdür; ancak bu makalenin amacı için sadece kısa bir genel bakış vereceğiz. Düğümler, özünde bir tür “mini kapsayıcıdır” ve (LuaTeX 1.04 itibarıyla) yaklaşık 50 farklı düğüm türü vardır: LuaTeX’in dizgi için kullandığı iç veri türlerini ve bileşenleri yansıtır. Örneğin, şu öğeleri temsil eden düğümler vardır: glifler (“karakterlerden” kaynaklanan), glue, yatay/dikey çizgiler, cezalar, “whatsit”ler, kern’ler ve benzeri. Dizgilenmiş tüm materyal sonunda büyük bir düğüm listesinin parçası olur ve LuaTeX size bu iç veri yapılarına doğrudan erişim sağlar. LuaTeX ayrıca düğüm listeleri eklemenize, düzenlemenize, değiştiremenize veya oluşturmanıza da olanak tanır; böylece örneğin, hiçbir TeX kodu kullanmadan doğrudan Lua kodu içinde kutular oluşturabilirsiniz. Ancak bunun hakkında yazmak başka bir güne kalsın.

### Uygulamada \directlua{...} kullanımına basit bir örnek

Aşağıdaki örnek bir `\hbox` oluşturur ve bunu 0 numaralı kutu kaydına kaydeder. Sonra geleneksel TeX kodunu kullanarak kutunun genişliğini bildirir ve aynı bilgiyi ikinci bir yöntemle `\directlua{}`. Burada, TeX’in iç kutu depolama alanına erişen küçük bir Lua betiği çalıştırıyoruz ve kutunun genişliğini elde ediyoruz — elbette iki değer aynıdır: 2412092sp (sp=scaled point: 65536sp = 1 TeX noktası). Sonuç olarak, bu son derece basit örnekte TeX kodu ve Lua kodu, kutunun genişliğini elde etmek için aynı iç veri yapılarını inceler; ancak diğer motorlarda bulunmayan zengin bilgi ve denetim kapısını LuaTeX doğrudan erişim yolu aracılığıyla açar.

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

```latex
\documentclass{article}
\begin{document}
\setbox0=\hbox{A\hskip 5pt B\hskip 10pt C}
\fontsize{18}{22}\selectfont
\noindent TeX kodu kullanarak, 0 numaralı kutunun genişliği \number\wd0\relax \space sp\par
\noindent Lua’yı da kullanabilir ve aynı
bilgiyi almak için Lua\TeX’in işlevlerinden birini çağırabiliriz.\vskip10mm
\noindent Lua kodundan, 0 numaralı kutunun genişliği
\directlua{
local boxwidth = tex.box[0].width
tex.print(boxwidth.." sp")
} ki bu, elbette, TeX kodundan elde edilen değerin aynısıyla aynıdır.
\end{document}
```

## Her şeyi bir araya getirmek: Bir Overleaf projesi

İçsel olarak TeX’in kutuları, kutu hakkında “meta veri” saklayan ve kutunun oluşturulduğu bileşenler listesine erişim sağlayan hlist/vlist adı verilen “kapsayıcılar” olarak temsil ettiğini not ettik. LuaTeX kullanarak kutu “meta verisine” ve bir TeX kutusunda bulunan öğeler listesine erişebilirsiniz: glifler, glue, cezalar, diğer kutular vb. Lua betikleri kullanarak, TeX belleğinde duran bir kutuyu incelemek ve o kutunun içeriğini ayrıntılı olarak gösteren bir temsil çizmek mümkündür. Bir TeX kutusunun ve içeriğinin uygun bir gösterimi *düğüm grafikleri* ve biz de [Overleaf projesi](https://www.overleaf.com/latex/examples/exploring-the-structure-of-tex-boxes-with-luatex/pwdrypmtdbgs) Patrick Gundlach tarafından yazılmış mükemmel bir Lua betiğinden yararlanarak bunu yapan bir *özyinelemeli* hazırladık. Kutuları incelemek ve düğüm grafikleri oluşturmak için gereken ayrıntılı süreçleri anlatmayacağız — yalnızca TeX kutularını işleyen herhangi bir programın/betiğin

![{{{alt}}}](/files/766de27184fe7e88bea5ce3e8c25fcccee77970e)

### olması gerektiğini belirtmekle yetinelim

adlı tek bir komut uygular `\dobox{box command}`, örneğin:

```latex
\dobox{\hbox to100pt{%
A\hskip4pt plus3pt minus 2pt
B\hskip 0pt plus 2fil
C\hskip 0pt plus 2fill
D\hskip 0pt plus 3fill}}
```

Bu `\dobox{...}` komutunun bir dizi görevi vardır:

1. belgeniz içinde kutunuz için bire bir TeX kodunu dizgiler;
2. TeX kutusunun bir SVG grafiğini oluşturur — bunu bir web sayfasına gömebilirsiniz (bu blog yazısında yaptığımız gibi);
3. düğüm listesinin bir SVG grafiğini oluşturur — bunu da web sayfalarına gömebilirsiniz (bu blog yazısında yaptığımız gibi);
4. düğüm listesinin bir PDF grafiğini çıktılar ve bu daha sonra proje tarafından üretilen ana PDF belgesine içe aktarılır.

LuaTeX’in karmaşık TeX kutularını — örneğin şu anda oluşturulmakta olan sayfayı veya dizilmiş matematiksel ifadeleri — temsil etmek için saklaması gereken muazzam veri miktarı nedeniyle düğüm grafikleri çok hızlı bir şekilde son derece büyük hale gelebilir. Daha büyük düğüm listeleri için, içe aktarılan PDF grafiği belgenizin sayfa sınırları tarafından kırpılabilir — büyük bir düğüm grafiğini görüntülemek istiyorsanız, projenin bir ZIP dosyasını indirebilir ve ilgilendiğiniz PDF grafiğini çıkarabilirsiniz. Projenin ZIP dosyasını indirirken açılır seçenek listesinden “Input and Output Files” seçmeyi unutmayın:

![{{{alt}}}](/files/418337149b3d24d89680d99efe5f7f9a98667688)

### Overleaf projesinden grafikler: Kısa bir açıklama

Birkaç örnek göstermeden önce, Overleaf projesi tarafından üretilen grafikler hakkında birkaç gözlem yapmak faydalı olacaktır — makalede daha önce bahsettiğimiz aynı `\hbox` örneği kullanacağız. İşte bunun proje içindeki `\dobox{...}` komutuyla:

```latex
\dobox{\hbox to100pt{%
A\hskip4pt plus3pt minus 2pt
B\hskip 0pt plus 2fil
C\hskip 0pt plus 2fill
D\hskip 0pt plus 3fill}}
```

İşte `\hbox` TeX tarafından üretilmiş hali — netlik için kutu büyütülmüştür, ancak çerçeve Overleaf projesi tarafından üretilen grafiklerde yer alır.

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

İşte bir *açıklamalı* yukarıdaki kutuyu temsil eden düğüm listesinin SVG diyagramı — açıklamalar kutu “meta verisini” ve içerdiği nesne listesini vurgulamak için eklendi: bu açıklamalar Overleaf projesi tarafından üretilen grafiklerde bulunmaz.

[![{{{alt}}}](/files/63dab09c685e93af6fa0fdc187ee47f5ae8828e1)](https://www.filepicker.io/api/file/ZSwIylUR66eFYPMo0suX)

“Meta veri” bölümüne bakarsanız, bazı yabancı parametreler görebilirsiniz:

* `glue_set`
* `glue_sign`
* `glue_order`

Bu parametreler, TeX’in bu kutu içinde glue’nun ne kadar uzatılıp kısaltılması gerektiğini hesaplamak için kullandığı ayarlardır ve LuaTeX aracılığıyla kolayca elde edebileceğiniz, ancak diğer TeX motorlarıyla elde edemeyeceğiniz verilerin yalnızca bir örneğidir. Kutunun bileşenleri içinde yer alan glue düğümlerinin *korur* kutuyu oluşturmak için girdiğimiz özgün glue değerlerini. Bu çok önemlidir çünkü TeX şu komutları sağlar `\unhbox`, `\unvbox`, `\unhcopy`, `\unvcopy` kutunun içeriğini “kutudan çıkarıp” yeniden giriş akışına geri bırakır; böylece yeniden dizgi işlemlerine katılır. TeX kutuyu nihayet bir PDF veya DVI dosyasına çıktıladığında (gönderdiğinde) ancak o zaman `glue_set`, `glue_sign` ve `glue_order` kutunun içindeki herhangi bir glue’ya uygulanır — bileşenleri kutu içinde konumlandırmak için gereken gerçek uzatma veya kısaltma miktarını hesaplamak ve ardından uygun PDF verisi veya DVI opkodlarını üretmek için.

“Meta veri” içinde listelenen bir başka parametre `shift`: bu, TeX komutlarının uygulanması sonucunda oluşan kutu kaydırmasının değeridir:

* `\raise`, `\lower` (bir `\hbox`);
* `\moveleft`, `\moveright` (bir `\vbox`).

Örneğimizde, `shift` 0pt’dir çünkü `\hbox` kutuyu doğal konumundan kaydırmadık.

Bu [Overleaf projesi](https://www.overleaf.com/latex/examples/exploring-the-structure-of-tex-boxes-with-luatex/pwdrypmtdbgs) ayrıca düğüm grafiklerini PDF biçiminde çıktı verir: işte bir [PDF dosyası sürümünü](https://www.filepicker.io/api/file/bezigXESC2FSasvjoh8A) indirmek için bağlantı.

### Overleaf projesi bu grafikleri nasıl oluşturuyor?

Overleaf projesi, Overleaf sunucularına kurulmuş yazılım araçlarını ve yardımcı programları çalıştırma yeteneğinden yararlanır — bkz. [bu blog yazısı](/latex/tr/derinlemesine-makaleler/52-using-luatex-to-run-tools-and-utilities-installed-on-overleaf-s-servers.md) daha fazla ayrıntı ve örnek proje için. Bir TeX kutusunu temsil eden bir SVG grafik üretmek için, kutunun TeX kodu küçük bir dosyaya yazılır ve ardından pdfTeX ile dizgilenerek bir DVI dosyası oluşturulur — pdfTeX programının, birkaç satırlık Lua betiği kullanılarak LuaTeX tarafından çalıştırıldığını unutmayın. Bu DVI dosyası, Overleaf sunucularına kurulu TeX Live dağıtımıyla birlikte gelen `dvisvgm` yardımcı programı kullanılarak anında SVG’ye dönüştürülür. `dvisvgm` komut satırı seçeneğiyle çalıştırılır `-n` dizgilenmiş herhangi bir metnin çizgilere/eğrilere dönüştürülmesini sağlamak için; böylece SVG dosyasının doğru görüntülenmesi TeX yazı tiplerinin kurulu olmasına bağlı olmaz.

Düğüm grafiklerini oluşturmak için `hiviznodelist.lua` adlı bir Lua betiği kullanıyoruz; bu betik Patrick Gundlach’ın çalışmasına dayanıyor. Bu betik, sözde bir `.gv` (Graphviz) dosyası yazar; bu, içinde  `dot` dilinde tanımlanmış bir düğüm grafiği bulunan bir metin dosyasıdır.  `.gv` dosyası `dot` adlı bir yardımcı program tarafından işlenir ve bu program hem PDF hem de SVG dosya biçimlerinde bir düğüm diyagramı çıktılar.

### Proje örnekleri

Overleaf projesi kullanılarak üretilmiş SVG grafiklerine sahip bazı ek örnekler burada. Çok fazla metin içeren kutular (örneğin, bir \vbox içinde) veya karmaşık matematik ifadeleri, çok büyük düğüm grafikleri üretir — Overleaf projesini keşfediyorsanız, ilginizi çeken özellikleri göstermek için gereksiz yere karmaşık kutular kullanmamanız tavsiye edilir.

#### \vbox to 25pt{A}

Bu örnek, metni doğrudan bir `\vbox`: içine koymanın etkisini gösterir; dikkat edin, düğüm yapısı böyle basit bir kutu için bile oldukça karmaşıktır. Bu karmaşıklığın nedeni, doğrudan bir `\vbox` yerleştirilen metnin TeX’in satır sonlandırma işlemi yapmasına neden olmasıdır.  `\vbox` 345pt genişliğindedir: `\hsize` bu kutu oluşturulduğunda o zamanki değeri. Ayrıca “A” karakterinin de bir `hlist` içinde yer aldığını ve bu hlistin de 345 nokta genişliğinde olduğunu, ayrıca `\parfillskip` ve `\rightskip` glue’larının kutu içeriğinin sonunda bulunduğunu gözlemleyin. Bu ceza ve iki glue öğesi TeX’in satır sonlandırma etkinlikleri tarafından eklenir. Paragraf satırına ait `glue_set` paragraf satırı değeri (`hlist`) “A” harfini içeren satırın son derece büyük (322.500000) olduğunu görürsünüz: neden böyle? Çünkü paragraf satırı 345pt genişliğindedir ancak yalnızca bir `\parindent` ve “A” harfini içerir: kalan alanın `\parfillskip` glue’su tarafından doldurulması gerekir; bu glue satırdaki kalan alanı doldurmak için oldukça büyük bir mesafe boyunca esnemek zorundadır.

![{{{alt}}}](/files/68987ad9d3d37028c14fd3b2c5ac7a73678bd839)

[![{{{alt}}}](/files/efeb55e44c1b019a697f0c7cfcb4bd19673e98f1)](https://www.filepicker.io/api/file/pVtHsNGSQ4m09vBZuOpQ)

[PDF dosyasını indir](https://www.filepicker.io/api/file/nBS0uDs2QjqKCKljAm7r)

#### \vbox to 25pt{\hbox{A}}

Bu örneği bir öncekisiyle karşılaştırmak çok öğreticidir. Burada yalnızca düğüm grafiği çok daha küçük değildir, aynı zamanda `\vbox` genişliği yalnızca 7.50002pt’dir: `\hbox` içine sarıldığı `\vbox` TeX’in satır sonlandırma yapmasını tetiklemesini engeller — `\vbox`.

![{{{alt}}}](/files/157ee73c0e77b6977aefe1dccdf082d92b4b2596)

[![{{{alt}}}](/files/8cd39ade2e2bac655a87c6dfe6a40548a5cb3643)](https://www.filepicker.io/api/file/LHepknjnRGOVEdghW4qH)

[PDF dosyasını indir](https://www.filepicker.io/api/file/Yk3uCCQR5ao8Yd3TJCdE)

#### Basit matematik: \hbox{$$\displaystyle \int f(x) dx$$}, karmaşık kutu!

Bu örnek, son derece basit dizilmiş matematiğin bile ayrıntılı bir kutu yapısı oluşturduğunu gösterir: matematik dizmek *Web2C* TeX içinde karmaşık veri yapıları üretir!

![{{{alt}}}](/files/96242c675388843a6b20ccbee24c5b2fcf792c7e)

[![{{{alt}}}](/files/e8b1d50a1b6744236619da60d4b46bcb2f8522b0)](https://www.filepicker.io/api/file/oVFNNvCqT0eZP0qS2odk)

[PDF dosyasını indir](https://www.filepicker.io/api/file/D5TepsdaSdeYZvkuSEJt)

## Teşekkürler: Patrick’e teşekkürler!

Teşekkürlerimizi [Patrick Gundlach’a](https://twitter.com/patrickgundlach) Overleaf’e, Lua betiğinin değiştirilmiş bir sürümünü kullanma ve dağıtma izni vermiştir, `viznodelist.lua`, bu betik TeX kutularını işler ve (içinde `dot` dilinde) işlenerek düğüm grafiği çizilebilecek bir dosya çıktılar. Overleaf projesi adlı bir Lua betiği içerir `hiviznodelist.lua`— Patrick’in özgün kodunun yeniden adlandırılmış ve değiştirilmiş bir sürümü; bu sürüm [Github](http://gist.github.com/556247). Patrick, adlı açık kaynaklı LuaTeX tabanlı bir dizgi sistemi oluşturmuştur [speedata Publisher](https://speedata.github.io/publisher/index.html) ki bunu ücretsiz olarak indirebilir ve kullanabilirsiniz — ticari destek seçenekleri de mevcuttur.


---

# 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/36-pandora-s-hbox-using-luatex-to-lift-the-lid-of-tex-boxes.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.
