> 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/50-the-two-modes-of-tex-engines-ini-mode-and-production-mode.md).

# الوضعان لمحركات TeX: وضع INI ووضع الإنتاج

تملك جميع محركات TeX وضعين «للتشغيل»: وضع «INI» ووضع «الإنتاج»—والأخير ليس إلا الوضع الافتراضي (القياسي) المستخدم لإنتاج المواد المنسقة. وضع INI مختلف إلى حد كبير، وتحتاج إلى استخدام خيار سطر الأوامر لوضع محرك TeX في وضع INI. يمكنك معرفة كيفية القيام بذلك عبر تنفيذ `--help` في سطر الأوامر. على سبيل المثال، مع LuaTeX إذا فعلت

`luatex --help`

فسترى العديد من خيارات سطر الأوامر التي يدعمها هذا المحرك:

```
الاستخدام: luatex --lua=FILE [OPTION]... [TEXNAME[.tex]] [COMMANDS]
   أو: luatex --lua=FILE [OPTION]... \\FIRST-LINE
   أو: luatex --lua=FILE [OPTION]... &FMT ARGS
  شغّل LuaTeX على TEXNAME، وعادةً ما يُنشئ TEXNAME.pdf.
  تُعالج أي أوامر COMMANDS متبقية على أنها مدخلات لـ luatex، بعد قراءة TEXNAME.

  بدلاً من ذلك، إذا بدأت الوسيطة الأولى غير الخيارية بشرطة مائلة عكسية،
  فسيفسّر luatex جميع الوسائط غير الخيارية على أنها سطر إدخال.

  بدلاً من ذلك، إذا بدأت الوسيطة الأولى غير الخيارية بعلامة &، فإن
  الكلمة التالية تُؤخذ على أنها FMT المراد قراءته، متجاوزةً كل شيء آخر. وأي
  وسائط متبقية تُعالَج كما سبق.

  إذا لم تُحدَّد أي وسائط أو خيارات، فسيُطلب الإدخال.

  الخيارات العادية التالية مفهومة:

   --credits                     عرض الاعتمادات والخروج
   --debug-format                تفعيل تصحيح أخطاء التنسيق
   --draftmode                   تفعيل وضع المسودة (لا يُنتج ملف PDF للمخرجات)
   --[no-]file-line-error        تعطيل/تمكين رسائل النمط file:line:error
   --[no-]file-line-error-style  اسم بديل لـ --[no-]file-line-error
   --fmt=FORMAT                  تحميل ملف التنسيق FORMAT
   --halt-on-error               إيقاف المعالجة عند أول خطأ
   --help                        عرض المساعدة والخروج
   --ini                         كن iniluatex، لتفريغ التنسيقات
   --interaction=STRING          تعيين وضع التفاعل (STRING=batchmode/nonstopmode/scrollmode/errorstopmode)
   --jobname=STRING              تعيين اسم المهمة إلى STRING
   --kpathsea-debug=NUMBER       تعيين أعلام تصحيح البحث في المسارات وفقًا لبتات NUMBER
   --lua=FILE                    تحميل وتنفيذ سكربت تهيئة lua
   --[no-]mktex=FMT              تعطيل/تمكين إنشاء mktexFMT (FMT=tex/tfm)
   --nosocket                    تعطيل مكتبة lua socket
   --output-comment=STRING       استخدام STRING كتعليق لملف DVI بدلًا من التاريخ (لا تأثير على PDF)
   --output-directory=DIR        استخدام DIR الموجود مسبقًا كالمجلد الذي تُكتب فيه الملفات
   --output-format=FORMAT        استخدام FORMAT لمخرجات المهمة؛ FORMAT هو 'dvi' أو 'pdf'
   --progname=STRING             تعيين اسم البرنامج إلى STRING
   --recorder                    تفعيل مسجل أسماء الملفات
   --safer                       تعطيل أوامر lua السهلة الاستغلال
   --[no-]shell-escape           تعطيل/تمكين أوامر النظام
   --shell-restricted            تقييد أوامر النظام بقائمة أوامر معطاة في texmf.cnf
   --synctex=NUMBER              تفعيل synctex (انظر man synctex)
   --utc                         تهيئة الوقت إلى UTC
   --version                     عرض الإصدار والخروج

يمكن الحصول على نماذج سلوك بديلة عبر مفاتيح خاصة

  --luaonly                      تشغيل ملف lua ثم الخروج
  --luaconly                     ترجمة ملف lua إلى بايت كود ثم الخروج
  --luahashchars                 البِتّات المستخدمة من قبل مفسّر Lua الحالي لتجزئة السلاسل

انظر الدليل المرجعي لمزيد من المعلومات حول عملية البدء.

أرسل تقارير الأخطاء بالبريد الإلكتروني إلى dev-luatex@ntg.nl.
```

