في مقال Word أم LaTeX لكتابة الرسالة وأين يقف Quarto قارنا بين الصيغ الثلاث، وذكرنا أن LaTeX هو الأقوى في الرياضيات وقوالب المجلات، ولكن الباحث العربي يصطدم معه بمشكلتين: أن أول ملف عربي يكتبه يفشل في الترجمة بخطأ لا يفهمه، وأن Overleaf السحابي يقطع الترجمة المجانية بعد 10 ثوان ويحصر التعاون في متعاون واحد. وهذا المقال موجه لطالب الدراسات العليا الذي سوف يكتب رسالته أو بحثه في LaTeX، وللباحث وعضو هيئة التدريس الذي يكتب مع فريق، ولمسؤول تقنية المعلومات في الكلية أو للمحرر الذي يريد تشغيل Overleaf على سيرفر الجهة لطلابها وباحثيها.
في هذا المقال سوف نتناول:
- لماذا يستخدم الباحثون LaTeX، وكيف يتحول الملف إلى PDF مع المراجع من خلال BibTeX أو biblatex.
- العربية في LaTeX: لماذا يفشل pdfLaTeX، والطريقتان اللتان تعملان: XeLaTeX مع polyglossia وbidi، وLuaLaTeX مع babel.
- مختبر عملي: نترجم بحثاً عربياً فيه فقرة إنجليزية واستشهادات ومراجع عربية وإنجليزية في TeX Live كاملة داخل Docker، ونرى الأخطاء الحقيقية وحلولها.
- تثبيت Overleaf Community Edition على سيرفرك بالـ Toolkit الرسمي، وما الفرق بينه وبين Server Pro، وكيف تجعله يترجم العربية، وحدود التعاون والأمان فيه، والنسخ الاحتياطي والتحديث.
وإذا كنت تجمع مراجعك في Zotero أو JabRef فقد شرحنا في مقال أي مدير مراجع يناسب بحثك كيف تصدرها بصيغة BibTeX، وهي الصيغة التي سوف نستخدمها هنا.
لماذا يكتب الباحثون في LaTeX؟
LaTeX نظام لتنسيق الوثائق Typesetting تكتب فيه النص في ملف عادي مع أوامر تصف بنية الوثيقة (فصل، قسم، معادلة، جدول، استشهاد)، ثم يحوله برنامج اسمه المحرك Engine إلى PDF. والفكرة الأساسية أنك تكتب المعنى وليس الشكل، فتقول «هذا عنوان قسم» ولا تقول «هذا خط 14 عريض»، والقالب Template الذي تضعه المجلة أو الجامعة يقرر الشكل. والفوائد العملية للباحث:
- المعادلات: الكتابة الرياضية في LaTeX هي المعيار في الرياضيات والفيزياء وعلوم الحاسب، وكثير من المجلات في هذه المجالات تطلب ملف LaTeX أو تفضله.
- الترقيم والإحالات Cross-references: أرقام الأشكال والجداول والمعادلات والفصول تتحدث تلقائياً، ولا تجد في رسالتك «انظر الشكل 3» وهو أصبح الشكل 5.
- المراجع: تكتب المفتاح
\parencite{page2021prisma}ويبني البرنامج الاستشهاد وقائمة المراجع بالنمط المطلوب. - ملف نصي: تحفظه في Git وترى الفرق بين نسخة وأخرى سطراً بسطر، ولا يتلف كما يتلف ملف Word كبير.
وأما نقاط الضعف فهي منحنى التعلم، ورسائل الخطأ الغامضة، وصعوبة التعاون مع مشرف لا يعرف LaTeX، والعربية التي تحتاج إلى إعداد خاص كما سوف نرى. وفي السعودية مثال واضح على الطريقين معاً: جامعة الملك عبدالله للعلوم والتقنية KAUST تنشر في صفحة الرسائل في مكتبتها قالب LaTeX رسمياً للرسائل على Overleaf، وتذكر أن المكتبة توفر حسابات Overleaf Professional مجاناً للطلاب وأعضاء هيئة التدريس والموظفين، ومع ذلك تقول الصفحة إن مسؤولية الالتزام بدليل الجامعة تبقى على الطالب.
هيكل ملف LaTeX وكيف يتحول إلى PDF
كل ملف LaTeX له جزءان: المقدمة Preamble قبل \begin{document} وفيها نوع الوثيقة والحزم Packages والإعدادات، ثم المتن بين \begin{document} و\end{document}. والمراجع في ملف مستقل بصيغة BibTeX امتداده .bib، وفيه كل مرجع بمفتاح Key ونوع وحقول، مثل المرجع العربي الحقيقي التالي الذي سوف نستخدمه في المختبر:
@article{alanazi2020,
author = {{عبدالله قريطان العنزي}},
title = {تطوير الصدق البنائي لأبعاد مقياس التعلم الافتراضي في الجامعات السعودية},
journal = {العلوم التربوية},
year = {2020},
volume = {28},
number = {3},
pages = {323--354},
doi = {10.21608/ssj.2020.244250},
langid = {arabic}
}ولاحظ القوسين المزدوجين حول اسم المؤلف، والسبب أن BibTeX يقسم الاسم إلى اسم أول واسم عائلة بحسب قواعد الأسماء الغربية، فيخطئ في الأسماء العربية، والقوسان يجعلان الاسم كتلة واحدة لا يقسمها. أما الحقل langid فيخبر biblatex بلغة المرجع، وسوف نرى أهميته بعد قليل. والصورة التالية تبين ما يحدث عند الترجمة:

