> 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/ar/mqalat-mtamqh/15-how-do-tex-engines-typeset-tables-2.md).

# كيف تنضّد محركات TeX الجداول 2

## كيف تقوم محركات TeX بتنسيق الجداول 2

## تشير محركات TeX إلى الجداول بوصفها محاذاة

داخل [توثيق الشيفرة المصدرية لـTeX](https://www.overleaf.com/latex/examples/typeset-the-source-code-documentation-for-tex-e-tex-or-pdftex/qkgfgyspnhcv) لا يناقش كنوت قدرة TeX على «تنسيق الجداول»، بل يصف بدلاً من ذلك خوارزميات TeX لبناء ما يُسمّى *محاذاة*. إن تنسيق TeX للجداول هو، في الواقع، عملية محاذاة آلية للصناديق: ترتيب الصناديق (خلايا الجدول والصفوف والأعمدة) لتحقيق شبكة أو مصفوفة مستطيلة مرضية بصريًا—مع أنه، بطبيعة الحال، وبما أنه TeX فهناك *الكثير من* تفاصيل دقيقة في تلك العملية.

وينعكس مصطلح «المحاذاة» أيضًا في اسمي أمرَي تنسيق الجداول المدمجين في جميع محركات TeX:

* `\halign` (المحاذاة الأفقية)، و
* `\valign` (المحاذاة العمودية).

سنعرض كلا الأمرين طوال هذه السلسلة من المقالات، بدءًا بنظرة عامة أكثر رسمية على الصيغة/البنية الخاصة بـ `\halign` و `\valign` الأوامر لوضع الأساس لمقالات لاحقة متعمقة في هذه السلسلة.

### جداول TeX هي صناديق ومسافات

تحتوي خلايا الجدول الفردية عادةً على أنواع مختلفة من المحتوى مثل أسطر النص أو الرياضيات أو الرسوميات، ما ينتج مجموعة من خلايا الجدول ذات عروض أو ارتفاعات أو أعماق مختلفة من المواد المنسقة. وبطريقة ما، يحتاج TeX إلى العمل مع تلك الخلايا ذات أبعاد المحتوى المتباينة لبناء الجدول النهائي بحيث يكون لكل صف ارتفاع معين ولكل عمود عرض معيّن. يحتاج TeX إلى استنتاج القيم المناسبة لارتفاعات كل صف وعروض كل عمود من مجموعة خلايا الجدول ذات الأحجام المتغيرة.

غير أن TeX لا يمكنه معرفة الحجم الحقيقي لمحتوى كل خلية إلا بعد تنسيق ذلك المحتوى؛ وبالتالي، يعالج TeX الجدول بأكمله، منسّقًا كل خلية، للحصول على بيانات التحجيم اللازمة لإكمال تخطيط الجدول. ومن بيانات الحجم تلك، يستطيع TeX تحديد الارتفاع الصحيح لكل صف والعرض لكل عمود. وقد يصادف TeX أيضًا خلايا فارغة أو خلايا يريد المستخدم أن تمتد عبر عدة أعمدة أو عدة صفوف، وكل ذلك يجب على TeX أن يأخذه بعناية في حساباته. وبعد «ترشيح» هذه المجموعة المتباينة من بيانات أحجام الخلايا (الصناديق)، عندها فقط يصبح TeX قادرًا على تحديد القيم النهائية لعروض الأعمدة في `\halign`، أو ارتفاعات الصفوف في `\valign` ويستخدم تلك القيم في المراحل النهائية من خوارزميات تخطيط الجدول الخاصة به.

عمليًا، و«في الخلفية»، يتألف تنسيق الجداول في TeX من عدة خطوات. وبصورة عامة، ينسق TeX أولًا نسخة «مسودة» أو «غير مكتملة» من الجدول بينما يلتقط ويعالج بيانات أحجام الخلايا—وبيانات أي `\span` أوامر مستخدمة في الجدول `\halign` عروض الأعمدة أو `\valign` ارتفاعات الصفوف وتحقيق التخطيط المكتمل—وكل ذلك سنستكشفه في هذه السلسلة من المقالات.

## \halign و\valign: طريقتان لبناء الجداول

توفّر جميع محركات TeX اثنين من *الدعم* الأوامر (البدائيات) المصممة لتنسيق الجداول (المحاذاة): `\halign` و `\valign`، والتي تتشارك العديد من الميزات الأساسية لكنها تختلف أيضًا في بعض الجوانب الجوهرية. الفرق الرئيسي بين `\halign` و `\valign` هو كيفية بنائهما للجداول الخاصة بهما: صفًا بصف أو عمودًا بعمود:

* `\halign`يُنسّق الجداول على أساس صفّي لإنشاء صفوف منفصلة تُرصّ عموديًا لتكوين أعمدة الجدول
* `\valign`ينسّق الجداول على أساس عمودٍ بعمود لإنشاء أعمدة منفصلة تُرصّ أفقيًا لتكوين صفوف الجدول

### \halign

يوضح المخطط التالي بناء جدول أُنشئ بواسطة `\halign`. يُنسَّق الجدول صفًا بصف مع رصّ الصفوف الفردية عموديًا. ومن بعض نتائج ذلك:

* تنشأ أعمدة الجدول من الرصّ العمودي لصفوف الجدول
* يمكن أن تحدث فواصل صفحات بين صفوف الجدول
* يمكن إدراج مواد غير جدوليّة بين الصفوف (عبر `\nolign`، والتي سننظر فيها لاحقًا)

![](/files/c03212d067f4aba5d31e5c4679f5077531ec4a21)

### \valign

يوضح المخطط التالي بناء جدول أُنشئ بواسطة `\valign`. يُنسَّق الجدول عمودًا بعمود مع رصّ الأعمدة الفردية أفقيًا (جنبًا إلى جنب). ومن بعض نتائج ذلك:

* تنشأ صفوف الجدول من الرصّ الأفقي لأعمدة الجدول
* يمكن أن تحدث فواصل أسطر بين أعمدة الجدول
* يمكن إدراج مواد غير جدوليّة بين الأعمدة (عبر `\noalign`، والتي سننظر فيها لاحقًا)

![](/files/8cf1772b60a4ded0339f375a79487cc5e059c491)

### أمثلة

المثال التالي يهدف إلى إبراز النهج الصفّي *مقابل*. والنهج العمودي في \halign و\valign.

```latex
\documentclass{article}
\begin{document}
\pagestyle{empty}
% حدود الصناديق المحكمة
\setlength{\fboxsep}{0pt}

إليك جدول \verb|\valign|:
\begingroup
% تتحكم \hsize في \valign
% عروض الأعمدة. كما أننا نضبط
% \parindent إلى قيمة أصغر
\hsize=30pt
\parindent=10pt
\fbox{\valign{
#&#&#\cr % المقدمة: ستُغطّى لاحقًا (بتفصيل كبير!)
A&B&C\cr % العمود الأول في جدول \valign هذا
D&E&F\cr
G&H&I\cr
}}
\endgroup

% ملاحظة: لأسباب ستُشرح لاحقًا
% يجب وضع \halign داخل \vbox
إليك جدول \verb|\halign|: \fbox{%
\vbox{\halign{
#&#&#\cr % المقدمة: ستُغطّى لاحقًا (بتفصيل كبير!)
A&B&C\cr % الصف الأول في جدول \halign هذا
D&E&F\cr
G&H&I\cr
}}}
\end{document}
```

[افتح هذا المثال في Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Basic+table+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%25+Close-fitting+box+borders+%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D%0A%0AHere+is+a+%5Cverb%7C%5Cvalign%7C+table%3A+%0A%5Cbegingroup%0A%25+%5Chsize+controls+the+%5Cvalign+%0A%25+column+widths.+We+also+set+%0A%25+%5Cparindent+to+a+smaller+value%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign%7B%0A%23%26%23%26%23%5Ccr+%25+The+preamble%3A+covered+later+%28in+great+detail%21%29%0AA%26B%26C%5Ccr+%25+The+first+COLUMN+of+this+%5Cvalign+table%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%0A%25+Note%3A+for+reasons+explained+later%0A%25+the+%5Chalign+has+to+be+put+in+a+%5Cvbox%0AHere+is+an+%5Cverb%7C%5Chalign%7C+table%3A+%5Cfbox%7B%25%0A%5Cvbox%7B%5Chalign%7B%0A%23%26%23%26%23%5Ccr+%25+The+preamble%3A+covered+later+%28in+great+detail%21%29%0AA%26B%26C%5Ccr+%25+The+first+ROW+of+this+%5Chalign+table%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%7D%0A%5Cend%7Bdocument%7D)

ينتج هذا المثال المخرجات التالية: ![](/files/8da7879c7ad94dda2906cf372920b2ec14c4af7e)

يعرض الرسم التالي نسخة مشروحة من الجداول التي ينتجها الشيفرة أعلاه. وفيما بعد من هذه السلسلة سنعالج موضوعات مثل:

* ما هي مقدمات الجداول؟
* لماذا نضبط `\hsize` و `\parindent` لـ `\valign` الجداول؟

لأغراضنا الحالية، يكفي أن نلاحظ النهج الصفّي مقابل النهج العمودي في `\halign` *مقابل*. `\valign` بناء الجدول:

![](/files/1bd0d81a91eb64e8307349c2663c19b30e4c39e8)

## الصيغة العامة لـ \halign و\valign

سنبدأ بمراجعة الخصائص الأساسية والصيغة العامة لـ `\halign` و `\valign` ولكن دون الخوض (حتى الآن) في أي تفاصيل حقيقية. [كما ذُكر](#intro)، نعتمد نظرة عامة رسمية قليلًا على الصيغة/البنية الخاصة بـ `\halign` و `\valign` الأوامر لوضع الأساس لمقالات لاحقة في هذه السلسلة.

الصيغة الأكثر عمومية لـ `\halign` و `\valign` يمكن كتابة الأوامر كما يلي:

`\halign` $$\langle$$⁠`المواصفة الاختيارية`⁠$$\rangle$$ { $$\langle$$⁠`المقدمة`⁠$$\rangle$$ $$\langle$$⁠`المتن`⁠$$\rangle$$ }

`\valign` $$\langle$$⁠`المواصفة الاختيارية`⁠$$\rangle$$ { $$\langle$$⁠`المقدمة`⁠$$\rangle$$ $$\langle$$⁠`المتن`⁠$$\rangle$$ }

كما ترى، كلاهما `\halign` و `\valign` يتألفان من ثلاثة أقسام رئيسية:

* [$$\langle$$⁠`المواصفة الاختيارية`⁠$$\rangle$$](#optspec)
* [$$\langle$$⁠`المقدمة`⁠$$\rangle$$](#preamble)
* [$$\langle$$⁠`المتن`⁠$$\rangle$$](#body)

## ال $$\langle$$⁠المواصفة الاختيارية⁠$$\rangle$$

يُحدَّد الحجم/الامتداد الافتراضي للجدول، أي ما يُسمّى «الحجم الطبيعي»، بواسطة محتواه—وللتوضيح، فبالحجم/الامتداد نعني

* موقع *العرض* الجدول الناتج بواسطة `\halign`، أو
* موقع *الارتفاع* الجدول الناتج بواسطة `\valign`

إضافة $$\langle$$⁠`المواصفة الاختيارية`⁠$$\rangle$$ يمكن استخدامه «لتجاوز» الحجم الطبيعي للجدول، ويأخذ أحد شكلين:

* **`إلى`** $$\langle$$**⁠`بُعد`⁠**$$\rangle$$
* **`spread`** $$\langle$$**⁠`بُعد`⁠**$$\rangle$$

حيث

* $$\langle$$**⁠`بُعد`⁠**$$\rangle$$ هو طول معطى بوحدات يفهمها TeX، مثل pt أو mm أو cm — ويمكن أيضًا تحديد الطول كأمر يتمدّد إلى قيمة محددة بوحدات مناسبة؛
* **`إلى`** و **`spread`** هي كلمات TeX المفتاحية التي تحدد نوع «التجاوز» للحجم الطبيعي:
  * **`إلى`**&#x200E;: يضبط حجم الجدول إلى $$\langle$$⁠`بُعد`⁠$$\rangle$$ القيمة
  * **`spread`**&#x200E;: يضيف $$\langle$$⁠`بُعد`⁠$$\rangle$$ القيمة المحددة إلى الحجم الطبيعي للجدول

تأثير $$\langle$$⁠`المواصفة الاختيارية`⁠$$\rangle$$ يعتمد على نوع الجدول الجاري تنسيقه: إذ سيعدّل `\halign` الحجم الطبيعي للجدول *العرض*، أو `\valign` الحجم الطبيعي للجدول *الارتفاع*.

إليك بعض الأمثلة:

* `\halign **to 100pt**{...}`‎: يضبط `\halign` عرض الجدول إلى `100pt`
* `\valign **to 50pt**{...}`‎: يضبط `\valign` ارتفاع الجدول إلى `30pt`
* `\halign **spread 30pt**{...}`‎: يضيف 30pt إلى `\halign` العرض الطبيعي للجدول. وعلى العكس، فإن كتابة **spread -30pt** ستقلل عرض الجدول بمقدار 30pt.
* `\valign **spread 20pt**{...}`‎: يضيف 20pt إلى `\valign` الارتفاع الطبيعي للجدول. وعلى العكس، فإن كتابة **spread -20pt** ستقلل ارتفاع الجدول بمقدار 20pt.

يُعيد الشيفرة التالية استخدام أمثلة الجداول أعلاه ولكنها تطبّق $$\langle$$⁠`المواصفة الاختيارية`⁠$$\rangle$$ على `\valign` و `\halign` جدول:

```latex
\documentclass{article}
\begin{document}
\pagestyle{empty}
% حدود الصناديق المحكمة
\setlength{\fboxsep}{0pt}

إليك جدول \verb|\valign|:
\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign to 50pt{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup

إليك جدول \verb|\halign|:
\fbox{
\vbox{\halign to 100pt{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}}
\end{document}
```

[افتح هذا المثال في Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Basic+table+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%25+Close-fitting+box+borders+%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D%0A%0AHere+is+a+%5Cverb%7C%5Cvalign%7C+table%3A+%0A%5Cbegingroup%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign+to+50pt%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%0AHere+is+an+%5Cverb%7C%5Chalign%7C+table%3A%0A%5Cfbox%7B%25%0A%5Cvbox%7B%5Chalign+to+100pt%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%7D%0A%5Cend%7Bdocument%7D)

ينتج هذا المثال المخرجات الموضحة أدناه:

![](/files/52bff2e4e8c42e593deb84ad04b2df079d7dac22)

—لكن لاحظ كيف أن محتوى كلا الجدولين «متكتل معًا». والسبب في ذلك هو غياب المسافات المرنة (glue) التي يمكن لـTeX استخدامها لتمديد المحتوى لملء المساحة الإضافية التي يوفرها **`إلى`** $$\langle$$**⁠`بُعد`⁠**$$\rangle$$. هنا سنستبق قليلاً لذكر `\tabskip` الأمر.

#### مقدمة أولية إلى الأمر \tabskip

قد تتطلب جمالية تخطيط الجدول تعديل المسافات بين صفوفه أو أعمدته، لذا لا يثير الدهشة أن محركات TeX توفر أمرًا يسمى `\tabskip` والذي يتيح لك فعل ذلك. `\tabskip` يُستخدم لضبط (وتغيير) مقدار المساحة المرنة («glue») التي يضعها TeX بين أعمدة `\halign` أو صفوف `\valign`. وستستكشف مقالات لاحقة `\tabskip` بتفصيل أكبر بكثير.

كمثال تمهيدي، تستخدم الشيفرة التالية إعدادًا لـ `\tabskip` والذي يتسبب في إدراج TeX بعض المساحة المرنة (جدًا) بين صفوف `\valign` الجدول. وتسمح تلك المساحة المرنة لصفوف الجدول بالتمدد وملء المساحة الإضافية التي أنشأها $$\langle$$⁠`المواصفة الاختيارية`⁠$$\rangle$$ لـ **`إلى 50pt`**:

```latex
\documentclass{article}
\setlength{\fboxsep}{0pt}
\\setlength{\\parindent}{0pt}
\newcommand{\optspec}{\(\langle \texttt{المواصفة الاختيارية} \rangle\)}
\begin{document}
\pagestyle{empty}
إليك جدول \verb|\valign|:
\vspace{6pt}

\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup
\vspace{6pt}

إليك جدول \verb|\valign| نفسه ولكن مع \optspec{} بقيمة ``\texttt{to 50pt}''. لاحظ كيف أن الصفوف ``متكدسة'' لأنه لا توجد ``glue قابلة للتمدد'' متاحة بين الصفوف:

\vspace{6pt}
\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign to 50pt{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup
\vspace{6pt}

سنستخدم جدول \verb|\valign| مع \optspec{} بقيمة ``\texttt{to 50pt}'', لكننا سنوفر ``مسافة مرنة'' عبر الأمر \verb|\tabskip|. هنا يوفر \verb|\tabskip| مقدارًا كافيًا من ``glue'' لتمكين صفوف \verb|\valign| من ``التمدد'' وملء أي مساحة إضافية متاحة. إليك جدول \verb|\valign| ``الممدد'':

\tabskip=0pt plus1fil % هذا يضبط \tabskip على glue مرنة جدًا
\vspace{6pt}

\def\mylen{50pt}
\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign to \mylen{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup
\end{document}
```

[افتح هذا المثال في Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Basic+example+using+tabskip+glue\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D%0A%5Csetlength%7B%5Cparindent%7D%7B0pt%7D%0A%5Cnewcommand%7B%5Coptspec%7D%7B%5C%28%5Clangle+%5Ctexttt%7Boptional+specification%7D+%5Crangle%5C%29%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0AHere+is+a+%5Cverb%7C%5Cvalign%7C+table%3A%0A%5Cvspace%7B6pt%7D%0A%0A%5Cbegingroup%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%5Cvspace%7B6pt%7D%0A%0AHere+is+the+same+%5Cverb%7C%5Cvalign%7C+table+but+with+an+%5Coptspec%7B%7D+of+%60%60%5Ctexttt%7Bto+50pt%7D%27%27.+Note+how+the+rows+are+%60%60bunched+up%27%27+because+there%27s+no+available+%60%60stretchable+glue%27%27+between+the+rows%3A+%0A%0A%5Cvspace%7B6pt%7D%0A%5Cbegingroup%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign+to+50pt%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%5Cvspace%7B6pt%7D%0A%0AWe%27ll+use+the+%5Cverb%7C%5Cvalign%7C+table+with+%5Coptspec%7B%7D+of+%60%60%5Ctexttt%7Bto+50pt%7D%27%27%2C+but+provide+%60%60flexible+spacing%27%27+via+the+%5Cverb%7C%5Ctabskip%7C+command.+Here%2C+%5Cverb%7C%5Ctabskip%7C+is+providing+enough+%60%60glue%27%27+to+enable+the++%5Cverb%7C%5Cvalign%7C+rows+to++%60%60stretch+out%27%27+and+fill+any+available+extra+space.+Here+is+the+%60%60stretched+out%27%27+%5Cverb%7C%5Cvalign%7C+table%3A%0A%0A%5Ctabskip%3D0pt+plus1fil+%25+This+sets+%5Ctabskip+to+a+very+flexible+glue%0A%5Cvspace%7B6pt%7D%0A%0A%5Cdef%5Cmylen%7B50pt%7D%0A%5Cbegingroup%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign+to+%5Cmylen%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

ينتج هذا المثال المخرجات التالية:

![](/files/20ba10115a01dcc37a09895d081c816dc4c578b3)

## مقدمة إلى الجدول $$\langle$$⁠المقدمة⁠$$\rangle$$ و $$\langle$$⁠المتن⁠$$\rangle$$

يقدّم هذا القسم مقدمة إلى الجدول $$\langle$$⁠`المقدمة`⁠$$\rangle$$، و *بإيجاز* يتناول الجدول $$\langle$$⁠`المتن`⁠$$\rangle$$ والذي يتم بعد ذلك [استكشافه بمزيد من التفصيل](#bodydetails).

ستستكشف المقالات اللاحقة في هذه السلسلة $$\langle$$⁠`المقدمة`⁠$$\rangle$$ و $$\langle$$⁠`المتن`⁠$$\rangle$$ بمزيد من التفصيل، ولا سيما استخدام TeX لمعالجة جدول $$\langle$$⁠`المقدمة`⁠$$\rangle$$.

كما أُشير أعلاه، فإن الصيغة الأكثر عمومية لـ `\halign` أو `\valign` يمكن كتابة الجداول على النحو التالي:

`\halign` $$\langle$$⁠`المواصفة الاختيارية`⁠$$\rangle$$ { $$\langle$$⁠`المقدمة`⁠$$\rangle$$ $$\langle$$⁠`المتن`⁠$$\rangle$$ }

`\valign` $$\langle$$⁠`المواصفة الاختيارية`⁠$$\rangle$$ { $$\langle$$⁠`المقدمة`⁠$$\rangle$$ $$\langle$$⁠`المتن`⁠$$\rangle$$ }

### ال $$\langle$$⁠المقدمة⁠$$\rangle$$

ال $$\langle$$⁠`المقدمة`⁠$$\rangle$$ يحتوي القسم على سطر واحد $$\langle$$⁠`سطر مقدمة`⁠$$\rangle$$ وهو *منتهيًا* بواسطة `\cr` الأمر؛ وبالتالي فإن $$\langle$$⁠`المقدمة`⁠$$\rangle$$ يمكن إعادة كتابته على النحو التالي:

$$\langle$$⁠`المقدمة`⁠$$\rangle$$=$$\langle$$⁠`سطر مقدمة`⁠$$\rangle$$**`\cr`**

### ال $$\langle$$⁠المتن⁠$$\rangle$$

وبالمثل، فإن $$\langle$$⁠المتن⁠$$\rangle$$ يمكن تقسيم القسم إلى سطر واحد أو أكثر من «الأسطر» المكوِّنة، لكن هنا يوجد خياران لكل سطر:

* سطر يتألف من مجموعة من الخلايا التي تكوّن `\halign` صفًا أو `\valign` عمودًا؛ أو
* a `\noalign` أمر «يحقن» موادًا بين `\halign`صفوفه أو `\valign`أعمدته.

لأغراضنا الحالية سنتجاهل `\noalign` الأمر (انظر [لاحقًا في المقالة](#noalign)) وافترض أن كل سطر من $$\langle$$⁠المتن⁠$$\rangle$$ هو بيانات لمجموعة من الخلايا و *منتهيًا* بواسطة `\cr` الأمر.

بتجاهل `\noalign`، و $$\langle$$⁠`المتن`⁠$$\rangle$$ القسم الذي يمثّل محتوى المستخدم، يحتوي على تسلسل من الأسطر، وسنسمّي كلًا منها $$\langle$$⁠`سطر متن`⁠$$\rangle$$ الذي يكون *منتهيًا* بواسطة ما يصاحبه من `\cr` الأمر.

ال $$\langle$$⁠`المتن`⁠$$\rangle$$ يمكن إعادة كتابته على النحو التالي:

$$\langle$$⁠سطر المتن$${}\_1$$⁠$$\rangle$$\cr $$\langle$$⁠سطر المتن$${}\_2$$⁠$$\rangle$$\cr $$\langle$$⁠سطر المتن$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$⁠سطر المتن$${}*\mathrm{N}$$⁠$$\rangle$$\cr

وبجمع ذلك معًا، يمكننا إعادة كتابة الصيغة العامة لـ `\halign` و `\valign` كما يلي:

`\halign` $$\langle$$⁠`المواصفة الاختيارية`⁠$$\rangle$$ { $$\langle$$⁠`سطر مقدمة`⁠$$\rangle$$\cr $$\langle$$⁠سطر المتن$${}\_1$$⁠$$\rangle$$\cr $$\langle$$⁠سطر المتن$${}\_2$$⁠$$\rangle$$\cr $$\langle$$⁠سطر المتن$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$⁠سطر المتن$${}*\mathrm{N}$$⁠$$\rangle$$\cr }

`\valign` $$\langle$$⁠`المواصفة الاختيارية`⁠$$\rangle$$ { $$\langle$$⁠`سطر مقدمة`⁠$$\rangle$$\cr $$\langle$$⁠سطر المتن$${}\_1$$⁠$$\rangle$$\cr $$\langle$$⁠سطر المتن$${}\_2$$⁠$$\rangle$$\cr $$\langle$$⁠سطر المتن$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$⁠سطر المتن$${}*\mathrm{N}$$⁠$$\rangle$$\cr }

لأسباب ستُعالج في مقالات لاحقة، فإن $$\langle$$⁠`المقدمة`⁠$$\rangle$$، مجرد $$\langle$$⁠`سطر مقدمة`⁠$$\rangle$$، له صيغة مختلفة عن جميع الأسطر في الجدول $$\langle$$⁠`المتن`⁠$$\rangle$$. وسنقوم أيضًا [بالعودة إلى `\noalign` الأمر](#noalign) والذي يمكن أيضًا استخدامه داخل الجدول $$\langle$$⁠`المتن`⁠$$\rangle$$.

### ال $$\langle$$⁠سطر المقدمة⁠$$\rangle$$

ال $$\langle$$⁠`سطر مقدمة`⁠$$\rangle$$ يلعب *حيويًا* دورًا حيويًا في تنسيق الجداول لأنه يوفّر نوعًا من «المخطط» المستخدم لتنسيق المحتوى—`\halign` صفوف أو `\valign` أعمدة—الموجودة في الجدول $$\langle$$⁠`المتن`⁠$$\rangle$$. الحزمة $$\langle$$⁠`سطر مقدمة`⁠$$\rangle$$ يمكنه أيضًا أن يحتوي على «قوالب» خلايا تُستخدم لبناء صفوف `\halign` أو أعمدة `\valign`—وهو موضوع ستتم مناقشته بالتفصيل.

الغرض من $$\langle$$⁠`سطر مقدمة`⁠$$\rangle$$ هو ذو شقين:

* فهو يحدد *الحد الأقصى* عدد الخلايا في كل صف من `\halign` أو في كل عمود من `\valign`.
* كما يخزن *قوالب الخلايا* والتي يمكن استخدامها لأتمتة التنسيق أو إدراج المحتوى داخل الخلايا الموجودة في الجدول $$\langle$$⁠`المتن`⁠$$\rangle$$. قوالب الخلايا اختيارية ويمكن أن تكون «فارغة»، أو يمكنك تضمين أحرف أو أوامر سيضيفها TeX تلقائيًا قبل و/أو بعد المحتوى الفعلي لخلايا محددة في جدولك. وهذا يوفر عليك عناء كتابة/تضمين تلك الأحرف أو الأوامر يدويًا في كل خلية تريد أن تنطبق عليها.

**ملاحظة**‎: إن `\halign` صفًا أو `\valign` العمود يمكن أن يحتوي على عدد خلايا أقل من الحد الأقصى الذي تحدده $$\langle$$⁠`سطر مقدمة`⁠$$\rangle$$ ولكنه لا يمكن أن يحتوي على أكثر من ذلك الحد الأقصى، وإلا فإن TeX يولّد خطأ. ولأغراضنا الحالية نتجاهل تفاصيل *الدورية* المقدمات.

وبالاستمرار مع مخططات البنية لدينا، فإن $$\langle$$⁠`سطر مقدمة`⁠$$\rangle$$ لـ

* أحد `\halign` الجدول الذي بحد أقصى $$\mathrm{K}$$ خلايا لكل *صف*، أو
* a `\valign` الجدول الذي بحد أقصى $$\mathrm{K}$$ خلايا لكل *عمود*

يمكن كتابته على النحو التالي:

$$\langle$$⁠القالب$${}\_1$$⁠$$\rangle$$&$$\langle$$⁠القالب$${}\_2$$⁠$$\rangle$$&$$\langle$$⁠القالب$${}*3$$⁠$$\rangle$$ $$\cdots$$ &$$\langle$$⁠القالب$${}*\mathrm{K}$$⁠$$\rangle$$

حيث `&` هو *محرف تبويب المحاذاة* الذي يشير إلى نهاية خلية وبداية التالية. تقليديًا، يُستخدم المحرف العطف (&) (`&`) كعلامة تبويب المحاذاة، لكن يمكن استخدام أي محرف ذي [رمز الفئة](/latex/ar/mzyd-mn-almwdhwaat/43-table-of-tex-category-codes.md) 4 بدلًا منه.

كتذكير فقط، يمكن كتابة $$\langle$$⁠`المقدمة`⁠$$\rangle$$ يمكن كتابته $$\langle$$⁠`المقدمة`⁠$$\rangle$$=$$\langle$$⁠`سطر مقدمة`⁠$$\rangle$$**`\cr`**، أو بشكل مكافئ

$$\langle$$⁠`المقدمة`⁠$$\rangle$$=$$\langle$$⁠القالب$${}\_1$$⁠$$\rangle$$&$$\langle$$⁠القالب$${}\_2$$⁠$$\rangle$$&$$\langle$$⁠القالب$${}*3$$⁠$$\rangle$$ $$\cdots$$ &$$\langle$$⁠القالب$${}*\mathrm{K}$$⁠$$\rangle$$**`\cr`**

#### بنية كل خلية $$\langle$$⁠القالب⁠$$\rangle$$

كل خلية $$\langle$$⁠القالب$${}\_i$$⁠$$\rangle$$ يمكن كتابته على النحو التالي:

$$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ حيث:

* $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$ هي مجموعة من الأحرف أو الأوامر (الرموز) التي سيُدرجها TeX تلقائيًا *قبل أن* محتوى مقدَّم من المستخدم للخلية $$i$$;
* $$\texttt{#}$$ هو عنصر نائب يوضح أين سيظهر المحتوى الذي يقدمه المستخدم في الخلية $$i$$. ومرة أخرى، فإن `#` المحرف ليس سوى *تقليد*، ويمكن لأي محرف ذي [رمز الفئة](/latex/ar/mzyd-mn-almwdhwaat/43-table-of-tex-category-codes.md) 6 أن يُستخدم بدلًا منه. لاحظ أن رمز الفئة 6 يُستخدم لمعاملات الماكرو؛
* $$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ هي مجموعة من الأحرف أو الأوامر (الرموز) التي سيُدرجها TeX تلقائيًا *بعد* محتوى مقدَّم من المستخدم للخلية $$i$$.

لاحظ أن جميع $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$ و $$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ كنت *اختيارية*: لا يتعين عليك استخدام أي أحرف أو أوامر قبل أو بعد محتوى الخلية.

**إكمال** $$\langle$$**⁠المقدمة⁠**$$\rangle$$

أخيرًا، باستخدام الترميز أعلاه، فإن $$\langle$$⁠`المقدمة`⁠$$\rangle$$ لـ

* أحد `\halign` الجدول الذي بحد أقصى $$\mathrm{K}$$ خلايا لكل *صف*، أو
* a `\valign` الجدول الذي بحد أقصى $$\mathrm{K}$$ خلايا لكل *عمود*

يمكن كتابته على النحو التالي:

$$\langle$$⁠`المقدمة`⁠$$\rangle$$=$$\langle$$⁠`سطر مقدمة`⁠$$\rangle$$`**\cr**`

أو

$$\langle$$⁠`المقدمة`⁠$$\rangle$$=$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}*3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}*3$$⁠$$\rangle$$$$\cdots$$$$\langle$$⁠$$\texttt{U}*\mathrm{K}$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}*\mathrm{K}$$⁠$$\rangle$$`**\cr**`

**ال** $$\langle$$**⁠المقدمة⁠**$$\rangle$$ **وعدّ الصفوف والأعمدة**

إضافة **`\halign`** جدولًا بـ $$\langle$$⁠`المقدمة`⁠$$\rangle$$ يحدّد $$\mathrm{K}$$ خلاياً و $$\langle$$⁠`المتن`⁠$$\rangle$$ يحتوي على $$\mathrm{N}$$ $$\langle$$⁠`أسطر المتن`⁠$$\rangle$$ سينتج جدولًا يحتوي على $$\mathrm{K}$$ *أعمدة* و $$\mathrm{N}$$ *صفوف*، كما هو موضح في المخطط التالي:

![](/files/d9e3f3757d3a42ac9e0f7ad5fa510939f39e2907)

مشروع **`\valign`** جدولًا بـ $$\langle$$⁠`المقدمة`⁠$$\rangle$$ يحدّد $$\mathrm{K}$$ خلاياً و $$\langle$$⁠`المتن`⁠$$\rangle$$ يحتوي على $$\mathrm{N}$$ $$\langle$$⁠`أسطر المتن`⁠$$\rangle$$ سينتج جدولًا يحتوي على $$\mathrm{K}$$ *صفوف* و $$\mathrm{N}$$ *أعمدة*، كما هو موضح في المخطط التالي:

![](/files/e9a8fafc8c0953736413e88cdf4d529f04fb1544)

### كفى نظريّة، فلنرَ بعض الأمثلة!

كما سنرى لاحقًا بتفصيل، عندما يعالج TeX محتوى جدول—خلايا الجدول الموجودة في [$$\langle$$⁠`المتن`⁠$$\rangle$$](#body)—فإنه يتحقق من وجود قوالب خلايا، والتي تم تعريفها في $$\langle$$⁠`المقدمة`⁠$$\rangle$$، لأن TeX يبحث عن أي رموز قالب ليتم إدراجها قبل و/أو بعد محتوى المستخدم. توضح الأمثلة البسيطة التالية استخدام قوالب الخلايا $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ في `\halign` و `\valign` .

#### جدول \halign يستخدم قوالب الخلايا

يوضح المثال التالي `\halign` جدولًا يستخدم قالب خلية لإدراج علامتي اقتباس مزدوجتين تلقائيًا حول محتوى الخلية الأولى في كل صف: أي قالب يؤثر في كل خلية في العمود الأول:

```latex
\documentclass{article}
\usepackage{parskip} % اضبط \parindent على 0pt
% اختر حجم صفحة صغيرًا ومناسبًا
\usepackage[paperheight=10cm,paperwidth=12cm,textwidth=8cm]{geometry}
\setlength{\tabskip}{20pt} % وفر مسافات بين أعمدة \halign
\begin{document}
\pagestyle{empty}

إليك جدول \verb|\halign| \textit{من دون} قوالب خلايا:

\halign{
% لا شيء قبل أو بعد كل '#' في <preamble>
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}

إليك جدول \verb|\halign| نفسه ولكن مع إضافة علامتي اقتباس مزدوجتين تلقائيًا إلى الخلية الأولى في كل صف؛ أي أنه يؤثر في كل خلية في العمود الأول:

\halign{
% قوالب الاقتباس في المقدمة:
``#''&#&#\cr % علامتا اقتباس مزدوجتان قبل وبعد أول #
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\end{document}
```

[افتح هذا المثال في Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=halign+example+of+cell+templates\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bparskip%7D+%25+Set+%5Cparindent+to+0pt%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D10cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D8cm%5D%7Bgeometry%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B20pt%7D+%25+Space+out+the+%5Chalign+columns%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%0AHere+is+an+%5Cverb%7C%5Chalign%7C+table+%5Ctextit%7Bwithout%7D+cell+templates%3A+%0A%0A%5Chalign%7B%0A%25+Nothing+before+or+after+each+%27%23%27+in+the+%3Cpreamble%3E%0A%23%26%23%26%23%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%0AHere+is+the+same+%5Cverb%7C%5Chalign%7C+table+but+with+double+quotes+automatically+added+to+the+first+cell+in+each+row%3B+i.e.%2C+it+affects+every+cell+in+the+first+column%3A+%0A%0A%5Chalign%7B%0A%25+Quotation+templates+in+the+preamble%3A%0A%60%60%23%27%27%26%23%26%23%5Ccr+%25+Double+quote+marks+before+and+after+first+%23%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cend%7Bdocument%7D)

ينتج هذا المثال المخرجات التالية:

![](/files/165fe144a326ed6e12464401ac265091ec970528)

الرسم التالي نسخة مشروحة من `\halign` الجدول الناتج عن المثال أعلاه؛ هنا نقارن البنية «الرسمية» لجدول ذي ثلاث خلايا $$\langle$$⁠`المقدمة`⁠$$\rangle$$:

$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_3$$⁠$$\rangle$$`**\cr**`

مع الصيغة الفعلية لـ $$\langle$$⁠`المقدمة`⁠$$\rangle$$ لـ ` ``#''&#&#**\cr** `، مع إبراز وجود قوالب الخلايا أو غيابها:

![](/files/c104ac62608277c5c2ca59ffc71dbaea863b32ca)

#### جدول \valign يستخدم قوالب الخلايا

يوضح المثال التالي `\valign` جدولًا يستخدم قالبًا لكل خلية لإدراج أرقام تلقائيًا تحيط بمحتوى المستخدم.

```latex
\documentclass{article}
\usepackage{parskip} % اضبط \parindent على 0pt
% اختر حجم صفحة صغيرًا ومناسبًا
\usepackage[paperheight=14cm,paperwidth=12cm,textwidth=10cm]{geometry}
\setlength{\tabskip}{8pt} % وفر مسافات بين صفوف \valign
\begin{document}
\pagestyle{empty}

إليك جدول \verb|\valign| \textit{من دون} قوالب خلايا:

\begingroup
\hsize=25pt
\valign{
% لا شيء قبل أو بعد كل '#' في
% الـ <preamble>
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\endgroup

إليك جدول \verb|\valign| نفسه ولكن باستخدام قوالب الخلايا لإدراج أرقام تلقائيًا في كل خلية:

\begingroup
\hsize=25pt
\valign{
% تُدرج الأرقام قبل وبعد كل '#' في
% الـ <preamble>
1#2&3#4&5#6\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\endgroup
\end{document}
```

[افتح هذا المثال في Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+of+valign+cell+templates\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bparskip%7D+%25+Set+%5Cparindent+to+0pt%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D14cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D10cm%5D%7Bgeometry%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B8pt%7D+%25+Space+out+the+%5Cvalign+rows%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%0AHere+is+a+%5Cverb%7C%5Cvalign%7C+table+%5Ctextit%7Bwithout%7D+cell+templates%3A%0A%0A%5Cbegingroup%0A%5Chsize%3D25pt%0A%5Cvalign%7B%0A%25+Nothing+before+or+after+each+%27%23%27+in+%0A%25+the+%3Cpreamble%3E%0A%23%26%23%26%23%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cendgroup%0A%0AHere+is+the+same+%5Cverb%7C%5Cvalign%7C+table+but+using+cell+templates+to+automatically+insert+digits+into+every+cell%3A+%0A%0A%5Cbegingroup%0A%5Chsize%3D25pt%0A%5Cvalign%7B%0A%25+Digits+inserted+before+and+after+every+%27%23%27+in%0A%25+the+%3Cpreamble%3E%0A1%232%263%234%265%236%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

ينتج هذا المثال المخرجات التالية:

![](/files/df184c96f6f1b6168f8cde0b495ce22c60d3e1ca)

الرسم التالي نسخة مشروحة من `\valign` الجدول الناتج عن المثال أعلاه؛ هنا نقارن البنية «الرسمية» لجدول ذي ثلاث خلايا $$\langle$$⁠`المقدمة`⁠$$\rangle$$:

$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_3$$⁠$$\rangle$$`**\cr**`

مع الصيغة الفعلية لـ $$\langle$$⁠`المقدمة`⁠$$\rangle$$ لـ `1#2&3#4&5#6**\cr**`، مع إبراز استخدام قوالب الخلايا $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$:

![](/files/0a6b590c8dc704b18d3f12555f586b99c2dc83c3)

لاحظ كيف أن قالب الخلية $$i$$ ($$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$) يُطبَّق على $$i$$الخلية رقم `\valign` عمود، مما يؤدي إلى أن جميع خلايا $$i$$الـ *صف* تتأثر.

#### تنسيق النص باستخدام قوالب الخلايا

المثال التالي يستخدم ما يلي $$\langle$$⁠`المقدمة`⁠$$\rangle$$ (قوالب الخلايا) لتنسيق النص الموجود في كل صف أو عمود:

`\textbf{#}&\textit{#}&\texttt{#}\cr`

إذا قارنا هذا $$\langle$$⁠`المقدمة`⁠$$\rangle$$ ببنيتنا «الرسمية» لجدول ذي ثلاث خلايا $$\langle$$⁠`المقدمة`⁠$$\rangle$$:

$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_3$$⁠$$\rangle$$`**\cr**`

يمكننا أن نرى أن:

$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$=`\textbf{`

$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$=`}`

$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$=`\textit{`

$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$=`}`

$$\langle$$⁠$$\texttt{U}\_3$$⁠$$\rangle$$=`\texttt{`

$$\langle$$⁠$$\texttt{V}\_3$$⁠$$\rangle$$=`}`

لاحظ كيف أن قوالب الخلايا هذه، مثل `\textbf{#}` تشبه الماكروات ذات وسيط واحد (محتوى الخلية).

```latex
جدول \verb|\valign| مع نص منسق باستخدام قوالب الخلايا:

\begingroup
\hsize=25pt
\valign{
\textbf{#}&\textit{#}&\texttt{#}\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\endgroup

جدول \verb|\halign| مع نص منسق باستخدام قوالب الخلايا:

\halign{
\textbf{#}&\textit{#}&\texttt{#}\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
```

[افتح هذا المثال في Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Styling+with+cell+templates\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bparskip%7D+%25+Set+%5Cparindent+to+0pt%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D14cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%25+Space+out+the+%5Chalign+columns+or+%5Cvalign+rows%0A%5Csetlength%7B%5Ctabskip%7D%7B8pt%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0AA+%5Cverb%7C%5Cvalign%7C+table+with+text+styled+using+cell+templates%3A%0A%0A%5Cbegingroup%0A%5Chsize%3D25pt%0A%5Cvalign%7B%0A%5Ctextbf%7B%23%7D%26%5Ctextit%7B%23%7D%26%5Ctexttt%7B%23%7D%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cendgroup%0A%0AAn+%5Cverb%7C%5Chalign%7C+table+with+text+styled+using+cell+templates%3A%0A%0A%5Chalign%7B%0A%5Ctextbf%7B%23%7D%26%5Ctextit%7B%23%7D%26%5Ctexttt%7B%23%7D%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cend%7Bdocument%7D)

ينتج هذا المثال المخرجات التالية:

![](/files/89c94731c195bede244f8abad2bb7de8fdcf498b)

## مزيد من التفاصيل عن الجدول $$\langle$$⁠المتن⁠$$\rangle$$

في القسم [مقدمة إلى الجدول $$\langle$$⁠`المقدمة`⁠$$\rangle$$ و $$\langle$$⁠`المتن`⁠$$\rangle$$](#preamble) رأينا كيف أنه، إذا تجاهلنا مؤقتًا `\noalign`، و $$\langle$$⁠`المتن`⁠$$\rangle$$ من `\halign` أو `\valign` يتكون الجدول من عدة أسطر، يُخصَّص كل منها $$\langle$$⁠سطر المتن$${}\_j$$⁠$$\rangle$$، حيث:

* كل $$\langle$$⁠سطر المتن$${}\_j$$⁠$$\rangle$$ ينتهي بـ `\cr` الأمر
* كل $$\langle$$⁠سطر المتن$${}\_j$$⁠$$\rangle$$ من `\halign` هو صف في الجدول
* كل $$\langle$$⁠سطر المتن$${}\_j$$⁠$$\rangle$$ من `\valign` هو عمود في الجدول

تسلسل الأسطر، $$\langle$$⁠سطر المتن$${}\_j$$⁠$$\rangle$$، حيث $$j=1\ldots\mathrm{N}$$، ينتج $$\mathrm{N}$$ صفوفًا في `\halign` أو $$\mathrm{N}$$ أعمدةً لـ `\valign`. كما يوضحه المخطط التالي، فإن جدولًا عامًا $$\langle$$⁠`المقدمة`⁠$$\rangle$$ مثل

$$\langle$$⁠`المقدمة`⁠$$\rangle$$=$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}*3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}*3$$⁠$$\rangle$$$$\cdots$$$$\langle$$⁠$$\texttt{U}*\mathrm{K}$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}*\mathrm{K}$$⁠$$\rangle$$`**\cr**`

يحدد قوالب الخلايا بحد أقصى $$\mathrm{K}$$ خلايا في كلٍّ من $$\mathrm{N}$$ $$\langle$$⁠`سطر متن`⁠$$\rangle$$ العناصر في $$\langle$$⁠`المتن`⁠$$\rangle$$:

![](/files/540d4cc461c091ab1855b74ed92234d6800f371d)

### بنية كل $$\langle$$⁠سطر المتن$${}\_j$$⁠$$\rangle$$

كل سطر $$\langle$$⁠سطر المتن$${}\_j$$⁠$$\rangle$$ من الجدول $$\langle$$⁠المتن⁠$$\rangle$$ يحتوي على محتوى لما يصل إلى $$\mathrm{K}$$ خلايا — كما يحدده الجدول $$\langle$$⁠المقدمة⁠$$\rangle$$— وله الشكل العام:

$$\langle$$⁠سطر المتن$${}\_j$$⁠$$\rangle$$=$$\langle$$⁠خلية$${}\_1$$⁠$$\rangle$$$$\texttt{&}$$$$\langle$$⁠خلية$${}\_2$$⁠$$\rangle$$$$\texttt{&}$$$$\langle$$⁠خلية$${}*3$$⁠$$\rangle$$$$\texttt{&}$$$$\cdots$$$$\texttt{&}$$$$\langle$$⁠خلية$${}*\mathrm{K}$$⁠$$\rangle$$`**\cr**`

حيث:

* $$\langle$$⁠خلية$${}\_i$$⁠$$\rangle$$ تمثل محتوى المستخدم لـ $$i$$الخلية رقم th في بعض $$\langle$$⁠سطر المتن$${}\_j$$⁠$$\rangle$$
* موقع **`&`** يُسمّى الحرف *فاصل المحاذاة* (وهو نفسه المستخدم في $$\langle$$⁠المقدمة⁠$$\rangle$$) والذي يشير إلى نهاية خلية وبدء التالية. ومرة أخرى، فإن استخدام **`&`** ليس إلا تقليدًا (اتفاقية) لأن أي حرف ذي [رمز الفئة](/latex/ar/mzyd-mn-almwdhwaat/43-table-of-tex-category-codes.md) 4 بدلًا منه.

على الرغم من أن كل $$\langle$$⁠سطر المتن$${}\_j$$⁠$$\rangle$$ يمكن أن يحتوي على حد أقصى $$\mathrm{K}$$ خلايا (يحدده $$\langle$$⁠المقدمة⁠$$\rangle$$) إلا أنها يمكن أن تحتوي على *أقل* من $$\mathrm{K}$$ خلايا، وأي $$\langle$$⁠خلية$${}\_i$$⁠$$\rangle$$ في $$\langle$$⁠سطر المتن$${}\_j$$⁠$$\rangle$$ يمكن أن تكون فارغة.

يوضح المثال التالي $$\langle$$⁠المقدمة⁠$$\rangle$$ لـ `#&#&#&#&#\cr` والذي يتيح حدًا أقصى قدره 5 خلايا لكل $$\langle$$⁠سطر من المتن⁠$$\rangle$$؛ ومع ذلك، تحتوي الجداول المنسقة على أسطر فيها أقل من 5 خلايا:

```latex
جدول \verb|\valign| مع 1 إلى 5 خلايا لكل \textit{عمود}:

\begingroup
% تتحكم \hsize في عروض أعمدة \valign (حجم الأسطر المنسقة).
\hsize=40pt
\fbox{\valign{
% استخدم ديباجة تسمح بوجود 5 خلايا لكل عمود
% معظم الأعمدة لا توفر محتوى لخمسة خلايا
#&#&#&#&#\cr% 5 cells per column
\(\mathrm{Cell}{}_1\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)&\(\mathrm{Cell}{}_4\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)&\(\mathrm{Cell}{}_4\)&\(\mathrm{Cell}{}_5\)\cr
}}
\endgroup

% ملاحظة: لأسباب ستُشرح لاحقًا
% يجب وضع \halign داخل \vbox
جدول \verb|\halign| مع 1 إلى 5 خلايا لكل \textit{صف}:

\fbox{
\vbox{\halign{
% استخدم ديباجة تسمح بوجود 5 خلايا لكل صف
% معظم الصفوف لا توفر محتوى لخمسة خلايا
#&#&#&#&#\cr % 5 cells per row
\(\mathrm{Cell}{}_1\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)&\(\mathrm{Cell}{}_4\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)&\(\mathrm{Cell}{}_4\)&\(\mathrm{Cell}{}_5\)\cr
}}}
```

[افتح هذا المثال في Overleaf](/latex/ar/mqalat-mtamqh/15-how-do-tex-engines-typeset-tables-2.md)

ينتج هذا المثال المخرجات التالية:

![](/files/ddaf0191b3ae68da982cbb03af8b4031ba3e4faf)

المثال التالي `\halign` يُظهر عددًا متغيرًا من الخلايا في كل صف وإمكانية أن تكون الخلايا فارغة — لاحظ كيف تُنتَج الخلايا الفارغة بواسطة **`&`** حروف متتالية في الجدول:

```latex
جدول \verb|\halign| مع بعض الخلايا الفارغة — لاحظ وجود أحرف \texttt{\&} متتالية في الجدول \(\langle\texttt{body}\rangle\):

\fbox{
\vbox{\halign{
% استخدم ديباجة تسمح بوجود 5 خلايا لكل صف
% معظم الصفوف لا توفر محتوى لخمسة خلايا
#&#&#&#&#\cr % 5 cells per row
\(\mathrm{Cell}{}_1\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)\cr
\(\mathrm{Cell}{}_1\)&&\(\mathrm{Cell}{}_3\)\cr
&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)&\(\mathrm{Cell}{}_4\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&&&\(\mathrm{Cell}{}_5\)\cr
}}}
```

[افتح هذا المثال في Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Empty+cells+Number+of+cells+per+row\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bparskip%7D+%25+Set+%5Cparindent+to+0pt%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D8cm%5D%7Bgeometry%7D%0A%25+Space+out+the+%5Chalign+columns+and+%5Cvalign+rows%0A%5Csetlength%7B%5Ctabskip%7D%7B8pt%7D+%0A%25+Close-fitting+box+borders+%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D%0A%5Cbegin%7Bdocument%7D%0AAn+%5Cverb%7C%5Chalign%7C+table+with+some+empty+cells---note+there+are+consecutive+%5Ctexttt%7B%5C%26%7D+characters+in+the+table+%5C%28%5Clangle%5Ctexttt%7Bbody%7D%5Crangle%5C%29%3A%0A%0A%5Cfbox%7B%25%0A%5Cvbox%7B%5Chalign%7B%0A%25+Use+a+preamble+that+allows+for+5+cells+per+row%0A%25+Most+rows+don%27t+provide+content+for+5+cells%0A%23%26%23%26%23%26%23%26%23%5Ccr+%25+5+cells+per+row%0A%5C%28%5Cmathrm%7BCell%7D%7B%7D_1%5C%29%5Ccr+%0A%5C%28%5Cmathrm%7BCell%7D%7B%7D_1%5C%29%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_2%5C%29%5Ccr%0A%5C%28%5Cmathrm%7BCell%7D%7B%7D_1%5C%29%26%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_3%5C%29%5Ccr%0A%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_2%5C%29%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_3%5C%29%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_4%5C%29%5Ccr%0A%5C%28%5Cmathrm%7BCell%7D%7B%7D_1%5C%29%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_2%5C%29%26%26%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_5%5C%29%5Ccr%0A%7D%7D%7D%0A%5Cend%7Bdocument%7D)

ينتج هذا المثال المخرجات التالية:

![](/files/67301f7563d9ee8514aeb095aa5359d96d46c849)

### لا يوجد شيء خاص في & و # في تنضيد الجداول

استخدام TeX للأحرف `&` و `#` في تنضيد `\halign`- أو `\valign`الجداول المبنية على - هو تقليد يعود إلى ماكروات Plain TeX الأصلية لكونث. ومن الممكن تمامًا استخدام أحرف غير `&` و `#` من خلال إسناد أكواد الفئات المناسبة إلى البدائل التي تفضّلها، كما يوضح المثال التالي:

* استبداله `&` مع `@` من خلال إسناد `@` إلى رمز الفئة 4
* استبداله `#` مع `|` من خلال إسناد `|` إلى رمز الفئة 6 (المستخدم لمعاملات الماكرو)

تُحافَظ تغييرات الفئة محليًا باستخدام `\begingroup` و `\endgroup`:

```latex
\documentclass{article}
\begin{document}
\begingroup
\catcode`@=4
\catcode`|=6
\halign{
|@|@|\cr
A@B@C\cr
D@E@F\cr
}
\endgroup
\end{document}
```

[افتح هذا المثال في Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Tables+and+category+codes\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegingroup%0A%5Ccatcode%60%40%3D4%0A%5Ccatcode%60%7C%3D6%0A%5Chalign%7B%0A%7C%40%7C%40%7C%5Ccr%0AA%40B%40C%5Ccr%0AD%40E%40F%5Ccr%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

## إعادة تقديم الأمر \noalign

توفر محركات TeX الأمر المدمج (البدائي) `\noalign` الأمر:

`\noalign{`$$\langle$$⁠`رموز`⁠$$\rangle$$`}`

حيث $$\langle$$⁠`رموز`⁠$$\rangle$$ هي أحرف و/أو أوامر TeX/LaTeX. إن `\noalign` الأمر مخصص حصريًا للاستخدام داخل `\halign` أو `\valign` جدول: واستخدامه خارجها سيؤدي إلى خطأ.

الغرض من `\noalign` هو السماح «بإدراج» نص وأوامر TeX/LaTeX *بين* صفوف جدول `\halign` أو أعمدة جدول `\valign` الجدول. وأكثر استخدام شائع لـ `\noalign` هو إنشاء قواعد الجدول (الخطوط):

* *أفقية* قواعد بين `\halign` صفوف الجدول
* *عمودية* قواعد بين `\valign` أعمدة الجدول

لاحظ ما يلي:

* موقع `\noalign` الأمر هي ***لا ينتهي بـ\*\*\*\*****&#x20;****`\cr`****&#x20;****\*\*\*\*الأمر***
* مجموعة الأوامر المسموح بها داخل `\noalign{...}` تعتمد على ما إذا كان يُستخدم في $$\langle$$⁠`المتن`⁠$$\rangle$$ من `\halign` أو `\valign` الجدول (أي في نمط عمودي أو أفقي).

يمكننا الآن أن نقول إن الجدول $$\langle$$⁠`المتن`⁠$$\rangle$$ لـ `\halign` أو `\valign` يمكن أن يتكون من أسطر منفردة $$\langle$$⁠سطر المتن$${}\_i$$⁠$$\rangle$$`\cr` متداخلة مع `\noalign` أوامر؛ وإحدى الاحتمالات/التركيبات العديدة يمكن أن تكون:

`\noalign{`$$\langle$$⁠`رموز`⁠$$\rangle$$`}` $$\langle$$⁠سطر المتن$${}\_1$$⁠$$\rangle$$\cr $$\langle$$⁠سطر المتن$${}\_2$$⁠$$\rangle$$\cr `\noalign{`$$\langle$$⁠`المزيد من الرموز`⁠$$\rangle$$`}` $$\langle$$⁠سطر المتن$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$⁠سطر المتن$${}*\mathrm{N}$$⁠$$\rangle$$\cr `\noalign{`$$\langle$$⁠`رموز أخرى`⁠$$\rangle$$`}`

### مثال باستخدام \noalign

سننظر في حالات استخدام أخرى لاحقًا في هذه السلسلة من المقالات، لكن إليك مثالًا أساسيًا يوضح إنشاء قواعد الجدول عبر `\noalign`:

```latex
\setlength{\tabskip}{5pt}

استخدام \verb|\noalign| لوضع قواعد أفقية بين صفوف جدول \verb|\halign|:
\vspace{6pt}

\halign{%
#&#&#&#&#\cr
\noalign{\hrule\kern2pt}
1&2&3&4&5\cr
\noalign{\kern2pt\hrule\kern2pt}
6&7&8&9&10\cr
\noalign{\kern2pt\hrule}
}

استخدام \verb|\noalign| لوضع قواعد عمودية بين أعمدة جدول \verb|\valign|:
\vspace{6pt}

\begingroup % أبقِ التغييرات في \parindent و \hsize محلية
\parindent=0pt
\hsize=50pt
\valign{%
#&#&#&#&#\cr
\noalign{\vrule\kern2pt}
1&2&3&4&5\cr
\noalign{\kern2pt\vrule\kern2pt}
6&7&8&9&10\cr
\noalign{\kern2pt\vrule}
}
\endgroup
```

[افتح هذا المثال في Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+of+the+noalign+command\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D10cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%7D+%0A%5Cusepackage%7Bparskip%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B5pt%7D%0A%0AUsing+%5Cverb%7C%5Cnoalign%7C+to+place+horizontal+rules+between+rows+of+an+%5Cverb%7C%5Chalign%7C+table%3A%0A%5Cvspace%7B6pt%7D%0A%0A%5Chalign%7B%25%0A%23%26%23%26%23%26%23%26%23%5Ccr%0A%5Cnoalign%7B%5Chrule%5Ckern2pt%7D%0A1%262%263%264%265%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%5Ckern2pt%7D%0A6%267%268%269%2610%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%7D%0A%7D%0A%0AUsing+%5Cverb%7C%5Cnoalign%7C+to+place+vertical+rules+between+columns+of+a+%5Cverb%7C%5Cvalign%7C+table%3A%0A%5Cvspace%7B6pt%7D%0A%0A%5Cbegingroup+%25+keep+changes+to+%5Cparindent+and+%5Chsize+local%0A%5Cparindent%3D0pt%0A%5Chsize%3D50pt%0A%5Cvalign%7B%25%0A%23%26%23%26%23%26%23%26%23%5Ccr%0A%5Cnoalign%7B%5Cvrule%5Ckern2pt%7D%0A1%262%263%264%265%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%5Ckern2pt%7D%0A6%267%268%269%2610%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%7D%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

ينتج هذا المثال المخرجات التالية:

![](/files/e61c3ae8b6189ea3ae1c2e7a8044a909382d065e)

## إعادة النظر في \tabskip

سنلقي نظرة أقرب على `\tabskip` الأمر، استنادًا إلى [المقدمة في قسم سابق](#tabskip).

ال `\tabskip` الأمر يضبط قيمة شكل خاص من «المسافات» (glue) المستخدمة *حصريًا* في تنضيد الجداول: والغرض منه توفير مسافة بين صفوف الجدول أو أعمدته:

* لـ `\halign` الجداول: `\tabskip` يُدرج glue قبل الجدول وبعده (أي إلى اليسار واليمين) وبين أعمدة الجدول
* لـ `\valign` الجداول: `\tabskip` يُدرج glue قبل الجدول وبعده (أي أعلى وأسفل) وبين صفوف الجدول

يمكن ضبط قيمة `\tabskip` باستخدام LaTeX `\setlength` الأمر:

`\setlength{\tabskip}{`$$\langle$$⁠`قيمة glue`⁠$$\rangle$$`}`

حيث $$\langle$$⁠`قيمة glue`⁠$$\rangle$$ يمكن أن تكون:

* طولًا ثابتًا مثل `5pt`, `3mm`، أو
* glue مرن محدود مثل `3pt plus 2pt minus 1pt`، أو
* glue مرن غير محدود مثل `0pt plus1fill`.

يمكنك أيضًا ضبط `\tabskip` (متجاوزًا `\setlength`) بكتابة

`\tabskip`=$$\langle$$⁠`قيمة glue`⁠$$\rangle$$

ومع ذلك، فإن أي تغيير في قيمة `\tabskip` glue لن يؤثر في مسافات الجدول إلا إذا كان هذا التغيير:

* قد أُجري *قبل أن* موقع `\halign` أو `\valign` الأمر ليُعالَج، أو
* أُجري داخل الجدول $$\langle$$⁠`المقدمة`⁠$$\rangle$$

محاولات ضبط `\tabskip` قيم داخل محتوى الجدول (الخلايا في الجدول $$\langle$$⁠`المتن`⁠$$\rangle$$) *لن* لن تغيّر تباعد `\halign` أعمدة الجدول أو `\valign` صفوف الجدول. والسبب في هذا السلوك لـ `\tabskip` يمكن إرجاعه إلى الدور الذي يلعبه $$\langle$$⁠`المقدمة`⁠$$\rangle$$ أثناء تنضيد الجداول — وهي عمليات سنستكشفها لاحقًا بشيء من التفصيل.

### العين تصدّق

وللمساعدة في تصور وجود أنواع مختلفة من التباعد/glue المستخدمة في تنضيد الجداول، خاصة

* `\tabskip` الغراء
* `\baselineskip` الغراء
* التفريغ اليدوي (`\kern`)

أعدّ Overleaf مشروعًا قائمًا على LuaTeX لتلوين مكوّنات الجدول. وقد اختير LuaTeX لأنه يتيح المعالجة اللاحقة منخفضة المستوى للبيانات/البنى الداخلية للجداول المنسقة، لكن لن نستعرض تلك التفاصيل هنا.

إليك بعض الأمثلة التي تُظهر تطبيقات مختلفة لـ `\tabskip`. ولكل مثال سنعرض الناتج الفعلي والنسخة الملوّنة التي ينتجها LuaTeX.

### مثال \tabskip 1

لنلقِ نظرة على استخدام `\tabskip` في `\halign` و `\valign` الجدول. سنعرض الجداول المنسقة الفعلية، مع إطار لتصوّر حجمها وتباعدها، إلى جانب رسومات مشروحة تحتوي على نسخ ملوّنة تُظهر بوضوح حجم مختلف glues/المسافات في كل جدول.

أولًا، `\halign`:

```latex
% لتصوير امتداد الجدول سنضع إطارًا حوله
\setlength{\fboxsep}{0pt} % استخدم حدودًا متقاربة

% هنا نضبط \tabskip «مباشرة»
\tabskip5pt % اضبط قيمة \tabskip الابتدائية خارج الجدول

% لوضع إطار حول الجدول يجب حفظه في صندوق TeX.
% يجب وضع \halign في \vbox لأن \halign يجب أن يكون
% مُعالجًا في «نمط عمودي»: لن يعمل \hbox لأن
% ذلك يُعالج في «نمط أفقي»

\fbox{\vbox{\halign{
\tabskip10pt#&
\tabskip15pt#&
\tabskip20pt#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}}
```

[افتح هذا المثال في Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Tabskip+glue+in+an+halign\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D10cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%7D+%0A%5Cusepackage%7Bparskip%7D+%25+sets+%5Cparindent+to+0pt%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%25+To+visualize+the+table%27s+extent+we%27ll+put+a+border+around+it+%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D+%25+Use+close-fitting+borders%0A%0A%25+Here+we+set+%5Ctabskip+%22directly%22%0A%5Ctabskip5pt+%25+Set+the+initial+%5Ctabskip+value+outside+the+table%0A%0A%25+To+put+a+border+around+the+table+it+has+to+be+saved+to+a+TeX+box.%0A%25+An+%5Chalign+has+to+be+placed+in+a+%5Cvbox+because+%5Chalign+must+be+%0A%25+processed+in+a+%22vertical+mode%22%3A+an+%5Chbox+will+not+work+because%0A%25+that+is+processed+in+a+%22horizontal+mode%22%0A%0A%5Cfbox%7B%5Cvbox%7B%5Chalign%7B%0A%5Ctabskip10pt%23%26%0A%5Ctabskip15pt%23%26%0A%5Ctabskip20pt%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%7D%0A%5Cend%7Bdocument%7D)

ينتج هذا المثال المخرجات التالية:

![](/files/9f05684b5af5eb7b33bc58fcf0978f0d4d08e2a8)

الرسم التالي نسخة أكبر ومُلوّنة ومشروحة من الجدول الناتج عن المثال السابق:

![](/files/da8aeb9ad3c4c08bf6d46062e6355cd39ee6142f)

توجد 4 حالات من `\tabskip` الأمر، وكل واحدة منها تقابل موقعًا معيّنًا للتباعد داخل الجدول:

1. `\tabskip5pt` يُستخدم خارج الجدول ويضبط `\tabskip` القيمة المطبقة قبل (إلى يسار) الخلية الأولى في كل صف.
2. `\tabskip10pt` يُضبط في قالب الخلية الأولى لـ $$\langle$$⁠`المقدمة`⁠$$\rangle$$ والذي يؤثر في المسافة بين $$\langle$$⁠خلية$${}\_1$$⁠$$\rangle$$ و $$\langle$$⁠خلية$${}\_2$$⁠$$\rangle$$ في كل صف.
3. `\tabskip15pt` يُضبط في قالب الخلية الثانية لـ $$\langle$$⁠`المقدمة`⁠$$\rangle$$ والذي يؤثر في المسافة بين $$\langle$$⁠خلية$${}\_2$$⁠$$\rangle$$ و $$\langle$$⁠خلية$${}\_3$$⁠$$\rangle$$ في كل صف.
4. `\tabskip20pt` يُضبط في قالب الخلية الثالثة، والأخيرة، لـ $$\langle$$⁠`المقدمة`⁠$$\rangle$$ والذي يؤثر في المسافة المضافة بعد $$\langle$$⁠خلية$${}\_3$$⁠$$\rangle$$، وهي الخلية الأخيرة في كل صف.

بعد ذلك، `\valign`

```latex
\setlength{\fboxsep}{0pt} % استخدم حدودًا متقاربة
\tabskip5pt % اضبط قيمة \tabskip الابتدائية خارج الجدول

% أبقِ التغييرات في \hsize محلية (ضمن مجموعة)
\begingroup
% تحدد \hsize عروض أعمدة \valign
\setlength{\hsize}{50pt}
% لأن \valign يمكن وضعه في \vbox أو \hbox فيمكننا استخدام
% \fbox مباشرة
\fbox{\valign{
\tabskip10pt#&
\tabskip15pt#&
\tabskip20pt#\cr
A&B&C\cr
E&E&F\cr
G&H&I\cr
}}
\endgroup
```

[افتح هذا المثال في Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+halign\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D10cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%7D+%0A%5Cusepackage%7Bparskip%7D+%25+sets+%5Cparindent+to+0pt%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D+%25+Use+close-fitting+borders%0A%5Ctabskip5pt+%25+Set+the+initial+%5Ctabskip+value+outside+the+table%0A%0A%25+Keep+changes+to+%5Chsize+local+%28in+a+group%29%0A%5Cbegingroup%0A%25+%5Chsize+determines+the+%5Cvalign+column+widths%0A%5Csetlength%7B%5Chsize%7D%7B50pt%7D+%0A%25+Because+%5Cvalign+can+be+placed+in+a+%5Cvbox+or+%5Chbox+we+can+use+%0A%25+%5Cfbox+directly%0A%5Cfbox%7B%5Cvalign%7B%0A%5Ctabskip10pt%23%26%0A%5Ctabskip15pt%23%26%0A%5Ctabskip20pt%23%5Ccr%0AA%26B%26C%5Ccr%0AE%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

ينتج هذا المثال المخرجات التالية:

![](/files/82cfa13c5b034cc91460b8325752483a6609c8d9)

ومرة أخرى، الرسم التالي نسخة أكبر ومُلوّنة ومشروحة من الجدول الناتج عن المثال السابق:

![](/files/1e18a34265cf08829ebab1462cd4c300956edb28)

كما هو الحال مع `\halign` المثال، توجد 4 حالات من `\tabskip` الأمر. ومع ذلك، مع `\valign` الجدول `\tabskip` يُدرج بين صفوف الجدول:

1. `\tabskip5pt` يُستخدم خارج الجدول ويضبط `\tabskip` القيمة المطبقة قبل (فوق) الخلية الأولى في كل عمود.
2. `\tabskip10pt` يُضبط في قالب الخلية الأولى لـ $$\langle$$⁠`المقدمة`⁠$$\rangle$$ والذي يؤثر في المسافة بين $$\langle$$⁠خلية$${}\_1$$⁠$$\rangle$$ و $$\langle$$⁠خلية$${}\_2$$⁠$$\rangle$$ في
3. `\tabskip15pt` يُضبط في قالب الخلية الثانية لـ $$\langle$$⁠`المقدمة`⁠$$\rangle$$ والذي يؤثر في المسافة بين $$\langle$$⁠خلية$${}\_2$$⁠$$\rangle$$ و $$\langle$$⁠خلية$${}\_3$$⁠$$\rangle$$ في
4. `\tabskip20pt` يُضبط في قالب الخلية الثالثة، والأخيرة، لـ $$\langle$$⁠`المقدمة`⁠$$\rangle$$ والذي يؤثر في المسافة المضافة بعد $$\langle$$⁠خلية$${}\_3$$⁠$$\rangle$$، وهي الخلية الأخيرة في كل عمود.

**ملخص/استنتاجات**

* في `\halign` الجدول `\tabskip` يُوضع glue إلى يسار ويمين كل خلية في صف، وبذلك تتباعد أعمدة الجدول.
* في `\valign` الجدول `\tabskip` يُوضع glue فوق وتحت كل خلية في عمود، وبذلك تتباعد صفوف الجدول.

### \tabskip and \noalign

#### استخدام \halign

المثال التالي `\halign` يستخدم المثال `\tabskip` glues ويُظهر أيضًا `\noalign` الأمر، باستخدامه لوضع قواعد متباعدة فوق وتحت صفوف `\halign` جدول. وتُنضَّد تلك القواعد باستخدام `\hrule` الأمر (البدائي) مع المسافة التي ينشئها `\kern`:

```latex
\setlength{\tabskip}{5pt} % اضبط \tabskip خارج الجدول

\halign{
#&#&#&#&#\cr % الـ <preamble>
\noalign{\hrule\kern2pt} % قاعدة متباعدة قبل الصف 1
1&2&3&4&5\cr % الصف 1
\noalign{\kern2pt\hrule\kern2pt} % قاعدة متباعدة بين الصفين 1/2
6&7&8&9&10\cr % الصف 2
\noalign{\kern2pt\hrule\kern2pt} % قاعدة متباعدة بين الصفين 2/3
11&12&13&14&15\cr % الصف 3
16&17&18&19&20\cr % الصف 4---لا قواعد بين الصفين 3/4
\noalign{\kern2pt\hrule} % قاعدة مسافة عند نهاية الجدول
}
```

[افتح هذا المثال في Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+halign\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D10cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%7D+%0A%5Cusepackage%7Bparskip%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B5pt%7D+%25+Set+%5Ctabskip+outside+of+the+table%0A%0A%5Chalign%7B%0A%23%26%23%26%23%26%23%26%23%5Ccr+%25+The+%3Cpreamble%3E%0A%5Cnoalign%7B%5Chrule%5Ckern2pt%7D+%25+Spaced+rule+before+row+1%0A1%262%263%264%265%5Ccr+%25+Row+1%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%5Ckern2pt%7D+%25+Spaced+rule+between+rows+1%2F2+%0A6%267%268%269%2610%5Ccr+%25+Row+2%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%5Ckern2pt%7D+%25+Spaced+rule+between+rows+2%2F3+%0A11%2612%2613%2614%2615%5Ccr+%25+Row+3%0A16%2617%2618%2619%2620%5Ccr+%25+Row+4---no+rules+between+rows+3%2F4%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%7D+%25+Space+rule+at+table+end%0A%7D%0A%5Cend%7Bdocument%7D)

ينتج هذا المثال الجدول الموضح أدناه، وقد أُضيفت إليه تعليقات إضافية لإعادة إنتاج شيفرة (La)TeX والأرقام (1) إلى (4) لترقيم `\noalign` الأوامر، التي تتضمن قواعد وkerns، مع ناتجها المنضد المقابل:

![](/files/0c8579a3e2dc34ae1ce8d422ba9578d7c414a0ab)

يعرض الرسم التالي نسخة ملوّنة من الجدول مع تسميات تُظهر مختلف المسافات/glues في الجدول:

![](/files/678f5aa7f17b22cdd07ef14b82beade237421f12)

لاحظ ما يلي:

* استخدام `\noalign` لإدراج قواعد بين صفوف معيّنة والاستخدام اليدوي لـ `\kern` قيم لوضع بعض المسافة قبل/بعد القواعد. لا تُدرج محركات TeX `\baselineskip` glue بعد القاعدة المنضدة، ولهذا تُدرج المسافة يدويًا باستخدام `\kern` (يمكن استخدام أوامر تباعد أخرى);
* `\baselineskip` تم إدراج glue تلقائيًا بين الصفين 3 و4.

#### استخدام \valign

المثال التالي `\valign` يستخدم المثال البيانات نفسها كما في المثال السابق `\halign`:

```latex
\begingroup
\\setlength{\\parindent}{10pt}
\setlength{\hsize}{50pt}
\setlength{\tabskip}{5pt}
\valign{
#&#&#&#&#\cr
\noalign{\vrule\kern2pt}
1&2&3&4&5\cr
\noalign{\kern2pt\vrule\kern2pt}
6&7&8&9&10\cr
\noalign{\kern2pt\vrule\kern2pt}
11&12&13&14&15\cr
16&17&18&19&20\cr
\noalign{\kern2pt\vrule}
}
\endgroup
```

[افتح هذا المثال في Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+halign\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D10cm%5D%7Bgeometry%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%5Cbegingroup%0A%5Csetlength%7B%5Cparindent%7D%7B10pt%7D%0A%5Csetlength%7B%5Chsize%7D%7B50pt%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B5pt%7D%0A%5Cvalign%7B%0A%23%26%23%26%23%26%23%26%23%5Ccr%0A%5Cnoalign%7B%5Cvrule%5Ckern2pt%7D%0A1%262%263%264%265%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%5Ckern2pt%7D%0A6%267%268%269%2610%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%5Ckern2pt%7D%0A11%2612%2613%2614%2615%5Ccr%0A16%2617%2618%2619%2620%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%7D%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

ينتج هذا المثال الجدول الموضح أدناه، وقد أُضيفت إليه تعليقات إضافية لإعادة إنتاج شيفرة (La)TeX والأرقام (1) إلى (4) لترقيم `\noalign` الأوامر، التي تتضمن قواعد وkerns، مع ناتجها المنضد المقابل:

![](/files/e9dcdafbf1ab8df9456ef5be21b8afb3c4da0f70)

![](/files/aab8c977a64bbe841bf13433003c8dafa3768d5c)

### جدول \valign مع أسطر من النص

المثال التالي

```latex
\setlength{\tabskip}{5pt}
\begingroup % أبقِ التغييرات في \parindent و \hsize محلية
\\setlength{\\parindent}{10pt}
\setlength{\hsize}{75pt}
\valign{
#&#&#\cr
\noalign{\vrule\kern5pt}
يمكن لـ \TeX{} تنضيد
جداولًا معقدة جدًا.&وهنا بعض النص الإضافي
النص.&وأخيرًا، سطر إضافي
في هذا العمود.\cr
\noalign{\kern5pt\vrule\kern5pt}
A&B&C\cr
\noalign{\kern5pt\vrule\kern5pt}
D&E&F\cr
G&H&I\cr
\noalign{\kern5pt\vrule}
}
\endgroup
```

[افتح هذا المثال في Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+valign+command\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D16cm%2Ctextwidth%3D12cm%5D%7Bgeometry%7D%0A%5Cbegin%7Bdocument%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B5pt%7D%0A%5Cbegingroup+%25+Keep+changes+to+%5Cparindent+and+%5Chsize+local%0A%5Csetlength%7B%5Cparindent%7D%7B10pt%7D%0A%5Csetlength%7B%5Chsize%7D%7B75pt%7D%0A%5Cvalign%7B%0A%23%26%23%26%23%5Ccr%0A%5Cnoalign%7B%5Cvrule%5Ckern5pt%7D%0A%5CTeX%7B%7D+can+typeset+very+complex%0Atables.%26Here%27s+a+bit+of+extra+%0Atext.%26And%2C+finally%2C+an+extra+line%0Ain+this+column.%5Ccr%0A%5Cnoalign%7B%5Ckern5pt%5Cvrule%5Ckern5pt%7D%0AA%26B%26C%5Ccr%0A%5Cnoalign%7B%5Ckern5pt%5Cvrule%5Ckern5pt%7D%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%5Cnoalign%7B%5Ckern5pt%5Cvrule%7D%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

ينتج هذا المثال المخرجات التالية:

## تعيين عروض الصفوف وارتفاعات الأعمدة

## مزيد عن الجدول $$\langle$$⁠المقدمة⁠$$\rangle$$


---

# 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/ar/mqalat-mtamqh/15-how-do-tex-engines-typeset-tables-2.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.
