> 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/53-what-is-a-tex-token.md).

# ما هي "TeX token"؟

## الدافع لسلسلة عن رموز TeX والمفاهيم ذات الصلة

تتناول هذه المقالة الدافع والمنهجية المستخدمين لإنتاج سلسلة من المقالات عن رموز TeX والمفاهيم ذات الصلة [سلسلة مقالات جديدة: رموز TeX والمفاهيم ذات الصلة—لكن لماذا (وكيف)؟](https://www.overleaf.com/blog/521-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how) كما أُشير في تلك المقالة، نعتمد في هذه السلسلة على ما نناقشه ونشرحه من رؤى مكتسبة من نسخة مخصصة مبنية من برنامج TeX الأصلي لنوث—ونستخدمها لإنتاج سلسلة من المقالات تهدف إلى تقديم أوصاف بسيطة وشروحات سهلة المتابعة للمفاهيم الأساسية في TeX.

## المقدمة: ما هدفنا؟

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

نبدأ بتقديم بعض المفاهيم الداخلية المهمة في TeX: *البدائيات*, *رموز الأوامر* و *معدِّلات الأوامر*. ومن هناك، نستخدم مثال ماكرو بسيطًا جدًا لنرى بالضبط كيف يعالج TeX الأمر `\def` والرمز الناتج الذي ينشئه TeX لتمثيل ذلك الأمر.

نختتم بنظرة موجزة إلى كيفية إنشاء TeX رموزًا لتمثيل المحارف وكيف أن `\catcode` تُصبح بالفعل ملتصقة بشكل دائم برمز المحرف—وهو أمر يُذكر كثيرًا في كتب TeX، لكننا نرى هنا بالضبط كيف يتحقق ذلك.

يوضح الرسم التالي الرحلة التي سنلخصها—من نص الإدخال إلى رموز TeX:

![الرحلة من مدخلات TeX إلى رمز TeX.](/files/07892740557d869dae574fbfee43553574ab3fe0)

## لكن أولًا: التعليمات البدائية ورموز الأوامر

كل محرك TeX (TeX لنوث، pdfTeX، XeTeX، LuaTeX) يفهم عددًا من الأوامر المدمجة: ما يُسمى *البدائيات*—وهي الأوامر الأساسية البنائية التي تقوم عليها قابلية TeX للبرمجة. وتُسمى «بدائية» لأنها، على عكس الماكروات المعرّفة من قِبل المستخدم، لا تُبنى من أوامر أخرى ولا يمكن اختزالها أكثر إلى تعليمات أبسط. بالنسبة إلى TeX لنوث يوجد نحو 320 تعليمة بدائية—مع أننا ينبغي أن نلاحظ أن محركات TeX الأخرى مثل pdfTeX وXeTeX وLuaTeX قد أضافت جميعها أوامر جديدة إلى برنامج نوث الأصلي، وستحتوي على تعليمات بدائية غير موجودة في برنامج TeX لنوث.

داخليًا، يخصّص TeX رقمًا *كود الأمر* لكل الأوامر—سواء كانت ماكروات معرّفة من قِبل المستخدم أو تعليمات بدائية مدمجة. هذه رموز الأوامر غير متاحة لمستخدم TeX؛ فهي ببساطة جزء من الآلية الداخلية لمعالجة TeX، لكن من المفيد معرفتها لاحقًا عند مناقشة رموز TeX المميزة.

تتقاسم مجموعات الأوامر ذات الوظائف المرتبطة رمز الأمر نفسه. على سبيل المثال، `\def`, `\gdef`, `\edef` و `\xdef` تعليمات البدائية كلها تُستخدم لتعريف الماكروات وتتشارك رمز الأمر 97 (في TeX لنوث). من الواضح أن كلًا من تعليمات تعريف الماكرو الأربع تلك ينشئ الماكروات بطريقة مختلفة قليلًا؛ وبالتالي يحتاج TeX أثناء المعالجة إلى طريقة للتمييز بينها.

رمز الأمر وحده (مثل 97) لا يمكنه أن يخبرك أي أمر لإنشاء الماكرو هو المقصود؛ لذا، كما قد تتوقع، يُمنح كل أمر في TeX معلومة إضافية تُسمى *معدل الأمر* (انظر الأمثلة أدناه).

### معدِّلات الأوامر: نوعان

تنقسم معدلات الأوامر إلى فئتين سنشير إليهما على أنهما «النوع 1» و«النوع 2»—TeX لا يستخدم هذه المصطلحات، لكن من الملائم فعل ذلك هنا:

* **النوع 1**: قيم صحيحة بسيطة يمكن لTeX، عند الحاجة، استخدامها للتمييز بين الأوامر التي تتشارك رمز الأمر نفسه.
* **النوع 2**: قيمة صحيحة تمثل موقعًا رقميًا في ذاكرة TeX تُخبر TeX إلى أين يجب أن يذهب للبحث عن معلومات ذلك الأمر. على سبيل المثال، ينطبق هذا على الأوامر (الماكروات) المعرّفة من قِبل المستخدم، حيث يُخبر مُعدِّل الأمر TeX بمكان تخزين تعريف الماكرو في الذاكرة.

#### معدِّلات الأوامر من النوع 1 (مثال)

كما ذُكر، في TeX لنوث فإن الأوامر البدائية الأربعة لتعريف الماكروات: `\def`, `\gdef`, `\edef`, `\xdef` كلها تتشارك رمز الأمر 97: ويتم التمييز بينها عبر معدِّلات أوامرها، المدرجة في الجدول التالي:

| الأمر   | <p>رمز<br>الأمر</p> | <p>مُعدِّل<br>الأمر</p> |
| ------- | ------------------- | ----------------------- |
| `\def`  | 97                  | 0                       |
| `\gdef` | 97                  | 1                       |
| `\edef` | 97                  | 2                       |
| `\xdef` | 97                  | 3                       |

وكمثال ثانٍ، قرر نوث تنفيذ الأوامر `\openout`, `\write`, `\closeout`, `\special`, `\immediate` و `\setlanguage` كتوسعات» لTeX، فقط لإظهار كيف يمكنك إضافة تعليمات بدائية جديدة إلى TeX. في هذه الحالة، لا تتشارك تلك الأوامر فعليًا «وظائف متشابهة» إلا أن نوث قرر تجميعها معًا لغرض شرح كيفية توسيع TeX. تُصنَّف هذه الأوامر الستة على أنها «توسعات» وتُجمع معًا بقيمة رمز الأمر 59، لكن لكل منها مُعدِّل أمر مناسب يميّزه عن غيره:

| الأمر          | <p>رمز<br>الأمر</p> | <p>مُعدِّل<br>الأمر</p> |
| -------------- | ------------------- | ----------------------- |
| `\openout`     | 59                  | 0                       |
| `\write`       | 59                  | 1                       |
| `\closeout`    | 59                  | 2                       |
| `\special`     | 59                  | 3                       |
| `\immediate`   | 59                  | 4                       |
| `\setlanguage` | 59                  | 5                       |

#### معدِّلات الأوامر من النوع 2 (شرح موجز)

على الرغم من أن جميع معدِّلات الأوامر أعداد صحيحة، فإن معدِّلات النوع 2 تحتاج إلى بعض الشرح الإضافي. يُشار إلى هذه المعدِّلات في TeX على أنها «مؤشرات» لأنها تشير إلى موقع في الذاكرة يمكن لـTeX أن يجد فيه معلومات إضافية عن ذلك الأمر. قد يبدو هذا غامضًا قليلًا، لكن طريقة استخدام TeX لهذه المؤشرات للبحث عن المعلومات متنوعة جدًا، وسيؤدي شرح أكثر تفصيلًا إلى التشتيت عن الهدف الأساسي لهذه المقالة. وقد يساعد مثال واحد: الماكروات. عندما يُعرَّف أمر ماكرو، سيحتاج TeX إلى تخزين النص البديل في مكان ما بالذاكرة. كما سنرى أدناه، فإن الماكروات المعرّفة من قِبل المستخدم لها رموز أوامر بين 111 و114 مع مُعدِّل أمر هو مؤشر داخل الذاكرة يُخبر TeX أين يُخزَّن نصه البديل (تعريف الماكرو).

### رموز الأوامر: قابلة للتوسيع وغير قابلة للتوسيع

في الشيفرة المصدرية لTeX لدى نوث تتراوح رموز الأوامر من 0 إلى 120—لاحظ أن بعض الرموز ضمن هذا النطاق مخصصة حصريًا للاستخدام الداخلي المتخصص، ولا تُسنَد إلى أوامر متاحة للمستخدم. ومن الجدير بالذكر أن محركات TeX الأخرى مثل pdfTeX وXeTeX وLuaTeX قد أضافت جميعها أوامر جديدة إلى مجموعة نوث الأصلية، وستتضمن مزيدًا من التعليمات البدائية، وبالتالي رموز أوامر مقابلة؛ ومع ذلك، فإن المبادئ الموضحة هنا هي جوهرية في جميع محركات TeX المشتقة من الشيفرة المصدرية لنوث.

تنقسم مجموعة رموز الأوامر إلى مجموعتين رئيسيتين:

* *الأوامر غير القابلة للتوسيع*: لها رموز أوامر أقل من أو تساوي 100؛
* *الأوامر القابلة للتوسيع*: لها رموز أوامر أكبر من 100، وحتى قيمة قصوى تبلغ 120. ويشمل النطاق من 101 إلى 120 الماكروات المعرّفة من قِبل المستخدم بالإضافة إلى أوامر مثل `\csname`, `\expandafter` و `\the`.

تؤدي الأوامر غير القابلة للتوسيع عادةً عملية إسناد قيمة إلى معلمة داخلية أو تُنتج مباشرةً مادة يمكن تنضيدها. وتعمل الأوامر القابلة للتوسيع عادةً على «حقن» تيار من الرموز في نشاط المعالجة الحالي لدى TeX أو تعديل ترتيب معالجة الرموز.

كما ذُكر أعلاه، تُمنح جميع الماكروات (الأوامر المعرّفة من قِبل المستخدم) رموز أوامر بين 111 و114: وتعكس القيم المختلفة ما إذا كان الماكرو قد عُرِّف على أنه `\long`, `\outer`، أو كليهما أو لا شيء منهما. إليك مثالًا:

| نوع الماكرو          | مثال                           | تعليق                   |
| -------------------- | ------------------------------ | ----------------------- |
| غير طويل، وغير خارجي | `\def\ohyeah{....}`            | `\ohyeah` رمز الأمر=111 |
| طويل، وغير خارجي     | `\long\def\ohyeah{....}`       | `\ohyeah` رمز الأمر=112 |
| غير طويل، وخارجي     | `\outer\def\ohyeah{....}`      | `\ohyeah` رمز الأمر=113 |
| طويل وخارجي          | `\long\outer\def\ohyeah{....}` | `\ohyeah` رمز الأمر=114 |

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

## الرحلة من نص الإدخال إلى رموز TeX

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

افترض أن ملف إدخال TeX لديك يحتوي على السطر التالي:

```latex
\def\ohyeah{Overleaf is cool!}
```

مع بدء TeX في معالجة هذا السطر من الإدخال، فإنه يتحقق من `\catcode` لكل محرف، ويرى أن المحرف الأول هو `\` (المحرف الأول من `\def`). يكتشف (يبحث عنه في جدول داخلي) أن `\` لديه `\catcode` 0، ما يعني أنه يقدّم بداية *تسلسل تحكم*. وبالطبع يمكنك إعادة تعريف أي محرف ليكون له `\catcode` 0، لكننا سنفترض أن التعريفات التقليدية لPlain TeX أو LaTeX هي المستخدمة.

وبمعنى أدق، فإن المصطلح *تسلسل تحكم* له فئتان فرعيتان: *كلمة تحكم* و *رمز تحكم أحادي الحرف*:

* *كلمة تحكم*: تسلسل من المحارف ذات `\catcode` حرفية (11);
* *رمز تحكم أحادي الحرف*: محرف واحد له `\catcode` هو *تحتوي* حرفية (11).

في هذه المرحلة، يكون `\` المحرف قد أدى مهمته وهو الآن انتهى. وعند اكتشاف محرف هروب، تكون استجابة TeX هي البدء بقراءة جميع المحارف اللاحقة في الإدخال بهدف اكتشاف كلمة تحكم أو رمز تحكم.

بعد `\`الفاصل الأول، يكتشف TeX مباشرةً `d`: محرفًا تكون `\catcode` هي 11، مما يخبر TeX أنه وجد أول حرف في *كلمة تحكم*. ويواصل فحص المحارف اللاحقة حتى يكتشف في النهاية محرفًا لا يكون *لا* قد `\catcode` حرفيًّا (11). كل المحارف اللاحقة (بعد `\`الأولي) `\catcode` التي تحمل القيمة 11 (حرفية) تُعتبر مكوِّنة لاسم كلمة تحكم: أي اسم أمر—قد يكون ماكروًا أو تعليمة بدائية، لكن TeX لا يعرف بعدُ أي نوع من الأوامر هو. في هذه المرحلة، يكون مجرد سلسلة من المحارف.

إذًا، في مثالنا يواصل TeX المسح بسلاسة، يفحص كل محرف، حتى يصل إلى `\` لـ `\ohyeah` الأولي الذي لديه أيضًا `\catcode` 0. يدرك TeX أنه قد تجاوز في المسح الحد المطلوب، ويعيد ذلك `\` برفق إلى تيار النص بحيث يصبح المحرف التالي الذي سيُرى أثناء المزيد من مسح النص. في هذه المرحلة، يكون TeX قد حدد سلسلة (`def`) يعرف أنها تشكل نص كلمة تحكم تتألف من ثلاثة محارف، لكل منها `\catcode` 11 (`d`, `e` و `f`). وما يحتاج TeX إلى فعله الآن هو معرفة ما الذي `def` يعنيه: ماذا يفعل به؟ وكما قد تكون توقعت، يحتاج TeX إلى العثور على رمز الأمر ومعرِّف الأمر لـ `def` حتى يتمكن من تحديد ما ينبغي فعله بهذا الأمر.

## تحويله إلى قيمة تجزئة

بعد اكتشاف كلمة تحكم (`def`)، فإن أول ما يفعله TeX هو «تحويل» سلسلة المحارف (`def` في مثالنا) إلى عدد صحيح باستخدام ما يسمى دالة تجزئة. لا نحتاج إلى القلق كثيرًا بشأن التفاصيل؛ يكفي وصف عام. في الجوهر، ينظر TeX إلى كل محرف في كلمة التحكم التي اكتشفها للتو ويستخدم قيمة كود ASCII (أو قيمة Unicode في XeTeX/LuaTeX) لكل محرف لحساب عدد يُسمى قيمة التجزئة: إنه ببساطة عدد صحيح.

وكجزء من عملية حساب التجزئة هذه، سيتحقق TeX أيضًا مما إذا كانت سلسلة المحارف في كلمة التحكم المكتشفة حديثًا معروفة لديه بالفعل. ويُخزَّن النص المقروء للبشر لجميع الأوامر، سواء كانت تعليمات بدائية أو ماكروات معرّفة من قِبل المستخدم، في منطقة تخزين داخلية تُسمى *مخزن السلاسل*. يجب على TeX فعل ذلك لأنه قد يحتاج إلى إخراج الاسم المقروء للبشر لأمر ما—على سبيل المثال عندما يحتاج TeX إلى الإبلاغ عن خطأ وتقديم اسم الأمر المخالف. فمثلًا، ماكرونا `\def\ohyeah{Overleaf is cool!}` يعرّف أمرًا جديدًا يُسمى `\ohyeah` وسيحتاج TeX (في مرحلة لاحقة) ليس فقط إلى حساب قيمة تجزئة لـ `ohyeah` (*بدون* المحرف الأول `\` )، بل سيحتاج أيضًا إلى تخزين سلسلة النص (المقروءة للبشر) في حال احتاج إلى استخدامها في الإبلاغ عن الأخطاء (أو مهام أخرى).

إذا أردت مزيدًا من التفاصيل حول عمليات TeX لمعالجة السلاسل فقد كتبت عن ذلك في [مدونتي الشخصية](http://www.readytext.co.uk/?p=3590).

والنتيجة النهائية هي أن سلسلة المحارف التي تمثل الأمر `def` تُحوَّل إلى القيمة العددية 1218 (وهي القيمة الفعلية التي يحسبها TeX). في هذه المرحلة، لم تعد المحارف الفردية `d`, `e` و `f` جزءًا من القصة الرئيسية—فقد قُرئت من المدخلات وأدت وظيفتها: من الآن فصاعدًا، يتعلق الأمر كله بالأعداد الصحيحة و *رموز*—وسنرى قريبًا ما هو الرمز المميز بالفعل! داخليًا، يشير TeX إلى أرقام قيم التجزئة هذه على أنها *تسلسل التحكم الحالي* لكن في الشيفرة المصدرية يُختصر هذا المصطلح إلى متغير يُسمى `curcs`. إن الشيفرة المصدرية لTeX مليئة بأسماء متغيرات قصيرة جدًا، وغالبًا ما تكون غامضة إلى حد ما.

لكن ماذا يفعل TeX *فعليًا* مع هذه القيمة العددية الجديدة البالغة 1218؟ كيف يعرف TeX أن السلسلة الأصلية `def`، الممثلة الآن بالعدد 1218، تشير فعليًا إلى تعليمة لتعريف ماكرو؟ الجواب هو أن لدى TeX ما يشبه «خزانة ملفات» داخلية يخزن فيها المعنى والقيمة الحالية لكل أمر يعرفه حاليًا—سواء كان ذلك الأمر ماكروًا معرّفًا من قِبل المستخدم أو تعليمة بدائية مدمجة. والسبب الذي جعل TeX يبذل عناء تحويل `def` إلى قيمة التجزئة 1218 (المخزنة الآن في المتغير المسمى `curcs`) هو استخدامها للبحث عن *ومعناه* لـ `def`. وبالطبع سيكرر TeX تمرين حساب التجزئة هذا لجميع كلمات التحكم التي يكتشفها في المدخلات—مع أن كلمات التحكم المختلفة تعطي، بالطبع، قيمًا صحيحة مختلفة من دالة التجزئة: وهذه هي الفكرة كلها.

تُسمى «خزانة الملفات» الداخلية لدى TeX *جدول المكافئات* وهو موضوع القسم التالي.

### الرجوع إلى جدول المكافئات

ولتلخيص ما سبق، لنرَ ما تعلمناه حتى الآن:

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

يحتاج TeX الآن إلى معرفة ما الذي يعنيه *تسلسل التحكم الحالي* المكتشف حديثًا بالفعل—فماذا يفعل TeX به؟

#### ملاحظة حول التجميع: الحاجة إلى حفظ المعلومات واستعادتها

هنا سنأخذ استطرادًا قصيرًا لتذكير أنفسنا بأن TeX لديه القدرة على حفظ المعلومات واستعادتها: أي أنه يمتلك شكلًا من أشكال «الذاكرة» المدمجة.

ينبغي لأي شخص كتب حتى أبسط ماكرو أن يكون على دراية بآلية التجميع في TeX—على سبيل المثال، باستخدام `\def` لإنشاء ماكروات داخل مجموعة. ما لم تطبق `\global` بادئة `\def`على الماكروات المنشأة بـ-والمعرّفة داخل مجموعة، فإن قيمة ذلك الماكرو أو معناه لا يستمر إلا داخل تلك المجموعة (والمجموعات الفرعية تحتها): وتضيع تعريفاته عند انتهاء المجموعة. على سبيل المثال، إذا عرّفت ماكروًا بسيطًا داخل مجموعة، مثل هذا:

```latex
{\def\foo{Hello}}
```

وحاولت استخدام `\foo` خارج المجموعة

```latex
{\def\foo{Hello}}% \foo مُعرَّف داخل مجموعة (ملاحظة: بدون استخدام \global)
\foo %<--- لم يعد معرَّفًا، وهو الآن غير معرّف
```

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

```latex
\def\foo{Goodbye}
\foo\par% يخرج Goodbye
{\def\foo{Hello}% أُعيد تعريفه داخل مجموعة:
{داخل المجموعة من المستوى الثاني: \foo\par}}% عند استخدامه داخل المجموعة من المستوى الثاني: يُخرج \foo Hello
خارج المجموعة تُستعاد القيمة القديمة: \foo\par% يخرج Goodbye
```

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

### جدول المكافئات: بالقياس

ولشرح جدول المكافئات سنسير بالقياس. سنواصل استخدام فكرة خزانة الملفات ذات الأدراج الصغيرة الآلاف، وكل درج منها مُعنون بعدد صحيح فريد. في هذه المرحلة من المعالجة يقول TeX، عمليًا:

«حسنًا، لدي هذه القيمة العددية 1218 التي حسبتها للتو وحفظتها في متغير يُسمى `curcs`. الآن أحتاج إلى معرفة ما تعنيه: ولأفعل ذلك سأذهب وأبحث في الدرج رقم 1218 من خزانة الملفات لأرى ما المكتوب فيه.»

يستخدم TeX العدد 1218 لتحديد الدرج الصحيح، وهناك يجد ملاحظة صغيرة تحتوي على ثلاثة أجزاء من المعلومات، أسماؤها هي تلك المستخدمة في الشيفرة المصدرية لTeX:

* **`eq_level:`** مستوى التجميع الذي عُرِّف عنده هذا الإدخال (المستوى 1 = معرّف عالميًا). لقد رأينا آثار التجميع عمليًا أعلاه: وهنا في جدول المكافئات تُخزَّن معلومات مستوى التجميع تلك؛
* **`eq_type:`** رمز الأمر لهذا الإدخال؛
* **`equiv:`** القيمة الحالية لهذا الإدخال—يمكن أن تكون عددًا صحيحًا بسيطًا مثل مُعدِّل الأمر المذكور أعلاه، أو مؤشرًا إلى منطقة في الذاكرة؛ فمثلًا، موقع الذاكرة لمجموعة الرموز التي تمثل تعريف ماكرو.

إذًا، فإن قيمة التجزئة لدينا 1218 (المحفوظة في المتغير `curcs`) استُخدمت، عمليًا، على أنها *المفتاح* للوصول إلى درج يحتوي على المعنى والقيمة الحاليين للأمر الذي كتبناه أصلًا كسلسلة من الأحرف `\def`.

داخل الشيفرة المصدرية لبرنامج TeX، فإن `eq_type` لأي أمر تُخزَّن باستخدام متغير يُسمى `curcmd` وتُخزَّن قيمة `equiv` في متغير يُسمى `curchr`.

### ماذا يقول جدول المكافئات عن def؟

كما ذُكر، فإن قيمة التجزئة المحسوبة لأي أمر تُحفظ في متغير يُسمى `curcs`؛ وبالتالي بالنسبة إلى `def` لدينا `curcs=1218`. وعند النظر إلى الموقع 1218 في جدول المكافئات، سيجد TeX المعلومات التالية:

* `curcmd`=97. هذا هو رمز الأمر لـ `\def`;
* `curchr`=0. هذا هو مُعدِّل الأمر لـ `\def`.

`\def` هي تعليمة بدائية (مضمنة) في TeX، وما لم تكن قد أُعيد تعريفها في مكان ما، فيجب أن يكون الجزء الثالث والأخير من المعلومات `eq_level=1` مما يشير إلى أن معنى `\def` مُعرَّف عالميًا وغير مقصور على مستوى أدنى من التجميع. داخليًا، تلعب قيمة `eq_level` الملحقة بأمر دورًا شديد الأهمية ضمن آلية التجميع في TeX، لكننا لن نتناول هذا أكثر من ذلك.

يلخص الرسم التالي الشرح الذي مررنا به:

![الرحلة من مدخلات TeX إلى رمز TeX.](/files/07892740557d869dae574fbfee43553574ab3fe0)

## رموز TeX للأوامر

بعد أن خضنا في الشروحات أعلاه، يتبين أن الحساب الفعلي لرموز TeX للتسلسلات التحكمية بسيط جدًا حقًا. يستخدم TeX قيمة `curcs` (1218) من دالة التجزئة لإنشاء عدد صحيح بسيط يسميه *الرمز*. الحساب اللازم لتوليد رمز من قيمة `curcs` هي:

```c
curtok = 4095 + curcs
```

يخزن TeX قيمة الرمز الحالي (المحسوبة آخر مرة) في متغير يُسمى `curtok`.

إذًا، في الخلاصة، الرمز المميز في TeX الذي يمثل `\def` الأمر هي `4095 + 1218 = 5313`. وهذا كل ما في الأمر بالنسبة إلى رموز TeX المميزة التي تمثل تسلسلات الأوامر: إنها ببساطة عدد صحيح يُحسب من قيمة في جدول تجزئة مضافًا إليها 4095.

## رموز TeX المميزة للمحارف

عندما يحتاج TeX إلى إنشاء رمز مميز يمثل محرفًا، فإنه يستخدم الحساب التالي البسيط أيضًا:

```c
curtok = 256*catcode + (قيمة ASCII للمحرف)
```

لاحظ أنه تُستخدم حسابات مختلفة قليلًا للمحركات الواعية بـUnicode مثل LuaTeX.

فمثلًا، يكون الرمز المميز في TeX الذي يمثل محرف مسافة بقيمة `\catcode` 10 وقيمة ASCII تساوي 32 هو:

```c
256*10 + 32 = 2592
```

### قوائم الرموز التي تحتوي على محارف

عندما تنشئ قائمة رموز بسيطة مثلًا باستخدام

```latex
\toks100={Hello}
```

سيُنشئ TeX قائمة الرموز التالية ويخزنها في الذاكرة لاستخدامها لاحقًا:

* H→ 256 × 11 + 72 = 2888
* e→ 256 × 11 + 101 = 2917
* l→ 256 × 11 +108 = 2924
* l→ 256 × 11 +108 = 2924
* o→256 × 11 + 111 = 2927

في أعماق ذاكرة TeX، ستوفّر سجل الرموز 100 وصولًا إلى موقع تخزين «Hello»، المحفوظة كخمس قيم رمزية: 2888، 2917، 2924، 2924، 2927. لاحظ أن هذه الرموز تجمع بين كود ASCII لكل محرف وقيمة `\catcode`عند النقطة التي تُحوَّل فيها إلى رموز مميزة (تُرمَّز). وبمجرد أن تُحوَّل المحارف إلى رموز محارف مميزة، تصبح `\catcode` القيمة الملحقة بها دائمة وتُخزَّن داخل الرموز المميزة لاستخدامها لاحقًا عندما يقول المستخدم مثلًا `\the\toks100`.

كما ذُكر، يُحسب الرمز المميز للمحرف من `256*catcode + (قيمة ASCII)` بينما يُحسب الرمز المميز لتسلسل الأوامر من `4095 + curcs` حيث `curcs` هي قيمة التجزئة لكلمة التحكم (سلسلة نصية لأمر كتبه المستخدم) التي يكتشفها TeX في المدخلات. ومن الجدير بالذكر أن رموز المحارف المميزة تكون دائمًا أقل من 4095. وبالتالي يستطيع TeX بسهولة تحديد ما إذا كان رمز معين يمثل تسلسل تحكم (أمرًا) أم محرفًا، ثم يحدد أي تسلسل تحكم أو محرف و `\catcode` الزوج مشفَّر داخل ذلك الرمز.


---

# 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/53-what-is-a-tex-token.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.