وهناك طريقتان لمعالجة المراجع، والفرق بينهما مهم للعربية:
| BibTeX التقليدي | biblatex مع biber | |
|---|---|---|
| البرنامج | bibtex | biber |
| الأنماط | ملفات .bst، وكثير من قوالب المجلات تأتي بها | تكتب بأوامر LaTeX، مثل style=authoryear أو style=apa |
| Unicode والعربية | محدود، ويخطئ في ترتيب الأسماء غير اللاتينية | يدعم Unicode كاملاً، ويرتب بحسب لغة الوثيقة |
| متى تستخدمه | عندما يفرضه قالب المجلة | في الرسالة وفي كل بحث يسمح لك قالبه بالاختيار |
والملف نفسه refs.bib يعمل مع الطريقتين، لذلك لا تقلق من الاختيار في البداية.
العربية في LaTeX
LaTeX الأصلي صمم في الثمانينات للغات اللاتينية، والمحرك القديم pdfLaTeX لا يعرف الخطوط الحديثة OpenType ولا اتجاه الكتابة من اليمين إلى اليسار. وقد يتساءل البعض: ماذا يحدث لو كتبت العربية فيه مباشرة؟ الملف التالي يجيب:
\documentclass{article}
\begin{document}
مرحبا بالعالم
\end{document}وعند ترجمته بالأمر pdflatex يتوقف عند أول حرف بالخطأ التالي:
! LaTeX Error: Unicode character م (U+0645)
not set up for use with LaTeX.والحل ليس في إضافة حزمة إلى pdfLaTeX، وإنما في استخدام أحد المحركين الحديثين اللذين يقرآن Unicode وخطوط OpenType مباشرة، ومعهما حزمة تدير اللغة واتجاه النص:
| XeLaTeX مع polyglossia | LuaLaTeX مع babel | |
|---|---|---|
| المحرك | XeTeX | LuaHBTeX |
| حزمة اللغات | polyglossia، وتحمل حزمة bidi للاتجاه | babel مع الخيار bidi=basic |
| الخطوط | fontspec، والمحرك يبحث عن الخط بالاسم من خلال fontconfig في النظام | fontspec من خلال luaotfload، ويبحث في خطوط TeX Live نفسها |
| التشكيل Shaping | HarfBuzz داخل المحرك | HarfBuzz مع Renderer=HarfBuzz |
| السرعة | أسرع في الترجمة | أبطأ، وأول ترجمة تبني ذاكرة الخطوط Font Cache |
والخط المناسب للبداية هو Amiri، وهو خط نسخ مفتوح موجود في TeX Live نفسها، أي أنه يعمل في كل نسخة كاملة من TeX Live دون أن تثبت شيئاً في النظام.
مختبر: بحث عربي بمراجع عربية وإنجليزية
الآن سوف نكتب الملف نفسه بالطريقتين: نص عربي فيه مصطلح إنجليزي في السطر نفسه، واستشهاد بمرجع إنجليزي وآخر عربي، وفقرة إنجليزية كاملة، ورقم بنسبة مئوية، ومعادلة، وقائمة مراجع بالنمط authoryear. ونترجمه في Docker Image الرسمية لمشروع TeX Live بالوسم latest-full، أي TeX Live 2026 كاملة، والتي صدرت في 1 مارس 2026 بحسب موقع TeX Live. وانتبه إلى حجمها: 2.76 جيجابايت للتنزيل و9.08 جيجابايت على القرص بعد فكها، لذلك تأكد من المساحة قبل أن تبدأ، واحذفها بعد الانتهاء إذا لم تكن تحتاج إليها.
docker pull texlive/texlive:latest-full@sha256:e8148b126545105c4aeeaa212f8a7bd02d05b500351372881055e1e59ae67d33
docker run --rm texlive/texlive:latest-full@sha256:e8148b126545105c4aeeaa212f8a7bd02d05b500351372881055e1e59ae67d33 \
sh -c 'xelatex --version | head -1; lualatex --version | head -1; biber --version'والمخرج سوف يكون كما يلي:
XeTeX 3.141592653-2.6-0.999998 (TeX Live 2026)
This is LuaHBTeX, Version 1.24.0 (TeX Live 2026)
biber version: 2.22وإصدارات الحزم في هذه النسخة: polyglossia 2.13 وbabel 26.14 وbidi 26.01.08 وfontspec 2.9h وbiblatex 3.22a.
ملف XeLaTeX مع polyglossia
الملف التالي هو النسخة الأولى، كما يكتبها أغلب من يقرأ توثيق polyglossia لأول مرة:
\documentclass[a4paper,12pt]{article}
\usepackage{fontspec}
\usepackage{polyglossia}
\setmainlanguage{arabic}
\setotherlanguage{english}
\newfontfamily\arabicfont[Script=Arabic]{Amiri}
\setmainfont{Amiri}
\usepackage[backend=biber,style=authoryear]{biblatex}
\addbibresource{refs.bib}
\title{نموذج بحث بالعربية والإنجليزية}
\author{فريق البحث}
\date{2026}
\begin{document}
\maketitle
\section{المقدمة}
يكتب الباحث النص العربي من اليمين إلى اليسار، ويضع المصطلح الإنجليزي
\textenglish{Systematic Review} داخل السطر نفسه دون أن يختل الاتجاه
\parencite{page2021prisma}، ويستشهد بمرجع عربي أيضاً \parencite{alanazi2020}.
\begin{english}
This paragraph is in English inside an Arabic document, as described by
\textcite{lamport1994latex}.
\end{english}
\section{النتائج}
بلغت نسبة الاستجابة 87.5\% من 240 مشاركاً، والمعادلة التالية تبقى من اليسار إلى اليمين:
\begin{equation}
\bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i
\end{equation}
\printbibliography[title={المراجع}]
\end{document}ونترجمه بالأداة latexmk التي تشغل المحرك وbiber بالعدد اللازم من المرات:
docker run --rm -v "$PWD:/work" -w /work texlive/texlive:latest-full \
latexmk -xelatex -interaction=nonstopmode -outdir=build/xe paper-xelatex.texوعند تشغيل الأمر سوف تجد أن الترجمة فشلت عند قائمة المراجع بالخطأ التالي:
! Package polyglossia Error: The current main monospace font,
(polyglossia) lmmono12-regular, does not contain the "Arabic"
(polyglossia) script!
(polyglossia) Please define \arabicfonttt with \newfontfamily
(polyglossia) commandوالسبب أن biblatex يكتب الـ DOI بخط ثابت العرض Monospace، والخط الافتراضي لا يحتوي على الحروف العربية، وpolyglossia تطلب منك أن تعرف خطاً ثابت العرض للعربية حتى لو لم تكتب فيه حرفاً عربياً. والحل سطر واحد بعد سطر الخط العربي، بخط DejaVu Sans Mono الموجود في TeX Live ويحتوي على العربية:
\newfontfamily\arabicfonttt[Script=Arabic]{DejaVu Sans Mono}النتيجة الأولى: نجحت الترجمة واختل الاتجاه
بعد هذا التعديل نجحت الترجمة، ولكن الصورة التالية تبين ما خرج في الـ PDF:

