> 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/21-how-tex-macros-actually-work-part-3.md).

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

[الجزء 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)

## حان وقت التوقف!

قبل الانتقال إلى الجزء التالي من هذه القصة، نحتاج إلى مراجعة سريعة: أن نذكّر أنفسنا إلى أين نتجه وأن نجمع أفكارنا للتأكد من أن كل الأفكار الرئيسية في مكانها. وتذكيرًا، فإن مثالنا العملي يعتمد على الافتراض بأن TeX قد قرأ سطرًا من النص يحتوي على `Hello World \jobname` وأن TeX يقوم بصفّ ذلك لإنتاج فقرة.

### الهدف النهائي

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

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

حتى الآن، نظرنا إلى عملية مسح الإدخال في TeX أثناء تحديده للأحرف الفردية واستخدامه رمز الفئة لكل حرف لكي يحدد ما الذي ينبغي فعله بعد ذلك. بعض الأحرف ليست سوى عناصر نص عادية للصفّ (مثلًا، رمز الفئة 11)، لكننا رأينا أيضًا أحرف المسافة (رمز الفئة 10) وأحرف الهروب (رمز الفئة 0). وهناك رموز فئات أخرى لم ننظر إليها، اختصارًا، مثل رمز الفئة 1 («بدء مجموعة»، مثل `{`)، رمز الفئة 2 («إنهاء مجموعة»، مثل `}`) وغيرها. لكل رمز فئة دوره الخاص في مسح مدخلات TeX والمعالجة اللاحقة بواسطة عمليات/خوارزميات البرمجية داخل TeX.

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

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

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

## فما التالي؟

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

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

### من سلسلة أحرف إلى تشغيل أمر: كيف؟

أولًا، لنعد إلى الرسم 5ب من الجزء 2 حيث حدّد TeX أن سلسلة معينة من الأحرف داخل الإدخال تشكل اسم أمر: `jobname`. يشير الرسم 5ب إلى أن على TeX «فحص الجداول الداخلية...». ماذا يعني ذلك *فعليًا*?

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

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

لنبدأ بتشبيه. افترض أنك تقرأ كتابًا وتواجه كلمة غير مألوفة: ماذا تفعل؟ اليوم، من شبه المؤكد أنك «ستلجأ إلى Google»، لكن لنفترض أنك تفضل طريقة أقدم: فتصل إلى قاموس يدرج الكلمات ويقدم معانيها. لدى TeX آلية مماثلة: «قاموس» داخلي يسرد جميع الأوامر المعروفة حاليًا لدى TeX — و«معنى» تلك الأوامر. وبـ«المعنى» نعني نوع الأمر: ماذا يفعل، بالإضافة إلى أي معلومات أخرى قد يحتاجها TeX لتشغيل ذلك الأمر. لاحظ أيضًا أن مصطلح «أمر» يشمل أي ماكروات TeX/LaTeX التي يكتبها المستخدمون/مبرمجو TeX، وكذلك [مئات الأوامر البدائية المدمجة](/latex/ar/mzyd-mn-almwdhwaat/46-tex-primitives-listed-by-tex-engine.md).

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

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

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

![مخطط دالة تجزئة](/files/8b324363001cd59051479ccfed566f3ccc610a9e)

### الرسم 6: من الأحرف إلى معنى الأمر

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

![TeX يحول سلسلة من الأحرف إلى عدد صحيح مكافئ للبحث عن معنى الأمر](/files/c71c74cc1c40674cebb29b34fde6a902b530ce26)

داخليًا، يحتفظ TeX بمتغير يسمى **curcs** (**cur**rent **c**ontrol **s**equence) والذي يُستخدم لتخزين القيمة الصحيحة للأمر الذي يعمل عليه TeX حاليًا — أي، **curcs** يخزن العدد الصحيح المحسوب من اسم الأمر. وهذه ليست القصة كلها تمامًا، إذ توجد تفصيلة أخرى: إذا كان TeX قد قرأ/عالج حرفًا للتو، وليس أمرًا، فسيضبط **curcs** على القيمة 0، ليتذكر أن آخر ما قُرئ كان حرفًا، لا أمرًا.

