> 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/uk/dokladni-statti/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) було [запропоновано Девідом Карлайслом](https://tex.stackexchange.com/a/603311), а [друге рішення](#tom-hejdas-solution) було [запропоноване Томом Гейдою](https://tex.stackexchange.com/a/603351), менеджером підтримки Overleaf.

### Рішення Девіда Карлайла

Вихідні файли для демонстрації цього рішення наведено нижче разом із посиланнями, щоб відкрити їх як проєкт Overleaf. Див. [Як працює це перше рішення](#how-this-first-solution-works) для короткого пояснення цього коду.

[Відкрити рішення Девіда Карлайла в 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{Рішення Девіда Карлайла}
\author{я}
\date{Травень 2024}
\begin{document}
\maketitle
\section{Вступ}
zzz
\end{document}
```

**main2.tex**

```latex
\documentclass{article}
\title{latexdiff}
\author{я\and ти}
\date{Травень 2023}

\begin{document}

\maketitle

\section{Вступ}
zzz zzz

\section{Розділ}
zzz
\end{document}
```

**latexmkrc**

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

[Відкрити рішення Девіда Карлайла в 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/4e3ed220a9cd23f54d1c0317370013685640ceb7)

#### Як працює це перше рішення

Це рішення порівнює файли `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/uk/dokladni-statti/28-how-to-use-latexmkrc-with-overleaf.md).

### Рішення Тома Гейди

Вихідні файли для демонстрації цього рішення наведено нижче разом із посиланнями, щоб відкрити їх як проєкт Overleaf. Див. [Як працює це друге рішення](#how-this-second-solution-works) для короткого пояснення цього коду.

[Відкрити рішення Тома Гейди в 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{Рішення Тома Гейди}
\author{я}
\date{Травень 2024}
\begin{document}
\maketitle
\section{Вступ}
zzz
\end{document}
```

**main2.tex**

```latex
\documentclass{article}
\title{latexdiff}
\author{я\and ти}
\date{Травень 2023}

\begin{document}

\maketitle

\section{Вступ}
zzz zzz

\section{Розділ}
zzz
\end{document}
```

[Відкрити рішення Тома Гейди в 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/1959c210f1d10d3d4c782e921091b5dc514a1763)

#### Як працює це друге рішення

Це рішення порівнює файли `main.tex` та `main2.tex` і записує результати у файл із назвою `main-d.tex`. Зауважте, що оскільки `main-d.tex` файл є *згенерованим* файлом, тобто створеним нашим кодом, він не буде видимим (відображеним) у файлах проєкту.

Файл із назвою `diff.tex` використовує `\ShellEscape` команду, надану [`shellesc` accents](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/uk/dokladni-statti/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.
