> 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/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.md).

# سلسلة جديدة من المقالات: رموز TeX والمفاهيم ذات الصلة—لكن لماذا (وكيف)؟

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

### روابط إلى المقالات

ستتضمن كل مقالة مجموعة من الروابط إلى مقالات أخرى في هذه السلسلة.

* [ما هو «رمز TeX»؟](/latex/ar/mqalat-mtamqh/53-what-is-a-tex-token.md)
* [ما هي «قائمة رموز TeX»؟](/latex/ar/mqalat-mtamqh/54-what-is-a-tex-token-list.md)

## خلفية هذه السلسلة من المقالات

انبثقت الرغبة في كتابة هذه السلسلة من المقالات من قراءة مواد عن TeX كانت تشرح كثيرًا من أنشطة TeX من خلال مفهوم «الرموز» مع «عملية الترميز» الخاصة بـTeX و«قوائم الرموز» والمفاهيم ذات الصلة مثل «توسيع الماكرو» و«الأوامر القابلة للتوسيع». وكلما صادفتُ شروحات متعلقة بـTeX صيغت بمصطلحات «رموز TeX»، كان السؤال نفسه يلحّ عليّ: ما الذي، على وجه التحديد، *هو* رمز TeX؟ كان عليّ أن أكتشف ذلك.

إن نطاق ومحتوى المقالة الأولى، [ما هو «رمز TeX»؟](/latex/ar/mqalat-mtamqh/53-what-is-a-tex-token.md)، بحكم طبيعته، قريب جدًا من «الجانب الصلب من العتاد» كما قد يقول المبرمجون، ولا شك أن «رموز TeX» يمكن تصنيفها على أنها موضوع غامض جدًا للكتابة عنه: فلماذا نتكلف العناء إذن؟ في النهاية، عليك أن تتخذ موقفًا — أو، ربما، قفزةً من الإيمان — مفاده أن آخرين ربما كانوا أيضًا يحاولون فهم الموضوع نفسه، وأن هناك مجالًا لمقال أو مقالين لسد بعض الثغرات. هدفي هو تقديم بعض الشروحات الخلفية المفيدة التي يمكن أن تكمل مواد أخرى قد تقرؤها، والتي قد تساعد، آملًا، على فهم أفضل لبعض المفاهيم الأساسية التي تظهر عندما تتعلم TeX وتستكشف الماكروات والبرمجة.

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

«اكتب المقالات التي كنت تتمنى أن تقرأها» دليل مفيد، وقد حاولت جاهدًا تطبيقه وأنا أكتب هذه السلسلة.

## بعد طرح السؤال، ماذا الآن؟

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

