> 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/27-how-to-use-latexdiff-on-overleaf.md).

# كيفية استخدام latexdiff على Overleaf

توضح هذه المقالة طريقتين لاستخدام [latexdiff](https://ctan.org/pkg/latexdiff?lang=en) على Overleaf.

## ما هو latexdiff؟

`latexdiff` هو برنامج نصي بلغة Perl مُصمَّم لمقارنة محتوى ملفي LaTeX. ويُنشئ كود LaTeX يعرض بصريًا أي فروق مهمة بين هذين الملفين.

لمقارنة `new.tex` مع `old.tex` وإخراج النتائج إلى ملف يُسمى `diff.tex`، ستستخدم `latexdiff` بهذا الشكل:

```
latexdiff OPTIONS old.tex new.tex > diff.tex
```

`OPTIONS` هي معاملات سطر الأوامر التي يمكنك استخدامها لتكوين `latexdiff`، راجع [`latexdiff` الوثائق](http://mirrors.ctan.org/support/latexdiff/doc/latexdiff-man.pdf) للاطلاع على قائمة الخيارات المتاحة.

## كيفية استخدام latexdiff على Overleaf

نقدّم حلّين، وكلاهما منشور ومناقش على tex.stackexchage. كان [الحل الأول](#david-carlisles-solution) قد [اقترحه David Carlisle](https://tex.stackexchange.com/a/603311)، و [الحل الثاني](#tom-hejdas-solution) قد [اقترحه Tom Hejda](https://tex.stackexchange.com/a/603351)، مدير الدعم في Overleaf.

### حل David Carlisle

توجد ملفات المصدر التي توضح هذا الحل أدناه، مع روابط لفتحها كمشروع Overleaf. انظر [كيف يعمل هذا الحل الأول](#how-this-first-solution-works) للحصول على شرح موجز لهذا الكود.

[افتح حل David Carlisle في Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name\[]=main.tex\&snip\[]=%5Cdocumentclass%7Barticle%7D%0A%5Ctitle%7BDavid+Carlisle%27s+solution%7D%0A%5Cauthor%7Bme%7D%0A%5Cdate%7BMay+2024%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cmaketitle%0A%5Csection%7BIntroduction%7D%0Azzz%0A%5Cend%7Bdocument%7D\&snip_name\[]=main2.tex\&snip\[]=%5Cdocumentclass%7Barticle%7D%0A%5Ctitle%7Blatexdiff%7D%0A%5Cauthor%7Bme%5Cand+you%7D%0A%5Cdate%7BMay+2023%7D%0A%0A%5Cbegin%7Bdocument%7D%0A%0A%5Cmaketitle%0A%0A%5Csection%7BIntroduction%7D%0Azzz+zzz%0A%0A%5Csection%7BSection%7D%0Azzz%0A%5Cend%7Bdocument%7D\&snip_name\[]=latexmkrc\&snip\[]=%24pdflatex+%3D+%22latexdiff+main.tex+main2.tex+%3E+main-d.tex%3B+pdflatex+%25O++main-d%22\&main_document=main.tex)

**main.tex**

```latex
\documentclass{article}
\title{حل David Carlisle}
\author{me}
\date{May 2024}
\begin{document}
\maketitle
\section{Introduction}
ززز
\end{document}
```

**main2.tex**

```latex
\documentclass{article}
\title{latexdiff}
\author{me\and you}
\date{May 2023}

\begin{document}

\maketitle

\section{Introduction}
ززز ززز

\section{Section}
ززز
\end{document}
```

**latexmkrc**

```latex
$pdflatex = "latexdiff main.tex main2.tex > main-d.tex; pdflatex %O  main-d"
```

[افتح حل David Carlisle في Overleaf.](https://www.overleaf.com/docs?engine=pdflatex\&snip_name\[]=main.tex\&snip\[]=%5Cdocumentclass%7Barticle%7D%0A%5Ctitle%7BDavid+Carlisle%27s+solution%7D%0A%5Cauthor%7Bme%7D%0A%5Cdate%7BMay+2024%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cmaketitle%0A%5Csection%7BIntroduction%7D%0Azzz%0A%5Cend%7Bdocument%7D\&snip_name\[]=main2.tex\&snip\[]=%5Cdocumentclass%7Barticle%7D%0A%5Ctitle%7Blatexdiff%7D%0A%5Cauthor%7Bme%5Cand+you%7D%0A%5Cdate%7BMay+2023%7D%0A%0A%5Cbegin%7Bdocument%7D%0A%0A%5Cmaketitle%0A%0A%5Csection%7BIntroduction%7D%0Azzz+zzz%0A%0A%5Csection%7BSection%7D%0Azzz%0A%5Cend%7Bdocument%7D\&snip_name\[]=latexmkrc\&snip\[]=%24pdflatex+%3D+%22latexdiff+main.tex+main2.tex+%3E+main-d.tex%3B+pdflatex+%25O++main-d%22\&main_document=main.tex)

ينتج هذا المثال المخرجات التالية:

![صورة توضح المخرجات التي ينتجها latexdiff](/files/2c346e5427b244156c0f6735bdd49b41185f8613)

#### كيف يعمل هذا الحل الأول

يقارن هذا الحل الملفات `main.tex` و `main2.tex` ويكتب النتائج إلى ملف يُسمى `main-d.tex`، لاحظ أن `main-d.tex` الملف *المُولَّد* ملف، أي تم إنشاؤه بواسطة كودنا، لذلك لن يكون مرئيًا (مُدرجًا) ضمن ملفات المشروع.

ويعمل من خلال استخدام ملف يُسمى `latexmkrc` والذي يحتوي على كود Perl لتخصيص عملية التجميع في Overleaf. هنا، يُعاد تعريف الأمر المستخدم للتجميع باستخدام pdfLaTeX بحيث يقوم أولًا بتشغيل `latexdiff` ثم تنفيذ pdfLaTeX لتجميع `main-d.tex`الملف المُولَّد بواسطة `latexdiff`.

كما [أشار إليه مؤلف الحل](https://tex.stackexchange.com/a/603311)، لإيقاف تشغيل `latexdiff` وطباعة المحتوى الفعلي لـ `main.tex` أو `main2.tex`، ما عليك سوى إضافة `#`، وهو مُعلِّق Perl، إلى `latexmkrc` سطر الأوامر، ليصبح كما يلي:

```
# $pdflatex = "latexdiff main.tex main2.tex > main-d.tex; pdflatex %O  main-d"
```

يمكنك الآن تجميع `main.tex` أو `main2.tex` لطباعة محتواها الفعلي، وليس الفروق بينها.

لمزيد من المعلومات، راجع مقال Overleaf [كيفية استخدام `latexmkrc` مع Overleaf](/latex/ar/mqalat-mtamqh/28-how-to-use-latexmkrc-with-overleaf.md).

### حل Tom Hejda

توجد ملفات المصدر التي توضح هذا الحل أدناه، مع روابط لفتحها كمشروع Overleaf. انظر [كيف يعمل هذا الحل الثاني](#how-this-second-solution-works) للحصول على شرح موجز لهذا الكود.

[افتح حل Tom Hejda في Overleaf.](https://www.overleaf.com/docs?engine=\&snip_name\[]=diff.tex\&snip\[]=%5CRequirePackage%7Bshellesc%7D%0A%5CShellEscape%7Blatexdiff+main.tex+main2.tex+%3E+main-d.tex%7D%0A%5Cinput%7Bmain-d%7D%0A%5Cdocumentclass%7Bdummy%7D%0A%5Ctitle%7BDemonstrating+latexdiff%7D\&snip_name\[]=main.tex\&snip\[]=%5Cdocumentclass%7Barticle%7D%0A%5Ctitle%7BTom+Hejda%27s+solution%7D%0A%5Cauthor%7Bme%7D%0A%5Cdate%7BMay+2024%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cmaketitle%0A%5Csection%7BIntroduction%7D%0Azzz%0A%5Cend%7Bdocument%7D\&snip_name\[]=main2.tex\&snip\[]=%5Cdocumentclass%7Barticle%7D%0A%5Ctitle%7Blatexdiff%7D%0A%5Cauthor%7Bme%5Cand+you%7D%0A%5Cdate%7BMay+2023%7D%0A%0A%5Cbegin%7Bdocument%7D%0A%0A%5Cmaketitle%0A%0A%5Csection%7BIntroduction%7D%0Azzz+zzz%0A%0A%5Csection%7BSection%7D%0Azzz%0A%5Cend%7Bdocument%7D\&main_document=diff.tex)

**diff.tex**

```latex
\RequirePackage{shellesc}
\ShellEscape{latexdiff main.tex main2.tex > main-d.tex}
\input{main-d}
\documentclass{dummy}
\title{عرض latexdiff}
```

**main.tex**

```latex
\documentclass{article}
\title{حل Tom Hejda}
\author{me}
\date{May 2024}
\begin{document}
\maketitle
\section{Introduction}
ززز
\end{document}
```

**main2.tex**

```latex
\documentclass{article}
\title{latexdiff}
\author{me\and you}
\date{May 2023}

\begin{document}

\maketitle

\section{Introduction}
ززز ززز

\section{Section}
ززز
\end{document}
```

[افتح حل Tom Hejda في Overleaf.](https://www.overleaf.com/docs?engine=\&snip_name\[]=diff.tex\&snip\[]=%5CRequirePackage%7Bshellesc%7D%0A%5CShellEscape%7Blatexdiff+main.tex+main2.tex+%3E+main-d.tex%7D%0A%5Cinput%7Bmain-d%7D%0A%5Cdocumentclass%7Bdummy%7D%0A%5Ctitle%7BDemonstrating+latexdiff%7D\&snip_name\[]=main.tex\&snip\[]=%5Cdocumentclass%7Barticle%7D%0A%5Ctitle%7BTom+Hejda%27s+solution%7D%0A%5Cauthor%7Bme%7D%0A%5Cdate%7BMay+2024%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cmaketitle%0A%5Csection%7BIntroduction%7D%0Azzz%0A%5Cend%7Bdocument%7D\&snip_name\[]=main2.tex\&snip\[]=%5Cdocumentclass%7Barticle%7D%0A%5Ctitle%7Blatexdiff%7D%0A%5Cauthor%7Bme%5Cand+you%7D%0A%5Cdate%7BMay+2023%7D%0A%0A%5Cbegin%7Bdocument%7D%0A%0A%5Cmaketitle%0A%0A%5Csection%7BIntroduction%7D%0Azzz+zzz%0A%0A%5Csection%7BSection%7D%0Azzz%0A%5Cend%7Bdocument%7D\&main_document=diff.tex)

ينتج هذا المثال المخرجات التالية:

![صورة توضح المخرجات التي ينتجها latexdiff](/files/03eb1b635ac673707e68a941e30ea5e403cb8376)

#### كيف يعمل هذا الحل الثاني

يقارن هذا الحل الملفات `main.tex` و `main2.tex` ويكتب النتائج إلى ملف يُسمى `main-d.tex`، لاحظ أن `main-d.tex` الملف *المُولَّد* ملف، أي تم إنشاؤه بواسطة كودنا، لذلك لن يكون مرئيًا (مُدرجًا) ضمن ملفات المشروع.

ملف يُسمى `diff.tex` يستخدم `\ShellEscape` الأمر، المقدم من [`shellesc` الحزمة](https://ctan.org/pkg/shellesc?lang=en)، لتنفيذ `latexdiff`. نتائج المقارنة، الموجودة في `main-d.tex`، يتم `\input` إدراجها في `diff.tex` للطباعة.

`diff.tex` يحتوي على السطر `\documentclass{dummy}` لخداع مُصرّف Overleaf للاعتقاد `diff.tex` بأنه يمكن تجميعه. ويعمل ذلك لأن عملية التجميع في Overleaf تتحقق من الملف المفتوح حاليًا بحثًا عن وجود `\documentclass`، فإذا لم يجده، فإن Overleaf يجمع الملف المدرج في القائمة باسم **الرئيسي** الملف.

إذا اخترت **إعادة التحويل** مع `diff.tex` فتحه في المحرر، فسيتم تنضيد نتائج المقارنة. يمكنك تحديد وتجميع `main.tex` أو `main2.tex` لأنهما كلاهما يحتويان على `\documentclass` الأمر.

لمزيد من المعلومات حول `latexdiff` اطّلع على [الوثائق الرسمية](http://mirrors.ctan.org/support/latexdiff/doc/latexdiff-man.pdf).


---

# 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/27-how-to-use-latexdiff-on-overleaf.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.
