> 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/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md).

# كيف تعمل \expandafter: يستخدم TeX قوائم رموز مؤقتة

[الجزء 1](/latex/ar/mqalat-mtamqh/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md) [الجزء 2](/latex/ar/mqalat-mtamqh/22-how-does-expandafter-work-the-meaning-of-expansion.md) [الجزء 3](/latex/ar/mqalat-mtamqh/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md) [الجزء 4](/latex/ar/mqalat-mtamqh/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md) [الجزء 5](/latex/ar/mqalat-mtamqh/17-how-does-expandafter-work-a-detailed-macro-case-study.md) [الجزء 6](/latex/ar/mqalat-mtamqh/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.md)

## التوسيع وقوائم الرموز الداخلية

حتى الآن استكشفنا الرموز، وقوائم الرموز، والمبادئ الأساسية وراء مفهوم TeX للتوسيع. في هذا القسم سنستخدم البدائية في TeX `\jobname` لإدخال جانب مهم من معالجة التوسيع: استخدام TeX لـ *قوائم الرموز المؤقتة*—وهي *أساسي* جانب من كيفية `\expandafter` عملها، كما سنرى لاحقًا في هذه السلسلة من المقالات.

`\jobname` هي بدائية قابلة للتوسيع في TeX يؤدي توسعها إلى إنشاء سلسلة من رموز الأحرف التي تمثل اسم ملف الإدخال الرئيسي `.tex` الملف. على سبيل المثال، لنفترض أن لدينا النص التالي جزءًا من `.tex` ملفًا باسم `mycode.tex`:

```
    اسم ملفي هو \jobname .tex %لاحظ المسافة بعد \jobname
```

سيتم تنضيده هكذا

```
    اسم ملفي هو mycode.tex
```

عندما نستخدم `\jobname` الأمر، فإن الأحرف الناتجة المنضدة لا تُقرأ من ملفك المادي `.tex` ، فمن أين تأتي: أين يخزن TeX/يقرأ تلك الرموز؟ بشكل غير مرئي للمستخدم (أي في أعماق TeX نفسه) فإن عملية التوسيع لـ `\jobname` تنشئ قائمة رموز مؤقتة مكوّنة من سلسلة من رموز الأحرف التي تمثل اسم ملفك. وبمجرد أن `\jobname` أنشأ قائمة الرموز تلك، يقوم TeX مؤقتًا «بتحويل نظره» بعيدًا عن مصدر الإدخال الحالي (هنا، `.tex` ملفنا) لقراءة الرموز (رموز الأحرف) من قائمة الرموز المؤقتة تلك. عندما يحتاج TeX إلى رمز إدخال آخر، فإنه سيقرأ رمزه التالي من تلك القائمة الداخلية ويواصل ذلك حتى يصل إلى نهاية القائمة؛ وعند تلك النقطة يستأنف TeX قراءة الرموز من مصدر الإدخال السابق الذي، هنا، سيكون نصًا مقروءًا من ملف الإدخال الخاص بنا `.tex` .

كما هو موضح في الرسم التالي، يستأنف TeX قراءة `.tex` ملف الإدخال عند الموضع نفسه الذي توقف عنده بعد معالجة `\jobname`—بعد قراءة حرف المسافة ولكن قبل قراءة الحرف «.» . النقطة (.)، عمليًا، تكون بانتظار أن تُقرأ من مخزن إدخال TeX—وهو منطقة صغيرة من ذاكرة TeX مصممة للاحتفاظ بسطر من النص المقروء من `.tex` الملف—يقرأ TeX ملفك ويعالجه `.tex` ملفًا واحدًا في كل مرة، ولا يقرأ الملف بأكمله إلى الذاكرة.

عند دراسة الرسم البياني التالي، اقرأ من الأسفل واعمل صعودًا لتتبع تدفق العملية.

![كيف يوسّع TeX \jobname](/files/b224990d9380227b5c1114b48c592d3ffa336df1)

بالعودة إلى مناقشتنا عن التوسيع، يمكننا ملاحظة أن توسع `\jobname` أدى إلى `\jobname` الأمر (الرمز) بأن يكون *إزالته* من الإدخال و *استبداله* مع رموز ناشئة من التوسيع: قائمة الرموز المؤقتة التي أُنشئت للاحتفاظ باسم `.tex` الملف.