ومن بين تلك الخيارات الكثيرة يوجد اثنان لهما صلة هنا:

```
--ini              كن iniluatex، لتفريغ التنسيقات
--fmt=FORMAT       تحميل ملف التنسيق FORMAT
```

هنا، يشير LuaTeX إلى وضع INI الخاص به بالاسم `iniluatex`. إذن ماذا يعني هذا `iniluatex` (وضع INI) فعلاً؟ هناك تلميح بسيط في خيار سطر الأوامر الثاني الموضح أعلاه:

```
--fmt=FORMAT       تحميل ملف التنسيق FORMAT
```

### وضع INI؟ ملفات التنسيق؟ أنا مرتبك...

حزم الماكرو، مثل LaTeX، هي مجموعات كبيرة من الماكروات المعقدة: إن تحميل ومعالجة النص الخام لجميع الملفات المكوِّنة لها يترتب عليه بعض الوقت وبعض كلفة الحوسبة؛ على سبيل المثال:

* قراءة وفحص عشرات الآلاف من الأحرف النصية الفردية؛
* تحليل ومعالجة وتخزين مئات الماكروات/الأوامر؛
* تهيئة الجداول الداخلية للخطوط وبيانات الفصل بين المقاطع.

يجب أن يحدث كل هذا، وتُخزَّن النتائج في الذاكرة، قبل أن يصبح محرك TeX جاهزًا فعليًا لمعالجة مستند TeX الخاص بالمستخدم الذي يستفيد من الماكروات التي توفرها، على سبيل المثال، مجموعتا الماكرو Plain TeX أو LaTeX. يمكنك التفكير في هذا على أنه عملية تمهيد لمحرك TeX: تحضيرات أساسية قبل أن يكون جاهزًا لمعالجة مستندك.

وربما يعكس ذلك تقنية عصره، إذ توفر محركات TeX اختصارًا لمعالجة ملفات النص المليئة بمجموعات الماكرو: تحميل ملفات ثنائية مُعالجة مسبقًا (*التنسيق*)

عندما يُوضَع محرك TeX في وضع INI، فإن مهمته لا تكون إجراء التنضيد، بل:

1. تحميل وتهيئة جميع الأوامر البدائية الخاصة به، ثم إعداد الحد الأدنى جدًا من catcodes (وأكواد أخرى) حتى يتمكن محرك TeX من بدء المعالجة اللاحقة.
2. وبمجرد الانتهاء من (1)، سيقوم بعد ذلك بتحميل ومعالجة مجموعة ماكرو يوفّرها المستخدم، وتُسمّى «تنسيقًا» (مثل Plain TeX أو مجموعة ماكرو LaTeX).
3. بعد أن يُكمل بنجاح (1) و(2)، سيجري TeX «تفريغًا ثنائيًا للعقل» لكل ما تم تحميله ومعالجته في ذاكرته ويكتبه إلى ملف ثنائي *التنسيق* ملف (مثلاً، `lualatex.fmt`).

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

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

### مثال

ضمن توزيع شيفرة مصدر LaTeX ستجد ملفات بامتداد `.ini` ، على سبيل المثال lualatex.ini، والتي تُستخدم لتوليد `.fmt` ملفات—تلك `.ini` الملفات تحتوي عادةً على شيفرة تهيئة خاصة بالمحرك ثم تتابع بضم ملفات ماكرو LaTeX الأساسية. على سبيل المثال، إذا شغّلت LuaTeX بسطر الأوامر التالي:

`luatex --ini lualatex.ini`

سيكتب LuaTeX ملفًا يسمى `lualatex.fmt`

في وقت كتابة هذا النص، `lualatex.ini` يحتوي على الشيفرة التالية:

```
% tex-ini-files 2016-04-15: lualatex.ini
% كُتب أصلًا في 2008 بواسطة Karl Berry. ملكية عامة.

\input luatexconfig.tex

\begingroup
  \catcode`\{=1 %
  \catcode`\}=2 %
  % إعداد اقتباس اسم المهمة قبل latex.ltx
  % تقوم Web2c و pdfTeX/XeTeX بوضع علامات اقتباس حول أسماء المهام التي تحتوي على مسافات، لكن LuaTeX لا
  % يفعل ذلك على مستوى المحرك. يمكن تغيير السلوك باستخدام
  % دالة استدعاء (callback). في الأصل كان هذا الرمز يُحمَّل عبر lualatexquotejobname.tex
  % لكن ذلك تطلّب حيلة حول latex.ltx: وقد عُدِّل السلوك
  % للسماح باستخدام مسار دالة الاستدعاء مباشرةً.
  \global\everyjob{\directlua{require("lualatexquotejobname.lua")}}
\endgroup

\input latex.ltx
```

`lualatex.ini` يبدأ بضم ملف يسمى `luatexconfig.tex` والذي يقوم ببعض التهيئة الخاصة بـ LuaTeX—كما تتوقع من ملف `.ini` (تهيئة)! وفي السطر الأخير يضم `latex.ltx` الذي يجعل LuaTeX يقرأ ويعالج ماكروات LaTeX الأساسية.

بعد أن ينتهي LuaTeX من معالجة `lualatex.ini` سيكتب ملف التنسيق الثنائي *ملف التنسيق* المسمى `lualatex.fmt`. بمجرد ترجمة شيفرة LaTeX إلى تنسيق ثنائي، يستطيع LuaTeX (أو أي محرك TeX آخر) أن يقرأ بسرعة كبيرة `.fmt` الملف لتمهيد وتهيئة جداولِه الداخلية لتعريفات ماكرو LaTeX والخطوط وما إلى ذلك—فهو لا يحتاج إلى الخضوع للعملية الطويلة المتمثلة في قراءة ومعالجة الآلاف الكثيرة من الأحرف الموجودة في حزمة ماكرو LaTeX.

يمكنك الآن أن تأمر LuaTeX بأن ينسق مستند LaTeX الخاص بك `yourfile.tex` (باستخدام `lualatex` ملف التنسيق) عبر تنفيذ الأمر:

```
luatex --fmt=lualatex yourfile.tex
```

`.fmt` الملفات `.fmt` الملفات تكون عادةً خاصة بمحرك معين: مثلًا، ملفات LuaTeX `.fmt` ليست عادةً قابلة للنقل لاستخدامها مع محرك TeX مختلف: مثلًا، pdfTeX أو XeTeX. علاوةً على ذلك، إذا جرى تحديث الملف التنفيذي لـ LuaTeX بميزات جديدة، فمن المحتمل جدًا أن `.fmt` الملف.

ملفًا جرى إعداده بإصدار أقدم من LuaTeX لن يعمل مع المحرك الجديد: ستحتاج إلى إعادة بناء (إعادة ترجمة) `.fmt` إذا حاولت استخدام ملف

```
غير متوافق، فسيعجز محرك TeX عن تحميله ويستجيب بالخطأ:
```

خطأ فادح في ملف التنسيق؛ أنا عاجز `lualatex.fmt` ملف جديد.

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

ومع ذلك، فإن الغالبية العظمى من المستخدمين لا تحتاج أبدًا إلى القلق بشأن وضع «INI» لمحركات TeX، أو عملية توليد `.fmt` ملفات التنسيق: فـ Overleaf وتوزيعة TeX Live يحميانك من تلك التفاصيل—إلا إذا احتجت إلى البحث عنها.


---

# 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/50-the-two-modes-of-tex-engines-ini-mode-and-production-mode.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.