### ما الذي تعنيه الأوامر بالنسبة إلى TeX

إذا نظرنا إلى مجموعة [الأوامر المدمجة التي توفرها محركات TeX](/latex/ar/mzyd-mn-almwdhwaat/46-tex-primitives-listed-by-tex-engine.md) يمكننا أن نرى أن بعض تلك الأوامر مرتبطة ارتباطًا وثيقًا: فهي تؤدي مهام متشابهة؛ مثلًا، هناك 4 أوامر بدائية تستخدمها جميع محركات TeX لتعريف (إنشاء) الماكروات: `\def`, `\gdef`, `\edef`, `\xdef`. تلك الأوامر الأربعة كلها تعرّف ماكروات، لكن، بطبيعة الحال، يفعل كل منها ذلك بطريقة مختلفة قليلًا. إذا فكرنا في الأمر من منظور برمجي: لدينا هنا 4 أوامر لتعريف الماكروات تقوم، بشكل عام، بالشيء نفسه، لكننا نحتاج إلى الاختيار بينها من أجل تلبية سلوك كل منها.

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

* **كود الأمر**: نوع من «التصنيف العام» يشير إلى ما «نوع» الأمر — مثل أمر «تعريف ماكرو» (أحد `\def`, `\gdef`, `\edef`, `\xdef`); أو أمر «صنع صناديق» (أحد `\hbox`, `\vbox` أو `\vcenter`) وهكذا بالنسبة إلى مئات الأوامر التي تدعمها محركات TeX. كما تُسند إلى الماكروات (الأوامر التي يعرّفها المستخدم) قيمة أمر أيضًا.
* **معدل الأمر**: هذه معلومات تكميلية توفر لـ TeX معلومات محددة عن أمر ما. كما تُسند إلى الماكروات (الأوامر التي يعرّفها المستخدم) قيمة معدل أمر أيضًا — مع أن معدل الأمر مع الماكروات يؤدي دورًا مختلفًا قليلًا عن دوره مع الأوامر البدائية (ففي حالة الماكروات، يشير معدل الأمر إلى مكان تخزين تعريف الماكرو في الذاكرة).

وبجمع هاتين القيمتين، يحددان كل أمر على نحو فريد. فيما يلي أكواد الأوامر ومعدلات الأوامر لأوامر تعريف الماكرو كما استُخدمت في برنامج TeX الأصلي لنوث — لاحظ أن محركات TeX الأخرى قد تستخدم قيمًا مختلفة لكنها تتبع المبدأ نفسه تمامًا:

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

### مراجعة: فهم كل هذه المتغيرات/القيم

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

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

نعم، الأمر مربك: هناك الكثير من المتغيرات وأفكار الرموز تطفو هنا وهناك، لذا لنحاول أن نفهم ذلك.

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

* **curcmd**: (الأمر الحالي) متغير صحيح. يُستخدم لتخزين قيمة *الأمر الحالي* للأمر الجاري معالجته *أو* يخزن الـ *رمز الفئة* للحرف الجاري معالجته؛
* **curchr**: (الحرف الحالي) متغير صحيح، لكن ما يخزنه يعتمد على ما قرأه TeX للتو من إدخاله:
* **الحرف**: إذا كان العنصر الذي قرئ مؤخرًا حرفًا، **curchr** يخزن الـ *الرمزية للحرف*.
* **الأمر**: إذا كان العنصر الذي قرئ مؤخرًا أمرًا، **curchr** يخزن الـ *معدل الأمر*: معلومات إضافية يستخدمها TeX لدعم/توضيح **curcmd**— لأننا رأينا أعلاه أن بعض الأوامر تشترك في نفس قيمة **curcmd**
* **curcs**: (سلسلة التحكم الحالية) متغير صحيح يخزن القيمة المحسوبة من سلسلة الأحرف في اسم الأمر. **curcs** = 0 إذا كان آخر عنصر مقروء حرفًا منفردًا وليس اسم سلسلة تحكم (اسم أمر);
* **curtok**: (الرمز الحالي) متغير صحيح يحتفظ بقيمة الرمز الحالي — والذي يكون إما رمز أمر أو رمز حرف.