الأوامر القابلة للتوسيع (مثل `\jobname`) ليست البدائيات الوحيدة في TeX التي «تنشئ وتستخدم سرًّا» قوائم رموز لتحقيق تأثيرها. على سبيل المثال، فإن الأمرين `\uppercase` و `\lowercase` كلاهما ينشئان قوائم رموز داخلية لتغيير حالة وسيطهما. وبمجرد إنجاز عمل تغيير الحالة، ينتقل TeX لقراءة رموز الأحرف من قوائم الرموز التي أنشأتها تلك الأوامر. قوائم الرموز هي آلية «تخزين بيانات الرموز» الوحيدة في TeX—باستثناء كتابة البيانات إلى ملف قرص مادي.

### مصادر الرموز: TeX لاعب ماهر في التلاعب

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

لنفترض أننا نريد ماكرو بسيطًا ينسق اسم `.tex` ملف:

```
    \def\myfile{اسم ملفي هو \jobname .tex}
```

لاحقًا، في وقت ما من `.tex` ملفنا نستدعي الماكرو `\myfile`: مؤقتًا، ينتقل TeX من إنشاء/قراءة الرموز عبر النص في ملف النص الخاص بك (`.tex`) إلى قراءة الرموز من `\myfile` التعريف (قائمة الرموز) المخزن في ذاكرته. عندما ينفذ TeX `\myfile` الماكرو (يعالج رموزه) سيكتشف رمزًا يمثل `\jobname` الأمر، الذي يؤدي توسيعه إلى إنشاء قائمة رموز مؤقتة أخرى يجب على TeX أن يقرأ منها الرموز. حتى في هذا السيناريو البسيط، على TeX إدارة ثلاثة مصادر للإدخال:

1. موقع `.tex` ملف نص يحتوي على `\myfile` الماكرو؛
2. قائمة الرموز التي تخزن تعريف `\myfile` الماكرو؛
3. قائمة رموز أنشأها `\jobname` الأمر داخل `\myfile` الماكرو.

أثناء معالجة TeX لمستند، فإنه يبدّل باستمرار بين مصادر الإدخال: الملفات المادية وقوائم الرموز، فكيف يتتبع TeX هذا؟ الجواب هو أنه، داخليًا، تحتفظ محركات TeX بما يسمى [مكدس الإدخال](https://en.wikipedia.org/wiki/Stack_\(abstract_data_type\)) الذي يعمل كنوع من «الذاكرة» التي تسمح لـ TeX بتذكر ما كان يفعله (ومن أين كان يقرأ) أثناء تنقله بين مصادر الإدخال.

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

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

## التعمق أكثر (قراءة اختيارية)

تقدم الأقسام التالية معلومات خلفية إضافية للقراء الذين يستمتعون بالتفاصيل.

### قوائم الرموز الحقيقية

تم إنشاء الرسم التالي باستخدام النسخة المخصصة من TeX لكونث على Overleaf، والتي تتيح الوصول إلى البيانات الداخلية والبُنى البيانية لـ TeX. يعتمد هذا التوضيح لقائمة رموز على النسخة المبسطة المقدمة أعلاه ويتضمن بيانات إضافية، مثل إظهار الأحرف التي تم توليدها بواسطة `\jobname` لها رمز فئة 12، وليس رمز الفئة المعتاد 11. في هذا الرسم، «العقدة» هي مجرد الاسم المعطى لوحدة من وحدة تخزين الذاكرة التي يستخدمها TeX.

![داخل قائمة رموز TeX](/files/522da7c7d2f64537fbc14604365f762d66a4d730)

### كيف يقرأ TeX \jobname ويعالجه

وأيضًا، ولإكمال الصورة، إليك نظرة عامة على «عمليات التفكير» لدى TeX بينما يكتشف `\jobname` في ملف الإدخال الخاص بنا `.tex` في هذا الرسم نرى كيف يكتشف TeX حرف هروب (`\` برمز فئة 0)، ويعالج تسلسل الأحرف `jobname`، ويولد رمزًا وينظر في معنى `\jobname` الأمر، حيث سيكتشف TeX أن لديه رمز أمر > 100، ما يشير إلى أنه أمر قابل للتوسيع.

![كيف يمسح TeX عن \jobname ويعالجه](/files/ff3178a84c4c512f3def2303c79101a38e6b7d1d)

[الجزء 1](/latex/ar/mqalat-mtamqh/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md) [الجزء 2](/latex/ar/mqalat-mtamqh/22-how-does-expandafter-work-the-meaning-of-expansion.md) [الجزء 3](/latex/ar/mqalat-mtamqh/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md) [الجزء 4](/latex/ar/mqalat-mtamqh/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md) [الجزء 5](/latex/ar/mqalat-mtamqh/17-how-does-expandafter-work-a-detailed-macro-case-study.md) [الجزء 6](/latex/ar/mqalat-mtamqh/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.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/mqalat-mtamqh/21-how-does-expandafter-work-tex-uses-temporary-token-lists.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.
