> 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/mzyd-mn-almwdhwaat/20-how-tex-macros-actually-work-part-2.md).

# كيف تعمل وحدات TeX الماكرو فعليًا: الجزء 2

[الجزء 1](/latex/ar/mzyd-mn-almwdhwaat/19-how-tex-macros-actually-work-part-1.md) [الجزء 2](/latex/ar/mzyd-mn-almwdhwaat/20-how-tex-macros-actually-work-part-2.md) [الجزء 3](/latex/ar/mzyd-mn-almwdhwaat/21-how-tex-macros-actually-work-part-3.md) [الجزء 4](/latex/ar/mzyd-mn-almwdhwaat/22-how-tex-macros-actually-work-part-4.md) [الجزء 5](/latex/ar/mzyd-mn-almwdhwaat/23-how-tex-macros-actually-work-part-5.md) [الجزء 6](/latex/ar/mzyd-mn-almwdhwaat/24-how-tex-macros-actually-work-part-6.md)

## مقدمة: قصة بالصور

كما ذُكر في الجزء 1، يجب على TeX أن «يقرأ» كل حرف داخل `.tex` الملف، وتُسمّى هذه العملية القرائية بدقة أكبر *المسح*. تقليديًا، يُشبَّه إدخال TeX (المسح) بأن لدى TeX «عينين» يراقب بهما المدخلات، لذا سنعتمد هذه الاستعارة المجربة ضمن الرسومات أدناه.

### الرسم 1: العيون جاهزة

نفترض أن TeX قد حصل على بعض المدخلات من `.tex` ملف وهو على وشك معالجة سلسلة الأحرف لدينا `مرحبا بالعالم \jobname` الموجودة ضمن فقرة نصية. سيتحقق من كل حرف على حدة ويفحص رمز فئته.

![عيون TeX جاهزة لمسح سطر من النص](/files/dbe5112ca402823497c967936ed2f33bb5a65ddb)

### الرسم 2: معالجة رموز الفئات

في الرسم التالي نرى، بصورة عامة (مع مزيد من التفاصيل أدناه)، كيف يتفاعل TeX مع عدة رموز فئات مختلفة. لاحظ أن هناك 16 رمز فئة بالمجموع، ولكن ولأجل التبسيط، نعرض استخدام ثلاثة فقط: 11 و10 و0. وتصبح رموز الأحرف الأخرى مهمة أثناء عمليات التنضيد في TeX مثل إنشاء الجداول، وتنضيد الرياضيات، والتعرّف على معاملات الماكرو.

![استجابة TeX لعدة رموز فئات مختلفة](/files/02c7dc728aaef237f59065184cab3e6aeb7d0d03)

#### ملاحظات للرسم 2

هنا، نعتبر TeX وهو يقرأ (يمسح) الأحرف التي تُشكّل جزءًا من فقرة نصية. يفحص TeX كل حرف، ويتحقق من رمز فئته، ويتخذ الإجراء المناسب بناءً على رمز الفئة وعلى «الوضع» الخاص بـ TeX (أي الحالة المبنية على ما يقوم به حاليًا).

* **(العيون الخضراء)** سيرى TeX أن كل واحد من تلك الأحرف يحمل رمز الفئة 11 («حرف») وسيُمرِّر تلك الأحرف إلى التنضيد بوصفها جزءًا من الفقرة التي يبنيها. غير أن TeX لا يمرر (يستخدم) رمز الحرف وحده، بل يستخدم زوج الأرقام (رمز الحرف، رمز الفئة) لحساب قيمة عددية مركبة تُسمّى *رمز حرف* (انظر أدناه). وبمجرد إنتاج رمز الحرف هذا، يدخل في عمليات/خوارزميات التنضيد الداخلية الخاصة بـ TeX.
* **(العيون الزرقاء)** يرى TeX حرف مسافة (ASCII 32) برمز الفئة 10 («فواصل») — لاحظ أنه، كما ذُكر، من الممكن جدًا أن يكون رمز الفئة للمسافة (ASCII 32)، أو لأي حرف، قد جرى تغييره إلى قيمة أخرى — قبل أن يقرأه TeX.

إن طريقة معالجة TeX الفعلية للأحرف ذات رمز الفئة 10 («فواصل») تختلف بحسب الوقت/الموضع الذي يراها فيه TeX — أي «الوضع» الحالي لـ TeX. على سبيل المثال، هناك أوقات يكتفي فيها TeX بتجاوزها. هنا، سيعرف TeX أنه اكتشف حرفًا ذا رمز الفئة 10 (وهو مصادفةً مسافة، ASCII 32) أثناء معالجة نص الفقرة، لذا سيحوّله في النهاية إلى ما يُسمّى مادة لاصقة بين الكلمات: نوع من المسافات المرنة التي يمكن أن تتمدد أو تنكمش.

