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

# Jak używać latexdiff w Overleaf

Ten artykuł przedstawia dwa sposoby użycia [latexdiff](https://ctan.org/pkg/latexdiff?lang=en) w Overleaf.

## Czym jest latexdiff?

`latexdiff` jest skryptem Perla służącym do porównywania zawartości dwóch plików LaTeX. Generuje kod LaTeX, który wizualnie pokazuje wszelkie istotne różnice między tymi plikami.

Aby porównać `new.tex` z `old.tex` i zapisać wyniki do pliku o nazwie `diff.tex`, użyłbyś `latexdiff` w ten sposób:

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

`OPCJE` to parametry wiersza poleceń, których można użyć do skonfigurowania `latexdiff`działania — zobacz [`latexdiff` dokumentację](http://mirrors.ctan.org/support/latexdiff/doc/latexdiff-man.pdf) aby zobaczyć listę dostępnych opcji.

## Jak używać latexdiff w Overleaf

Udostępniamy dwa rozwiązania, oba opublikowane i omówione na tex.stackexchage. Pierwsze [pierwsza metoda](#david-carlisles-solution) została [zaproponowana przez Davida Carlislea](https://tex.stackexchange.com/a/603311), a [drugie rozwiązanie](#tom-hejdas-solution) została [zaproponowane przez Toma Hejdę](https://tex.stackexchange.com/a/603351), menedżera wsparcia Overleaf.

### Rozwiązanie Davida Carlislea

Pliki źródłowe demonstrujące to rozwiązanie są wymienione poniżej wraz z linkami do otwarcia ich jako projektu Overleaf. Zobacz [Jak działa to pierwsze rozwiązanie](#how-this-first-solution-works) aby uzyskać krótkie wyjaśnienie tego kodu.

[Otwórz rozwiązanie Davida Carlislea w 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{Rozwiązanie Davida Carlislea}
\author{ja}
\date{maj 2024}
\begin{document}
\maketitle
\section{Wprowadzenie}
zzz
\end{document}
```

**main2.tex**

```latex
\documentclass{article}
\title{latexdiff}
\author{ja\and ty}
\date{maj 2023}

\begin{document}

\maketitle

\section{Wprowadzenie}
zzz zzz

\section{Sekcja}
zzz
\end{document}
```

**latexmkrc**

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

[Otwórz rozwiązanie Davida Carlislea w 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)

Ten przykład generuje następujący wynik:

![Grafika przedstawiająca wynik wygenerowany przez latexdiff](/files/c8c444b5860073d6bc5c3f3fcebe75b3dc3dc54e)

#### Jak działa to pierwsze rozwiązanie

To rozwiązanie porównuje pliki `main.tex` i `main2.tex` i zapisuje wyniki do pliku o nazwie `main-d.tex`. Zauważ, że ponieważ `main-d.tex` plik jest *wygenerowanym* plikiem, tj. utworzonym przez nasz kod, nie będzie widoczny (wymieniony) w plikach projektu.

Działa to poprzez użycie pliku o nazwie `latexmkrc` który zawiera kod Perla służący do dostosowania procesu kompilacji Overleaf. Tutaj polecenie kompilacji przy użyciu pdfLaTeX jest przedefiniowane tak, aby najpierw uruchomić `latexdiff` a następnie uruchomić pdfLaTeX, aby skompilować `main-d.tex`, plik wygenerowany przez `latexdiff`.

Jak [zauważa autor rozwiązania](https://tex.stackexchange.com/a/603311), aby zatrzymać uruchamianie `latexdiff` i złożyć rzeczywistą treść `main.tex` lub `main2.tex`, wystarczy dodać `#`, znak komentarza Perla, do `latexmkrc` linii poleceń, dzięki czemu będzie to wyglądać tak:

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

Teraz możesz skompilować `main.tex` lub `main2.tex` aby złożyć ich rzeczywistą zawartość, a nie różnice między nimi.

Więcej informacji znajdziesz w artykule Overleaf [Jak używać `latexmkrc` z Overleaf](/latex/pl/artykuly-szczegolowe/28-how-to-use-latexmkrc-with-overleaf.md).

### Rozwiązanie Toma Hejdy

Pliki źródłowe demonstrujące to rozwiązanie są wymienione poniżej wraz z linkami do otwarcia ich jako projektu Overleaf. Zobacz [Jak działa to drugie rozwiązanie](#how-this-second-solution-works) aby uzyskać krótkie wyjaśnienie tego kodu.

[Otwórz rozwiązanie Toma Hejdy w 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{Prezentacja latexdiff}
```

**main.tex**

```latex
\documentclass{article}
\title{Rozwiązanie Toma Hejdy}
\author{ja}
\date{maj 2024}
\begin{document}
\maketitle
\section{Wprowadzenie}
zzz
\end{document}
```

**main2.tex**

```latex
\documentclass{article}
\title{latexdiff}
\author{ja\and ty}
\date{maj 2023}

\begin{document}

\maketitle

\section{Wprowadzenie}
zzz zzz

\section{Sekcja}
zzz
\end{document}
```

[Otwórz rozwiązanie Toma Hejdy w 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)

Ten przykład generuje następujący wynik:

![Grafika przedstawiająca wynik wygenerowany przez latexdiff](/files/4704b4611975d0f0b9c37dddda1680437da7d5d0)

#### Jak działa to drugie rozwiązanie

To rozwiązanie porównuje pliki `main.tex` i `main2.tex` i zapisuje wyniki do pliku o nazwie `main-d.tex`. Zauważ, że ponieważ `main-d.tex` plik jest *wygenerowanym* plikiem, tj. utworzonym przez nasz kod, nie będzie widoczny (wymieniony) w plikach projektu.

Plik o nazwie `diff.tex` używa `\ShellEscape` polecenia udostępnianego przez [`shellesc` pakietu](https://ctan.org/pkg/shellesc?lang=en), aby wykonać `latexdiff`. Wyniki porównania, zawarte w `main-d.tex`, są `\input` w `diff.tex` do składu.

`diff.tex` zawiera linię `\documentclass{dummy}` aby oszukać kompilator Overleaf i sprawić, by uwierzył `diff.tex` można skompilować. Działa to, ponieważ proces kompilacji Overleaf sprawdza aktualnie otwarty plik pod kątem obecności `\documentclass`. Jeśli go nie znajdzie, Overleaf kompiluje plik wskazany w Menu jako **Główny** pliku.

Jeśli wybierzesz **Ponowna kompilacja** z `diff.tex` otwórz w edytorze, zostaną złożone wyniki porównania. Możesz wybrać i skompilować `main.tex` lub `main2.tex` ponieważ oba zawierają `\documentclass` polecenie.

Więcej informacji o `latexdiff` sprawdź [oficjalną dokumentację](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/pl/artykuly-szczegolowe/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.