فيما يلي المعلومات أعلاه معروضة في جدول:

|                                      |                                                                                                                                                                                                     |                                                                                                                                                                                            |
| ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **المتغير العام المستخدم داخل TeX:** | **عندما يمسح TeX حرفًا:**                                                                                                                                                                           | **عندما يمسح TeX أمرًا:**                                                                                                                                                                  |
| **curcmd**                           | يخزن رمز فئة الحرف الحالي                                                                                                                                                                           | يخزن الـ *كود الأمر*— الذي يحدد «نوع» الأمر الحالي                                                                                                                                         |
| **curchr**                           | يخزن رمز الحرف الحالي                                                                                                                                                                               | يخزن بيانات تكميلية (تسمى الـ *معدل الأمر*) التي توفر معلومات إضافية عن الأمر الحالي                                                                                                       |
| **curcs**                            | 0                                                                                                                                                                                                   | عدد صحيح موجب غير صفري يُحسب (عبر دالة تجزئة) باستخدام سلسلة الأحرف الموجودة في اسم الأمر. يُستخدم للوصول إلى «قاموس» TeX للبحث عن المعنى الحالي لأمر ما — لاستخراج رمز الأمر ومعدل الأمر. |
| **curtok**                           | لمحركات TeX ذات 8 بت، يُحسب *رمزًا مميزًا للحرف* باستخدام الصيغة: $$\text{curtok}=256\times \text{curcmd} + \text{curchr}$$ حيث $$\text{curcmd}$$ هو رمز فئة الحرف و $$\text{curchr}$$ هو رمز الحرف | لمحركات TeX ذات 8 بت، يُحسب *رمز أمر* باستخدام الصيغة: $$\text{curtok}=4095 + \text{curcs}$$                                                                                               |

### ملاحظات إضافية حول الرمز الحالي

بالنسبة إلى الأحرف، يتم الحصول على أكبر قيمة ممكنة للرمز باستخدام أكبر رمز فئة (15) وأكبر رمز حرف، والذي يبلغ في محركات TeX ذات 8 بت 255. نظريًا (في محركات TeX ذات 8 بت)، فإن أكبر قيمة لرمز الحرف، $$\text{curtok}\_{\text{max}}$$، هي:

$$\text{curtok}\_{\text{max}}= 256\times 15 + 255 = 4095$$

ونقول «نظريًا» لأن رمز الفئة 15 يُستخدم لتمثيل «حرف غير صالح» يتسبب في توليد TeX لخطأ: فالحرف غير الصالح لن يتجاوز أبدًا عملية مسح الإدخال في TeX، وبالتالي لن يصبح رمز حرف قط.

بالنسبة إلى الأوامر، فإن الرمز الحالي ($$\text{curtok}$$) يُحسب من $$\text{curtok}=4095 + \text{curcs}$$ لكن بالنسبة إلى الأوامر $$\text{curcs}$$ هو *دائمًا* غير صفري، وبالتالي يستطيع TeX بسهولة تحديد ما يمثله الرمز:

* إذا $$\text{curtok} > 4095$$ فهو رمز أمر؛
* إذا $$\text{curtok} < 4095$$ فهو رمز حرف.

فعليًا، يستخدم TeX الرموز، وهي قيمة صحيحة بسيطة، لـ«تغليف» كل المعلومات التي يحتاج إلى معرفتها عن عنصر قُرئ من الإدخال.

## الجزء 4

في الجزء 4 سنستكشف مجموعة من الماكروات المثال لنوضح دور وغرض `<نص المعامل>` القسم ليعمل كـ«قالب رموز» يمكن إنشاؤه من خلال استخدام رموز الفاصل.

[الجزء 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/21-how-tex-macros-actually-work-part-3.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.
