\engines{comparison}
LuaLaTeX مقابل pdfLaTeX
يُنتج المحركان ملفات PDF عالية الجودة، لكن LuaLaTeX يضيف بيئة تشغيل كاملة للبرمجة النصية بـ Lua وتحميلًا حديثًا للخطوط على حساب السرعة. يغطي هذا الدليل كل فرق مهم لتختار المحرك المناسب لكل مستند.
- السرعة مهمة، أي أسرع محرك متاح
- أقصى توافق مع الحزم مطلوب
- مستندات النصوص اللاتينية القياسية
- الحاجة إلى تباعد microtype وبروز الحروف
- البرمجة النصية بـ Lua لتوليد المحتوى الديناميكي
- تحميل حديث للخطوط عبر fontspec
- نصوص Unicode تتجاوز اللاتينية الأساسية
- صف طباعي خوارزمي معقد
\section{الفروق التقنية}
الفروق التقنية
يساعدك فهم البنية الأساسية على توقع السلوك عند تفاعل الحزم أو تحميل الخطوط أو تشغيل النصوص البرمجية.
إمكانية البرمجة النصية بـ Lua
يضمّن LuaLaTeX مفسّر Lua 5.3 كاملًا. يمكنك كتابة شيفرة إجرائية، والمرور على البيانات في حلقات، واستدعاء tex.print()، والتحكم في محرك الصف الطباعي برمجيًا. لا يملك pdfLaTeX طبقة برمجة نصية كهذه.
تحميل الخطوط
يستخدم LuaLaTeX حزمة fontspec لتحميل أي خط OpenType أو خط نظام بالاسم دون إعداد .tfm يدوي. أما pdfLaTeX فيعتمد على نظام خطوط TeX ويتطلب inputenc + fontenc للترميز الصحيح.
دعم Unicode
يقرأ LuaLaTeX ترميز UTF-8 أصليًا على مستوى المحرك. ويقرّب pdfLaTeX دعم Unicode عبر حزمة inputenc التي تغطي معظم الكتابات اللاتينية لكنها تتطلب حلولًا بديلة للصينية واليابانية والكورية والعربية أو الرموز الرياضية المتقدمة.
سرعة التجميع
pdfLaTeX هو أسرع محرك LaTeX، فهو يستغرق عادةً من 0.6 إلى 1 ثانية لمستند بسيط. أما LuaLaTeX فيهيّئ آلة Lua الافتراضية ونظام خطوط أكبر، فيكون أبطأ بمقدار 2 إلى 3 مرات في المتوسط. وفي خطوط معالجة CI أو المعاينة الحية يكون هذا الفرق مهمًا.
\section{مقارنة الميزات}
مقارنة الميزات
| الميزة | pdfLaTeX | LuaLaTeX |
|---|---|---|
| إدخال Unicode | عبر inputenc | أصلي |
| خطوط النظام | لا | نعم (fontspec) |
| البرمجة النصية بـ Lua | لا | نعم (luacode) |
| سرعة التجميع | سريع (~0.8 ثانية) | أبطأ (~2–3 مرات) |
| توافق الحزم | ممتاز | جيد |
| Microtype | دعم كامل | جزئي |
| اللغات من اليمين إلى اليسار | محدود | نعم (luabidi) |
| استهلاك الذاكرة | منخفض | أعلى (آلة Lua الافتراضية) |
\section{أمثلة الشيفرة}
أمثلة الشيفرة
مستندات صغيرة متجاورة لكل محرك.
% pdfLaTeX — fast, maximum compatibility
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{microtype}
\begin{document}
Standard pdfLaTeX document. Fast compilation, excellent package support.
$f(x) = \int_0^x t^2\, dt = \frac{x^3}{3}$
\end{document}% LuaLaTeX — Lua scripting, modern fonts
\documentclass{article}
\usepackage{fontspec}
\usepackage{luacode}
% Lua scripting inside LaTeX
\begin{luacode}
local n = 10
local sum = 0
for i = 1, n do sum = sum + i end
tex.print("Sum 1.." .. n .. " = " .. sum)
\end{luacode}
\begin{document}
LuaLaTeX natively handles Unicode and supports Lua scripts.
\end{document}\section{متى تستخدم LuaLaTeX}
متى تستخدم LuaLaTeX
LuaLaTeX هو الخيار الصحيح في هذه السيناريوهات المحددة.
توليد المحتوى الديناميكي
استخدم حلقات Lua والشروط لتوليد صفوف الجداول المتكررة أو قوائم الفصول أو المخرجات المهيكلة برمجيًا داخل LaTeX.
عرض الخطوط المخصصة
حمّل أي خط OpenType أو خط نظام بالاسم عبر fontspec، وهو مثالي للتقارير ذات الهوية البصرية والطباعة المخصصة والكتابات غير اللاتينية.
الخوارزميات المعقدة
ضمّن شيفرة Lua للحسابات الثقيلة مباشرةً في مستندك: الإحصاءات أو التحويلات أو تنسيق البيانات قبل الصف الطباعي.
عمليات الإرسال الحديثة إلى arXiv
تتطلب بعض قوالب المجلات الأحدث وعمليات الإرسال إلى arXiv صراحةً LuaLaTeX أو تفضّله للتعامل الحديث مع الخطوط وUnicode.
\section{دليل الانتقال}
الانتقال من pdfLaTeX إلى LuaLaTeX
تُجمَّع معظم مستندات pdfLaTeX في LuaLaTeX بعد بضعة تغييرات في المقدمة (preamble).
| الإجراء | الحزمة / الأمر |
|---|---|
| احذف | \usepackage[utf8]{inputenc} |
| احذف | \usepackage[T1]{fontenc} |
| أضف | \usepackage{fontspec} |
| اختياري | \usepackage{luacode} |
| فكّر في | \usepackage{polyglossia} |
\api{FormaTeX}
استخدام LuaLaTeX عبر API
مرّر "engine": "lualatex" في طلب التجميع لاختيار LuaLaTeX.
curl -X POST https://api.formatex.io/api/v1/compile \
-H "X-API-Key: $FORMATEX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"engine": "lualatex",
"latex": "\\documentclass{article}\\usepackage{fontspec}\\begin{document}Hello\\end{document}"
}' \
--output document.pdf