وفي الصورة أعلاه لاحظ التالي:
- الاستشهاد ظهر «(2021 al. et Page)» بدلاً من «(Page et al. 2021)»، لأن biblatex كتبه داخل سياق عربي فرتبت الكلمات من اليمين إلى اليسار.
- النسبة 87.5% ظهرت «5%.87»، فالنقطة العشرية وعلامة النسبة اعتبرتا جزءاً من النص العربي.
- المراجع الإنجليزية في القائمة معكوسة الكلمات أيضاً، وفي سجل الترجمة Log تحذير واضح:
Package biblatex Warning: Language 'arabic' not supported.، أي أن biblatex لا توجد فيه ترجمة عربية لكلمات مثل «In:» و«pp.»، فيكتبها بالإنجليزية.
أما LuaLaTeX مع babel فقد خرج الاستشهاد الإنجليزي والمراجع الإنجليزية فيه صحيحة من المحاولة الأولى، وبقيت مشكلة النسبة المئوية وظهرت «%87.5». وبالتالي فإن الطريقتين تحتاجان إلى ثلاثة تعديلات حتى يصبح الناتج مقبولاً للنشر.
التعديلات الثلاثة
- لغة كل مرجع: أضف الخيار
autolang=otherإلى biblatex، فيكتب كل مرجع بلغته بحسب الحقلlangidفي ملف.bib، وهذا يصلح ترتيب المراجع الإنجليزية في القائمة. - الأرقام والاستشهادات الإنجليزية داخل النص العربي: ضعها صراحة في سياق إنجليزي، بالأمر
\textenglish{87.5\%}في polyglossia، و\foreignlanguage{english}{87.5\%}في babel. وفي XeLaTeX ضع الاستشهاد بمرجع إنجليزي داخل\textenglish{\parencite{page2021prisma}}، أما babel فلم يحتج إلى ذلك. ولاحظ أن الأمر\LR{}من حزمة bidi لم يصلح النسبة في تجربتنا، وبقيت «5%.87». - الـ DOI: أعد تعريف شكل الحقل ليكتب في سياق إنجليزي:
% polyglossia
\DeclareFieldFormat{doi}{DOI\addcolon\space\textenglish{\url{#1}}}
% babel
\DeclareFieldFormat{doi}{DOI\addcolon\space\foreignlanguage{english}{\url{#1}}}والصورة التالية تبين الناتج النهائي بالطريقتين جنباً إلى جنب:

وكن صريحاً مع نفسك في نقطة أخيرة: سطر الـ DOI في المرجع العربي ما زال ينقسم على سطرين مع مسافات حول النقاط في الطريقتين، وكلمات biblatex مثل «In:» و«pp.» تبقى إنجليزية داخل المرجع العربي، لأن biblatex لا يدعم العربية كلغة. ولذلك إذا كان دليل جامعتك يطلب «ص.» و«مج.» في المراجع العربية فسوف تحتاج إلى تعريف هذه الكلمات بنفسك أو إلى نمط مخصص، وراجع القائمة النهائية بعينك قبل التسليم.
سرعة الترجمة وذاكرة الخطوط Font Cache
عند تشغيل Container جديد في كل مرة تبني LuaLaTeX ذاكرة الخطوط Font Cache من جديد، وفي TeX Live كاملة آلاف الخطوط، لذلك كانت أول ترجمة بطيئة جداً. ولكي نقيس الفرق بعد بناء الذاكرة ربطنا مجلد /root بـ Volume ثابت، ثم أعدنا الترجمة الكاملة من البداية، فاستغرقت XeLaTeX قرابة 19 ثانية وLuaLaTeX قرابة 71 ثانية على السيرفر نفسه. والأرقام تختلف بحسب جهازك، ولكن النسبة بينهما هي المهمة، والدرس العملي أن تحفظ ذاكرة الخطوط في Volume إذا كنت تترجم في Docker:
docker volume create texlive-cache
docker run --rm -v texlive-cache:/root -v "$PWD:/work" -w /work texlive/texlive:latest-full \
latexmk -lualatex -interaction=nonstopmode -outdir=build/lua paper-lualatex.texOverleaf على سيرفرك
ترجمة LaTeX على جهاز كل باحث تعني أن كل واحد يثبت TeX Live بحجمها، ويحل مشكلات الخطوط وحده، ولا يرى المشرف آخر نسخة إلا إذا أرسلها الطالب. وOverleaf يحل ذلك بمحرر في المتصفح يترجم على السيرفر ويسمح لأكثر من شخص بالتحرير في الوقت نفسه، وكوده مفتوح بترخيص AGPL-3.0، وتنشر الشركة نسختين للتشغيل على سيرفرك.
Community Edition أم Server Pro؟
بحسب صفحة المقارنة الرسمية، فالفرق كما يلي:
| الميزة | Community Edition | Server Pro |
|---|---|---|
| المحرر وسجل المشروع الكامل History | نعم | نعم |
| التعليقات Comments وتتبع التغييرات Track Changes | لا | نعم |
| تكامل Git وإدارة قوالب خاصة | لا | نعم |
| الدخول الموحد SSO عبر SAML 2 أو LDAP | لا | نعم |
| عزل الترجمة Sandboxed Compiles | لا | نعم |
| إدارة المستخدمين من لوحة المشرف | محدودة | نعم |
| الدعم | المجتمع عبر GitHub Issues | دعم رسمي بترخيص مدفوع |
وأهم سطر في الجدول هو عزل الترجمة، والصفحة نفسها تحذر من أن Community Edition مخصصة لبيئة يثق فيها المشرف بكل المستخدمين، لأن الترجمة تعمل بصلاحيات الـ Container نفسه، وسوف نختبر ذلك عملياً بعد التثبيت. والصورة التالية تبين ما يعمل على السيرفر:

المتطلبات
- الموارد: بحسب صفحة متطلبات العتاد، الحد الأدنى معالجان و3 جيجابايت ذاكرة لنحو 5 مستخدمين يترجمون في الوقت نفسه، وتضيف معالجاً و1 جيجابايت لكل 5 إلى 10 مستخدمين متزامنين. والترجمة تستخدم نواة واحدة، لذلك سرعة النواة الواحدة أهم من عدد الأنوية.
- القرص: الـ Image الرسمية
sharelatex/sharelatex:6.3.1حجمها 4.74 جيجابايت على القرص، وتضاف إليها MongoDB وRedis والبيانات. - البرامج: Linux مع Docker Engine وDocker Compose وGit وbash.
- نطاق وشهادة TLS إذا كان الوصول من خارج السيرفر، مثل
latex.example.com.
التثبيت بالـ Toolkit
الطريقة الرسمية هي Overleaf Toolkit، وهو مجموعة سكربتات bash فوق Docker Compose تكتب لك الإعدادات وتدير التحديث، وتوثيقه في دليل التثبيت. نبدأ بتنزيله وإنشاء ملفات الإعداد:
git clone https://github.com/overleaf/toolkit.git overleaf-toolkit
cd overleaf-toolkit
bin/init
cat config/versionوالمخرج سوف يكون كما يلي، والرقم هو إصدار Overleaf الذي سوف يعمل:
Copying config files to 'config/'
6.3.1والإصدار 6.3.1 صدر في 15 أكتوبر 2026 بحسب ملاحظات الإصدار، والتي تذكر أن معرف الـ Image لنسخة Community Edition هو 0c659950e27f، وهو المعرف نفسه الذي ظهر عندنا بعد التنزيل، وبهذه الطريقة تتحقق أنك تشغل الإصدار الذي تظنه. الآن نعدل ملف config/overleaf.rc، وأهم ما فيه:
PROJECT_NAME=overleaf
OVERLEAF_LISTEN_IP=127.0.0.1
OVERLEAF_PORT=8080
SERVER_PRO=false
SIBLING_CONTAINERS_ENABLED=false
MONGO_VERSION=8.0
REDIS_IMAGE=redis:7.4وفي الإعداد أعلاه لاحظ التالي:
OVERLEAF_LISTEN_IP=127.0.0.1هو الافتراضي، أي أن Overleaf لا يستقبل إلا من السيرفر نفسه، والوصول من الخارج يكون عبر Reverse Proxy بشهادة TLS كما سيأتي، وهذا هو الصحيح.- الملف الذي ينشئه
bin/initيأتي بالقيمةSIBLING_CONTAINERS_ENABLED=true، وهي ميزة Server Pro، فإذا تركتها فسوف يطبع الـ Toolkit مع كل أمر التحذير التالي، لذلك اجعلهاfalse:
WARNING: SIBLING_CONTAINERS_ENABLED=true is not supported in Overleaf Community Edition.
Sibling containers are not available in Community Edition, which is intended for use in environments where all users are trusted. Community Edition is not appropriate for scenarios where isolation of users is required.
When not using Sibling containers, users have full read and write access to the 'sharelatex' container resources (filesystem, network, environment variables) when running LaTeX compiles.ثم نضبط في config/variables.env العنوان الذي يصل منه المستخدمون، لأن Overleaf يكتبه في روابط تفعيل الحسابات، وسوف نرى بعد قليل ماذا يحدث إذا نسيته:
OVERLEAF_APP_NAME="Overleaf الكلية"
OVERLEAF_SITE_URL=https://latex.example.com
[email protected]ثم نشغل:
bin/up -d
docker ps --format '{{.Names}} {{.Image}} {{.Status}}'والمخرج سوف يكون كما يلي، ولاحظ أن الـ Toolkit يهيئ MongoDB كـ Replica Set قبل تشغيل sharelatex:
Initiating Mongo replica set...
sharelatex sharelatex/sharelatex:6.3.1 Up 1 second
redis redis:7.4 Up 3 seconds
mongo mongo:8.0 Up 4 minutes (healthy)حساب المشرف Admin وأول مشروع
افتح الصفحة /launchpad لإنشاء أول حساب مشرف Admin:

وبعد الدخول أنشأنا مشروعاً برفع ملف ZIP فيه main.tex بنسخة XeLaTeX من المختبر وrefs.bib، فأخذ المشروع اسمه من الأمر \title تلقائياً:

نجرب العطل: العربية في Overleaf Community Edition
غيرنا المحرك من إعدادات المشروع إلى XeLaTeX وضغطنا Recompile، فكانت النتيجة كما في الصورة التالية:

والسبب أن Overleaf لا يضع TeX Live كاملة في الـ Image لتوفير الحجم، كما تذكر صفحة ترقية TeX Live. وعند الفحص داخل الـ Container:
docker exec sharelatex bash -c 'tlmgr --version | tail -1; tlmgr list --only-installed | grep "^i scheme"; du -sh /usr/local/texlive'والمخرج سوف يكون كما يلي:
TeX Live (https://tug.org/texlive) version 2026
i scheme-basic: basic scheme (plain and latex)
i scheme-infraonly: infrastructure-only scheme (no TeX at all)
i scheme-minimal: minimal scheme (plain only)
204M /usr/local/texliveأي أن TeX Live 2026 موجودة بالنسخة الأساسية scheme-basic فقط، 149 حزمة و204 ميجابايت، والحزم التي تحتاج إليها العربية ليست فيها: fontspec وpolyglossia وbidi وbiblatex وbiber والخط Amiri. وأمامك خياران: أن تثبت TeX Live كاملة بالأمر tlmgr install scheme-full فيزيد حجم الـ Image عدة جيجابايتات، أو أن تثبت ما تحتاج إليه فقط، وهو ما فعلناه.
تثبيت الحزم بـ tlmgr
عند أول محاولة لتثبيت حزمة توقف tlmgr برسالة تطلب تحديثه أولاً:
tlmgr itself needs to be updated.
Please do this via either
tlmgr update --selfلذلك نحدثه ثم نثبت الحزم، ثم نشغل tlmgr path add الذي يطلبه التوثيق بعد كل تثبيت حتى تظهر البرامج الجديدة مثل biber في المسار:
docker exec sharelatex bash -c '
tlmgr update --self
tlmgr install fontspec polyglossia bidi biblatex biber amiri dejavu etoolbox kvoptions logreq pdftexcmds url zref luatexbase ctablestack
tlmgr path add
which biber; du -sh /usr/local/texlive'والمخرج المختصر سوف يكون كما يلي:
[1/16, ??:??/??:??] install: amiri [457k]
[2/16, 00:05/07:13] install: biber.x86_64-linux [25289k]
...
[16/16, 00:10/00:10] install: zref [15k]
/usr/local/bin/biber
273M /usr/local/texliveأي 69 ميجابايت فقط، وأكبرها برنامج biber نفسه. والحزمتان luatexbase وctablestack أضفناهما بعد أن فشل مشروع LuaLaTeX بالخطأ File `luatexbase.sty' not found، لأن babel يحتاج إليهما مع LuaLaTeX.
الخط موجود ولكن XeLaTeX لا يجده
بعد تثبيت الحزم أعدنا الترجمة، فخرج PDF شبه فارغ وتسعة عشر خطأ:

والخطأ في السجل:
! Package fontspec Error:
(fontspec) The font "Amiri" cannot be found; this may be but
(fontspec) usually is not a fontspec bug. Either there is a
(fontspec) typo in the font name/file, the font is not
(fontspec) installed (correctly), or there is a bug in theوقد يتساءل البعض: الخط ثبتناه للتو بالأمر tlmgr install amiri، فلماذا لا يجده؟ والإجابة أن XeLaTeX يبحث عن الخط بالاسم من خلال fontconfig في نظام التشغيل، وخطوط TeX Live داخل Overleaf ليست مسجلة فيه، بعكس الـ Image الكاملة التي استخدمناها في المختبر الأول. والحل الأبسط والذي يعمل في أي مكان، في Overleaf السحابي وعلى جهازك وعلى سيرفرك، أن تحمل الخط باسم الملف:
\newfontfamily\arabicfont[Script=Arabic,Extension=.ttf,UprightFont=*-Regular,BoldFont=*-Bold,ItalicFont=*-Italic,BoldItalicFont=*-BoldItalic]{Amiri}
\newfontfamily\arabicfonttt[Script=Arabic]{DejaVuSansMono.ttf}
\setmainfont[Extension=.ttf,UprightFont=*-Regular,BoldFont=*-Bold,ItalicFont=*-Italic,BoldItalicFont=*-BoldItalic]{Amiri}ومع هذا التعديل ترجم المشروع بلا أخطاء، واستغرقت أول ترجمة قرابة 10 ثوان، وإعادة الترجمة قرابة ثانية ونصف لأن Overleaf يحتفظ بالملفات الوسيطة:

أما نسخة LuaLaTeX مع babel فقد ترجمت كما هي بعد إضافة الحزمتين، ووجدت الخط Amiri بالاسم لأن luaotfload يبحث في خطوط TeX Live نفسها، واستغرقت أول ترجمة قرابة 17 ثانية وإعادة الترجمة قرابة ثانيتين ونصف:

ولاحظ أن أول ترجمة لـ LuaLaTeX استغرقت عندنا أكثر من 10 ثوان، وهي المهلة Compile Timeout في الخطة المجانية لـ Overleaf السحابي بحسب صفحة حدود الخطط، أما على سيرفرك فالمهلة إعداد تتحكم فيه أنت.
احفظ الحزم Packages قبل أن تضيع
كل ما ثبتناه بـ tlmgr موجود في الـ Container الحالي فقط، وسوف يضيع عندما يعيد Docker Compose إنشاءه، مثل أي تغيير في الإعدادات. والطريقة التي يوثقها Overleaf هي أن تحفظ الـ Container كـ Image جديدة بالأمر docker commit، ثم تكتب اسمها في config/version:
docker commit sharelatex sharelatex/sharelatex:6.3.1-with-texlive-full
echo 6.3.1-with-texlive-full > config/version
bin/up -dوفي الأوامر أعلاه لاحظ أننا سمينا الـ Image «with-texlive-full» رغم أننا لم نثبت TeX Live كاملة، والسبب أن الـ Toolkit لا يقبل في config/version إلا رقم إصدار متبوعاً بهذه اللاحقة بالتحديد. فعندما جربنا اسماً آخر مثل 6.3.1-arabic رفض التشغيل بالخطأ:
ERROR: invalid version '6.3.1-arabic'والـ Image الجديدة حجمها 5.05 جيجابايت مقابل 4.74 للأصلية. وبعد إعادة الإنشاء تحققنا أن الحزم ما زالت موجودة، وأن المشروعين يترجمان بنجاح، وأن المشاريع الخمسة كلها في القائمة. وتذكر أن هذه الخطوات تتكرر مع كل تحديث لـ Overleaf، لأن الـ Image الجديدة تأتي بـ TeX Live الأساسية من جديد.
التعاون في Community Edition
زر Share في المحرر يفتح نافذة لدعوة متعاونين بالبريد أو لتفعيل المشاركة بالرابط Link Sharing:

والتحرير المشترك في الوقت نفسه يعمل، ومعه سجل المشروع History ونافذة محادثة Chat، ولكن لاحظ ما لا يوجد في هذه النسخة: لا توجد تعليقات على النص ولا تتبع للتغييرات، وهما أكثر ما يحتاج إليه المشرف عندما يراجع فصلاً من الرسالة، ولا يوجد تكامل مع Git، ولا دخول موحد بحساب الجامعة. لذلك إذا كانت المراجعة بالتعليقات جزءاً أساسياً من عمل القسم فهذه النسخة لن تكفي، والبديل Server Pro أو حسابات Overleaf السحابية من الجامعة كما تفعل KAUST.
وإنشاء الحسابات يكون من المشرف في الصفحة /admin/register، أو بتفعيل التسجيل الذاتي. وعندما أنشأنا حساباً لباحث ظهرت الصفحة التالية:

وفي الصورة أعلاه لاحظ أمرين: أن الصفحة تقول إنها أرسلت رسائل ترحيب، ولكنها لن تصل إلا إذا ضبطت إعدادات SMTP في variables.env (المتغيرات OVERLEAF_EMAIL_SMTP_HOST وما بعده)، لذلك تعطيك الصفحة الرابط لترسله يدوياً، وأن الرابط يبدأ بـ http://localhost لأننا شغلنا هذه التجربة دون OVERLEAF_SITE_URL، فإذا أرسلته لزميل فلن يفتح عنده. والرابط صالح لمدة أسبوع بحسب نص الصفحة.
نجرب العطل: ماذا يقرأ ملف LaTeX على السيرفر Server؟
ذكرنا أن الترجمة في Community Edition تعمل بصلاحيات الـ Container، ولكي نرى معنى ذلك أنشأنا مشروعاً فيه الملف التالي، وهو لا يحتاج إلى أي صلاحية خاصة:
\documentclass{article}
\usepackage[T1]{fontenc}
\begin{document}
\section*{Container file /etc/hostname}
\texttt{\input{/etc/hostname}}
\section*{First line of /etc/passwd}
\newread\f \openin\f=/etc/passwd \read\f to\line \closein\f
\texttt{\detokenize\expandafter{\line}}
\end{document}
والـ PDF أعلاه فيه b380c58a6273، وهو اسم الـ Container نفسه كما يظهر في docker exec sharelatex cat /etc/hostname، وفيه السطر الأول من ملف المستخدمين في النظام. وبالطريقة نفسها يستطيع أي مستخدم أن يقرأ أي ملف يستطيع الـ Container قراءته، ومنه ملفات المشاريع الأخرى المرفوعة في مجلد البيانات. لذلك لا تقم بفتح التسجيل في Community Edition لأي شخص لديه بريد الجامعة، واجعلها لفريق بحثي أو قسم صغير تعرف أفراده، وضعها على سيرفر لا يحمل خدمات أو بيانات أخرى. أما العزل الحقيقي، أي ترجمة كل مشروع في Container منفصل، فهو ميزة Sandboxed Compiles في Server Pro.
الوصول عبر نطاق بشهادة TLS
بما أن Overleaf يستمع على 127.0.0.1:8080 فقط، فالوصول من الخارج يكون من خلال Reverse Proxy على السيرفر نفسه، والمهم فيه أن يمرر اتصالات WebSocket التي يعتمد عليها التحرير المشترك. ومع Caddy يكفي الملف التالي، لأنه يصدر الشهادة ويمرر WebSocket تلقائياً:
latex.example.com {
reverse_proxy 127.0.0.1:8080
}ثم اجعل OVERLEAF_SITE_URL=https://latex.example.com وأعد التشغيل بالأمر bin/up -d. وإصدار الشهادة يحتاج إلى نطاق حقيقي يشير إلى السيرفر، لذلك لم نختبر هذه الخطوة في بيئتنا المحلية. وإذا كنت تستخدم Nginx أمام Overleaf فانتبه إلى ما تذكره صفحة المتطلبات: قيمة NGINX_KEEPALIVE_TIMEOUT داخل Overleaf يجب أن تكون أكبر من مهلة الـ Proxy الذي أمامه.
التحقق من النجاح
docker psيعرض ثلاث Containers تعمل، وmongo بحالة healthy.docker inspect --format '{{.Image}}' sharelatexيعطي معرفاً يبدأ بالمعرف المنشور في ملاحظات الإصدار.- مشروع عربي بـ XeLaTeX وآخر بـ LuaLaTeX يترجمان دون أخطاء، والسجل لا يحتوي على
cannot be found. - بعد
bin/up -dما زال الأمرdocker exec sharelatex which biberيعطي/usr/local/bin/biber. - رابط تفعيل حساب جديد يبدأ بنطاقك وليس بـ localhost.
النسخ الاحتياطي والاستعادة
يحفظ Overleaf بياناته في ثلاثة أماكن بحسب صفحة البيانات والنسخ الاحتياطي: MongoDB للمستخدمين والمشاريع، وRedis للتعديلات التي لم تحفظ بعد والجلسات، ومجلد البيانات للملفات المرفوعة. والنسخة المتسقة Consistent Backup تحتاج إلى إيقاف sharelatex حتى لا يكتب أحد أثناء النسخ:
bin/docker-compose stop sharelatex
docker exec mongo mongodump --db sharelatex --archive=/tmp/sharelatex.archive --gzip
docker cp mongo:/tmp/sharelatex.archive ./backup/mongo-sharelatex.archive.gz
tar czf ./backup/overleaf-data.tar.gz -C data/overleaf .
tar czf ./backup/redis-data.tar.gz -C data/redis .
tar czf ./backup/config.tar.gz config/
bin/docker-compose start sharelatexوعند تشغيلها على السيرفر التجريبي بخمسة مشاريع صغيرة كانت أحجام الملفات 12 كيلوبايت لقاعدة البيانات و1.7 ميجابايت لمجلد البيانات و19 كيلوبايت لـ Redis. والأحجام سوف تكبر مع الصور وملفات PDF المرفوعة، لذلك انقل النسخة إلى سيرفر آخر كما توصي الصفحة، وجرب الاستعادة على سيرفر فارغ مرة على الأقل. والاستعادة بحسب الصفحة نفسها: أوقف النسخة الجديدة بالأمر bin/stop، وفك مجلدي config/ وdata/، ثم bin/up، أو استعد قاعدة البيانات بالأمر mongorestore --archive --gzip.
التحديث إلى إصدار أحدث
- خذ نسخة احتياطية متسقة كما في القسم السابق، لأن Overleaf يشغل سكربتات ترحيل البيانات Migrations تلقائياً عند أول تشغيل للإصدار الجديد.
- أعد
config/versionإلى رقم الإصدار الأصلي، ثم شغلbin/upgradeالذي يحدث الـ Toolkit ويعرض عليك الإصدار الجديد. - أعد تثبيت حزم العربية بـ tlmgr في الإصدار الجديد، واحفظه بـ
docker commitباسم<الإصدار>-with-texlive-full. - ترجم المشروعين التجريبيين قبل أن تعلن للمستخدمين أن التحديث انتهى.
مشكلات شائعة وحلولها
Unicode character … not set up for use with LaTeX: تترجم بـ pdfLaTeX، فغير المحرك إلى XeLaTeX أو LuaLaTeX من إعدادات المشروع.File `fontspec.sty' not foundفي Overleaf على سيرفرك: TeX Live في الـ Image أساسية، فثبت الحزم بـ tlmgr.tlmgr itself needs to be updated: شغلtlmgr update --selfأولاً.The font "Amiri" cannot be foundمع XeLaTeX: حمل الخط باسم الملفAmiri-Regular.ttf، أو استخدم LuaLaTeX.does not contain the "Arabic" script: عرف\arabicfontttبخط ثابت العرض فيه العربية.- استشهاد أو رقم معكوس داخل النص العربي: ضعه في
\textenglish{}أو\foreignlanguage{english}{}، وأضفautolang=otherإلى biblatex. ERROR: invalid versionبعد docker commit: الـ Toolkit يقبل اللاحقة-with-texlive-fullفقط.- الحزم اختفت بعد تغيير الإعدادات: لم تحفظ الـ Container بـ docker commit قبل
bin/up -d. - روابط التفعيل تبدأ بـ localhost: اضبط
OVERLEAF_SITE_URL.
الخلاصة
- LaTeX يعطي الباحث ترقيماً ومراجع ومعادلات تلقائية في ملف نصي يحفظ في Git، والعربية فيه تحتاج إلى XeLaTeX مع polyglossia أو LuaLaTeX مع babel، وليس pdfLaTeX.
- في تجربتنا احتاج النص المختلط إلى ثلاثة تعديلات:
autolang=other، ووضع الأرقام والاستشهادات الإنجليزية في سياق إنجليزي، وإعادة تعريف شكل الـ DOI، واحتاج LuaLaTeX إلى تعديلات أقل. - TeX Live كاملة في Docker حجمها 9.08 جيجابايت على القرص، أما Overleaf Community Edition فتأتي بـ TeX Live أساسية بحجم 204 ميجابايت، وتكفيها 69 ميجابايت من الحزم لتترجم العربية.
- Community Edition مجانية بترخيص AGPL، وفيها التحرير المشترك والسجل، ولكن بلا تعليقات ولا تتبع تغييرات ولا SSO ولا عزل للترجمة، وأي ملف LaTeX فيها يستطيع قراءة ملفات الـ Container.
- احفظ الحزم بـ docker commit باسم ينتهي بـ
-with-texlive-full، وكرر ذلك مع كل تحديث، وخذ نسخة متسقة من MongoDB وRedis ومجلد البيانات قبل أي تحديث.
وفي المقال التالي من هذه المرحلة بإذن الله سوف نتناول أدوات التحليل الإحصائي المجانية بدلاً من SPSS، ونشغل التحليل نفسه في R وPython لنقارن الأرقام.
تدريب عملي
- خذ صفحة من رسالتك فيها نص عربي ومصطلحات إنجليزية واستشهادات، واكتبها بملف LuaLaTeX كالذي في المختبر، ثم ابحث في الـ PDF عن أي رقم أو استشهاد معكوس وأصلحه بالطريقة المذكورة.
- إذا كان لديك سيرفر تجريبي فثبت Community Edition بالـ Toolkit، وثبت حزم العربية، واحفظ الـ Image، ثم احذف الـ Container وأعد إنشاءه وتأكد أن مشروعك العربي ما زال يترجم.
سجل التحديثات
أكتوبر 2026: كتابة المقال واختباره على TeX Live 2026 (texlive/texlive:latest-full بتاريخ 18 أكتوبر 2026) وOverleaf Community Edition 6.3.1 بالـ Toolkit، بتاريخ 23 أكتوبر 2026.