إحدى طرق استكشاف الإجابة عن هذه الأسئلة هي محاولة قراءة الشيفرة المصدرية الأصلية لـTeX في [`tex.web`](https://www.ctan.org/tex-archive/systems/knuth/dist/tex)—من خلال تشغيل [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) لاستخراج توثيق TeX — أو بشراء نسخة من الكتاب [الحواسيب وأنظمة التنضيد، المجلد ب: TeX: The Program](https://www.amazon.co.uk/Computers-Typesetting-TEX-Program-v/dp/0201134373). اشتريت نسخة مطبوعة من الكتاب! من المؤكد أنه من المفيد جدًا أن تكون الشيفرة المصدرية لـTeX منشورة في شكل كتاب، وهناك بالطبع كثير من الشروح المفيدة في أرجاء الكتاب. ومع ذلك، فإن TeX لكونوث مكتوب بلغة باسكال، وبطبيعة الحال تُوثَّق الشيفرة المصدرية بلغة باسكال باستخدام منهجية البرمجة الأدبية لكونوث — حيث تُعرَض الشيفرة في مقاطع صغيرة، لقمةً لقمة. من السهل تقدير كيف أن نهج كنوث في التوثيق يساعد حقًا في برنامج معقد مثل TeX، لكن قراءة الكتاب تتطلب بالفعل قدرًا كبيرًا من الإحالات المتبادلة والتنقل بين الصفحات.

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

وعلى خلاف XeTeX وLuaTeX — اللذين يمكنهما معالجة النص بصيغة UTF-8 ويدعمان ترميز النص Unicode — فإن TeX لكونوث هو محرك 8-بت، ما يعني أنه يفترض أن الأحرف المدخلة تقع ضمن المجال من 0 إلى 255. وعلى الرغم من أن هذا تمييز مهم، فإنه لا *بشكل جوهري* يؤثر على مناقشتنا لرموز TeX، لأننا نتناول موضوعات ومبادئ مشتركة بين جميع محركات TeX: فهي في صميم البرنامج تمامًا.

## كيف يمكنك دراسة رموز TeX؟

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

على مدى بعض السنوات (منذ نحو 2009) كنت أُجمِّع على نحو اعتيادي أحدث إصدار من LuaTeX من شيفرته المصدرية — وهي عملية مباشرة إلى حد كبير بفضل الطريقة الممتازة جدًا التي تُوزَّع بها الشيفرة المصدرية لـLuaTeX. واستنادًا إلى تلك التجربة، أصبحت مهتمًا بأن أفهم بشكل أفضل كيف أبني TeX الأصلي لكونوث من شيفرته المصدرية — وهو *جدًا* اقتراح مختلف تمامًا لأن TeX مكتوب باستخدام منهجية البرمجة الأدبية لكونوث. وقد تم تنفيذ ذلك البناء الشخصي لـTeX، على Windows ولكن باستخدام مترجمات ومجموعات أدوات مفتوحة المصدر، خارج توزيعة TeX Live، وكان مشروعًا مستقلًا. كما تطلّب بناء سلسلة الأدوات اللازمة لتحويل `tex.web` إلى برنامج C يمكن تجميعه ثم تشغيله في مصحح أخطاء لرؤية ما يفعله TeX فعليًا أثناء معالجته لأحرف الإدخال.

استُخدم TeX الأصلي لكونوث بدلًا من pdfTeX أو XeTeX أو LuaTeX لأنني كنت بحاجة إلى نسخة من TeX أقرب ما تكون إلى الشيفرة المصدرية المطبوعة في الكتاب TeX: The Program. نُشر ذلك الكتاب لأول مرة عام 1986، وعلى الرغم من أن TeX شهد بعض التحديثات منذ ذلك الوقت، فإن أحدث إصدار من TeX (3.14159265، الصادر في يناير 2014) قريب بالتأكيد بما يكفي من الشيفرة المصدرية الواردة في الكتاب.

انعكاسًا لمنهجية البرمجة الأدبية لكونوث، تُوزَّع الشيفرة المصدرية لـTeX بصيغة نصية تُسمى WEB: مزيج من توثيق TeX وشيفرة باسكال المصدرية. والفكرة الأساسية هي أنك تستخدم أداتين تُسميان TANGLE وWEAVE تعالجان ملفات WEB لاستخراج إما توثيق TeX أو الشيفرة المصدرية لباسكال:

* [TANGLE](http://tug.org/texinfohtml/web2c.html#tangle-invocation) يستخرج الشيفرة المصدرية لباسكال من ملف WEB
* [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) يستخرج توثيق TeX من ملف WEB

لكن قبل استخراج الشيفرة المصدرية لباسكال، عليك أن تسبق المعالجة المسبقة لملف كنوث `tex.web` لإجراء عدد من التغييرات التي تُمكّن من تحويل شيفرة باسكال الخاصة بـTeX إلى شيفرة C باستخدام عملية تُسمى Web2C. وتُشار إلى خطوة المعالجة المسبقة هذه باسم *تطبيق ملفات التغيير*.

يجب ألا يُجرى أي تعديل مباشر على ملف الشيفرة الأصلي لكونوث (tex.web) بأي شكل؛ بدلًا من ذلك، تطبِّق التعديلات باستخدام ما يُسمى ملفات التغيير (بالامتداد `.ch`تحتوي على التغييرات التي ترغب في تطبيقها على الملف الرئيسي `.web` —مثل `tex.web`. وتُدمَج ملفات التغيير مع الشيفرة المصدرية الأصلية لكونوث — باستخدام برنامج أداة إضافي يُسمى TIE — لإنشاء ملف يُسمى، على سبيل المثال، `mytex.web` الذي تعالجه TANGLE لاستخراج شيفرة باسكال إلى `mytex.pas`. وبمجرد أن يكون لديك ملف مصدر باسكال مناسب، يمكنك تطبيق الخطوات النهائية في عملية Web2C لتحويله إلى ملف شيفرة مصدرية بلغة C يمكنك تجميعه إلى برنامج TeX قابل للتنفيذ. وإذا أردت أن تقرأ عن عملية التحويل Web2C المتعرجة بعض الشيء فهناك مزيد من التفاصيل على [مدونة هذا المؤلف الشخصية](http://www.readytext.co.uk/?p=2529).

والنتيجة النهائية هي برنامج TeX يمكن تشغيله باستخدام برنامج [بيئة Eclipse IDE لـ C/C++](http://www.eclipse.org/home/index.php) للانتقال خطوة بخطوة عبر الشيفرة المصدرية لـTeX (بلغة C) ومشاهدة ما يحدث أثناء مسح المدخلات. وبالتأكيد ليست هذه من أكثر الهوايات تسلية، لأن شيفرة C مُولَّدة آليًا، وهي في بعض المواضع شديدة الصعوبة في المتابعة (تستخدم الشيفرة المصدرية لـTeX عددًا سخيًا جدًا من عبارات GOTO والمتغيرات العالمية). ولا يزال الكتاب TeX: The Program لا يُقدَّر بثمن في المساعدة على التنقل عبر الشيفرة المصدرية بلغة C، رغم أن الكتاب يحتوي على الشيفرة المصدرية لـTeX في شيفرة باسكال مُنسَّقة بشكل جميل.

ولإكمال النقاش، إليك لقطة شاشة مثال تُظهر TeX أثناء تشغيله عبر بيئة Eclipse IDE وقد أُوقِف التنفيذ عند الدالة `getnext()`—وهي في قلب عمليات توليد الرموز في TeX.

![لقطة شاشة تُظهر تنفيذ TeX عبر بيئة Eclipse IDE](/files/9555b5ce65b9d34c09133ca7364140d5fd73e5a1)

الانتقال خطوة بخطوة عبر الشيفرة المصدرية لـTeX باستخدام بيئة Eclipse IDE مفتوحة المصدر لـ C/C++.

## الخلاصات وشكرًا لك

لقد كان كتابة المقالة الأولى وتجميع الأفكار للمشاركات المستقبلية في هذه السلسلة يستغرقان وقتًا كبيرًا بالتأكيد. وأنا ممتن للغاية لجون هامرزيلي وماري آن باينز في Overleaf على دعمهما لفكرة هذه السلسلة وعلى السماح لي بأخذ الوقت اللازم لإجراء مزيد من البحث الخلفي. وآمل أن تنجح هذه السلسلة من المقالات في تحديد الموضوعات ذات الاهتمام المشترك ومعالجتها، وأن تثبت قيمتها لمن يقرؤونها.


---

# 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/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.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.