* **(العيون الحمراء)** هنا، لاحظ TeX حرفًا يحمل رمز فئة مهمًا جدًا: 0 (حرف الهروب).

حرف الهروب—*أيّ* حرف يحمل رمز الفئة 0—يخبر TeX بالانتقال إلى وضع قراءة خاص وفحص (قراءة) الأحرف اللاحقة بعناية لأنها تُحدِّد اسم *الأمر*، وليس نصًا ليُنسَّق. في أدبيات TeX سترى مصطلح «أمر» يُشار إليه أيضًا باسم *تسلسل تحكم*. بعد رؤية حرف الهروب، يتحقق TeX من رمز فئة الحرف الذي يليه *مباشرةً بعده*؛ وذلك لأن TeX يتعرّف على نوعين من الأوامر:

* أوامر متعددة الأحرف تُسمّى *كلمات تحكم*يأتي بعد حرف الهروب مباشرةً رمز الفئة 11. وتُعدّ كل الأحرف اللاحقة التي تحمل رمز الفئة 11 جزءًا من اسم أمر ( *لا* لا يحمل رمز الفئة 11 — مثل حرف مسافة برمز الفئة 10.
* أوامر أحادية الحرف تُسمّى *رموز التحكم*: الحرف الذي يلي حرف الهروب مباشرةً *لا* لا يحمل رمز الفئة 11.

يمكنك اعتبار حرف الهروب بمثابة ما يدفع TeX إلى «الخروج» من سلوكه المعتاد في المسح واعتماد نهج مختلف للأحرف القليلة التالية — ويُشار إلى ذلك بالمربع الأحمر المنقّط الذي يبيّن أن TeX سيقوم **بدء المسح بحثًا عن أمر**.

### الرسم 3: معالجة رمز الفئة 11 («حروف»)

في الجزء 1 من هذه السلسلة، ذكرنا أن كل حرف يقرأه TeX من مدخلاته يُوصَف برقمين صحيحين:

* رمز الحرف: عدد صحيح يحدّد التمثيل العددي لحرف؛
* رمز الفئة: قيمة من 0 إلى 15 يعيّنها TeX لكل حرف قد يظهر في مدخلاته.

يستخدم TeX هاتين المعلومتين في المرحلة التالية من معالجته: إنشاء رموز الحروف.

يوسّع الرسم 3 الرسم 2 ليُظهر ما يفعله TeX بهذه الأحرف المدخلة التي تحمل رمز الفئة 11 (حرف): إذ ينشئ *رموز حروف*—قيمًا صحيحة يحسبها TeX باستخدام مزيج من رمز فئة ذلك الحرف ورمز الحرف.

**ملاحظة**: في هذا المثال نناقش فقط الأحرف التي تحمل رمز الفئة 11، لكن ينبغي أن تكون على علم بأن TeX ينشئ أيضًا قيم رموز للأحرف المدخلة التي تحمل رموز فئات أخرى — باستثناء رمز الفئة 0 الذي لا يتحول أبدًا إلى رمز: فحرف الهروب يعمل ببساطة كمفتاح «تحويل» لتفعيل معالجة خاصة.

![معالجة TeX للأحرف ذات رمز الفئة 11](/files/8ef06d31a6bc8d97b8e1889a30e86e58d0390e03)

سيُظهر الرسم 5 أدناه ما يفعله TeX عندما يرى حرفًا يحمل رمز الفئة 0 (حرف هروب).

#### ملاحظات للرسم 3: معالجة رمز الفئة 11 («حرف»)

هنا، سنركز على **green** النشاط: ما الذي يحدث عندما يرى TeX أحرفًا تحمل رمز الفئة 11 («حرف»). بعد أن يقرأ TeX حرفًا ويحدّد رمز فئته (هنا هو 11)، فإن ما يفعله TeX بعد ذلك هو *دمج* هذا الزوج من الأرقام في عدد صحيح واحد يُسمّى رمز حرف: وتُمرَّر هذه الرموز (الأعداد الصحيحة) إلى المرحلة التالية من خوارزميات/معالجة التنضيد الداخلية في TeX. وكما ذُكر، سيُنشئ TeX أيضًا رموز حروف للأحرف ذات رموز الفئات الأخرى (أي غير 11)، ونحن هنا نستخدم رمز الفئة 11 كمثال فقط.

كل رمز حرف (عدد صحيح) يربط ربطًا دائمًا حرفَ إدخالٍ برمز الفئة المعيّن لذلك الحرف **في الوقت الذي جرى فيه مسحه (قراءته) بواسطة TeX**: وهذه الحقيقة ذات أهمية حاسمة لفهم سلوك ماكروات TeX/LaTeX. وبالطبع، أثناء المعالجة اللاحقة، سيحتاج TeX أحيانًا إلى تفكيك رمز حرف لتحديد أي زوج (رمز الحرف، رمز الفئة) استُخدم لبناء ذلك الرمز. ومع ذلك، بمجرد أن يُقرأ الحرف عبر عملية إدخال TeX (المسح)، فإن قيمة رمز الحرف التي يحسبها TeX تؤدي إلى أن يصبح ذلك الحرف *بشكل دائم* مقترنًا برمز الفئة المعيّن له *في الوقت الذي قُرئ فيه*.

**حساب رموز الحروف**

تستخدم محركات TeX صيغة بسيطة لحساب رمز حرف، $$T$$، من حرف يحمل رمز الفئة $$C$$ ورمز الحرف $$A$$:

$$T = \text{constant} \times C + A$$

تستخدم المحركات ذات 8 بت، مثل pdfTeX، الصيغة التالية:

$$T = 256\times C + A$$

يجب على المحركات الداعمة لليونيكود، مثل XeTeX أو LuaTeX، استخدام صيغة مختلفة لأن رموز الأحرف في يونيكود يمكن أن تكون أكبر بكثير من الحد الأقصى 255 في عالم ترميز ASCII القديم ذي 8 بت. فعلى سبيل المثال، يستخدم XeTeX:

$$T= 2^{21}\times C + A \hskip5mm \text{(where } A \text{ is a Unicode character code value)}$$

ومرة أخرى، يجدر التنبيه إلى أن الأحرف ذات رمز الفئة 0 لا تُحوَّل إلى رموز حروف: فلرمز الفئة 0 مكانة خاصة جدًا في ترشيح مدخلات TeX، ويُستخدم فقط بوصفه «مفتاحًا» لدفع TeX إلى وضع خاص لمسح الأحرف القليلة التالية. يتناول الرسم 5 هذا الأمر.

### الرسم 4: معالجة رمز الفئة 10 («فاصل»)

تعامل TeX مع الأحرف ذات رمز الفئة 10 («فاصل») يعتمد على ما يعمل عليه TeX حاليًا عندما يكتشف حرفًا ذا رمز الفئة 10 ضمن المدخلات. في مثالنا، يجري TeX معالجة روتينية لفقرة، وسيُحوَّل حرف المسافة، ذو رمز الفئة 10، إلى مادة لاصقة بين الكلمات.

![معالجة TeX للأحرف ذات رمز الفئة 10](/files/7c6d6a94e661fd2ab2af78b223a4cc521b9ff1de)

قد يبدو تعامل TeX مع المسافات غريبًا إلى حد ما، لكن يمكن العثور على نظرة عامة جيدة في الفصلين 1 و2 من [TeX by Topic](http://www.eijkhout.net/texbytopic/texbytopic.html) لـ Victor Eijkhout — يمكنك [تنزيل نسخة PDF مجانية](https://bitbucket.org/VictorEijkhout/tex-by-topic) عبر موقعه الإلكتروني.

على سبيل المثال، عندما يرى TeX حرفًا ذا رمز الفئة 10، فهناك أوقات يقوم فيها TeX بما يلي:

* تجاوز (تجاهل) كلها — مثلًا عندما يكون TeX في الوضع الرأسي؛
* تحويل عدة فواصل إلى فاصل واحد — بتجاوز المسافات الزائدة كما عند معالجة فقرة؛
* امتصاصها — مثل امتصاص مسافة واحدة بعد اسم أمر؛

لاحظ أيضًا، أن هناك أوقاتًا سيقوم فيها TeX أيضًا *بتوليد* مسافات — وذلك بتحويل أحرف نهاية السطر إلى مسافة. إن سلوك/معالجة أحرف المسافة (أي حرف يحمل رمز الفئة 10) يعدّ من «خصوصيات» TeX: ويحتاج الأمر إلى وقت/ممارسة حتى تصبح مألوفًا (ومرتاحًا) مع هذا الجانب من TeX.

### الرسم 5a: معالجة رمز الفئة 0 («حرف هروب»)

في هذا الرسم، يكون TeX قد عالج جميع الأحرف حتى `\` الحرف، الذي يحمل رمز الفئة 0: «حرف الهروب» — سنستخدم سلسلة إضافية من الرسوم لإظهار كيفية معالجة TeX لحرف الهروب وتحديد اسم أمر.

![معالجة TeX للأحرف ذات رمز الفئة 0](/files/f252cf5933f05460f596b91b3c218d855758e975)

### الرسم 5b: البحث عن اسم أمر

في هذا الرسم، ننظر داخل القسم الموجود في المربع الأحمر المنقّط (**بدء المسح بحثًا عن أمر**) لنرى ما يفعله TeX بعد أن يرى حرف الهروب.

![TeX يبحث عن اسم أمر](/files/0f8bab0ed8fd126948d16ba39bd83e4aa0030120)

**ملاحظات للرسم 5b**

* بمجرد التعرّف عليه، يكون حرف الهروب قد أدّى دوره: فقد عمل كمفتاح ولا يشارك في أي معالجة لاحقة — وبالتحديد، فإنه **تحتوي** يُحوَّل إلى رمز حرف.
* ولتسهيل الأمر، سنعيد بعض التفاصيل المذكورة سابقًا. بعد رؤية حرف هروب، يتحقق TeX من رمز فئة الحرف الذي يليه *مباشرةً بعده*؛ وذلك لأن TeX يتعرّف على نوعين من الأوامر:
* * أوامر متعددة الأحرف تُسمّى *كلمات تحكم*: يحمل الحرف الذي يلي حرف الهروب مباشرةً رمز الفئة 11. وتُعدّ كل الأحرف اللاحقة التي تحمل رمز الفئة 11 جزءًا من اسم أمر (*كلمة تحكم*). سيتوقف TeX عن البحث عن الأحرف التي تشكّل جزءًا من اسم الأمر عندما يكتشف أي حرف *لا* لا يحمل رمز الفئة 11 — مثل حرف مسافة برمز الفئة 10.
  * أوامر أحادية الحرف تُسمّى *رموز التحكم*: الحرف الذي يلي حرف الهروب مباشرةً *لا* لا يحمل رمز الفئة 11.
* في مثالنا، أول حرف بعد `\` هي `j` (رمز الفئة 11) وهو ما يخبر TeX بالبحث عن أمر قد يكون (على الأرجح) سلسلة متعددة الأحرف من الأحرف ذات رمز الفئة 11.
* يواصل TeX التحقق من وجود مزيد من الأحرف التي تحمل رمز الفئة 11. وما إن يكتشف حرفًا يحمل أي رمز فئة آخر، مثل مسافة برمز الفئة 10، حتى يعرف TeX أنه وصل إلى نهاية اسم الأمر. وللتأكيد على النقطة: هنا كان حرف المسافة (رمز الفئة 10) هو الذي «أنهى» نهاية الأمر، لكنه كان يمكن أن يكون أي حرف **لم** لا يحمل رمز الفئة 11.

## الجزء 3

في الجزء 3 سنواصل من الرسم 5b لإكمال هذا الجزء من القصة — كيف يحدد TeX أمرًا — ثم ننتقل إلى ما يفعله بعد ذلك. كما سنلقي نظرة أعمق على بعض الجوانب الداخلية لمعالجة TeX — ويمكن تجاوز أجزاء منها في القراءة الأولى، إلا إذا كنت تستمتع فعلًا بالتفاصيل.

[الجزء 1](/latex/ar/mzyd-mn-almwdhwaat/19-how-tex-macros-actually-work-part-1.md) [الجزء 2](/latex/ar/mzyd-mn-almwdhwaat/20-how-tex-macros-actually-work-part-2.md) [الجزء 3](/latex/ar/mzyd-mn-almwdhwaat/21-how-tex-macros-actually-work-part-3.md) [الجزء 4](/latex/ar/mzyd-mn-almwdhwaat/22-how-tex-macros-actually-work-part-4.md) [الجزء 5](/latex/ar/mzyd-mn-almwdhwaat/23-how-tex-macros-actually-work-part-5.md) [الجزء 6](/latex/ar/mzyd-mn-almwdhwaat/24-how-tex-macros-actually-work-part-6.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/ar/mzyd-mn-almwdhwaat/20-how-tex-macros-actually-work-part-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.
