> 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/overleaf-learn-latex-pt/artigos-aprofundados/27-how-to-use-latexdiff-on-overleaf.md).

# Como usar latexdiff no Overleaf

Este artigo demonstra duas maneiras de usar [latexdiff](https://ctan.org/pkg/latexdiff?lang=en) no Overleaf.

## O que é o latexdiff?

`latexdiff` é um script Perl concebido para comparar o conteúdo de dois ficheiros LaTeX. Ele gera código LaTeX que mostra visualmente quaisquer diferenças significativas entre esses ficheiros.

Para comparar `new.tex` com `old.tex` e enviar os resultados para um ficheiro chamado `diff.tex`, você usaria `latexdiff` assim:

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

`OPTIONS` são parâmetros de linha de comando que pode usar para configurar `latexdiff`o seu comportamento — consulte a [`latexdiff` documentação](http://mirrors.ctan.org/support/latexdiff/doc/latexdiff-man.pdf) para obter uma lista das opções disponíveis.

## Como usar o latexdiff no Overleaf

Apresentamos duas soluções, ambas publicadas e discutidas no tex.stackexchage. A [primeiro método](#david-carlisles-solution) foi [sugerido por David Carisle](https://tex.stackexchange.com/a/603311), a [segunda solução](#tom-hejdas-solution) foi [proposta por Tom Hejda](https://tex.stackexchange.com/a/603351), gestor de suporte do Overleaf.

### Solução de David Carlisle

Os ficheiros-fonte para demonstrar esta solução estão listados abaixo, juntamente com ligações para os abrir como um projeto do Overleaf. Veja [Como funciona esta primeira solução](#how-this-first-solution-works) para uma breve explicação deste código.

[Abra a solução de David Carlisle no 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{Solução de David Carlisle}
\author{me}
\date{May 2024}
\begin{document}
\maketitle
\section{Introdução}
zzz
\end{document}
```

**main2.tex**

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

\begin{document}

\maketitle

\section{Introdução}
zzz zzz

\section{Secção}
zzz
\end{document}
```

**latexmkrc**

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

[Abra a solução de David Carlisle no 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)

Este exemplo produz a seguinte saída:

![Gráfico que mostra a saída produzida pelo latexdiff](/files/30ee1de43a7036158c71bcface62190c92b8f69e)

#### Como funciona esta primeira solução

Esta solução compara os ficheiros `main.tex` e `main2.tex` e escreve os resultados para um ficheiro chamado `main-d.tex`. Note que, como `main-d.tex` ficheiro é um *gerado* ficheiro, ou seja, criado pelo nosso código, não ficará visível (listado) nos ficheiros do projeto.

Funciona fazendo uso de um ficheiro chamado `latexmkrc` que contém código Perl para personalizar o processo de compilação do Overleaf. Aqui, o comando para compilar usando pdfLaTeX é redefinido para primeiro executar `latexdiff` e depois executar o pdfLaTeX para compilar `main-d.tex`, o ficheiro gerado por `latexdiff`.

Como [observado pelo autor da solução](https://tex.stackexchange.com/a/603311), para deixar de executar `latexdiff` e compor o conteúdo real de `main.tex` ou `main2.tex`, basta adicionar um `#`, o marcador de comentário do Perl, à `latexmkrc` linha de comando, fazendo com que fique assim:

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

Agora pode compilar `main.tex` ou `main2.tex` para compor o seu conteúdo real, e não as diferenças entre eles.

Para mais informações, consulte o artigo do Overleaf [Como usar `latexmkrc` com o Overleaf](/latex/overleaf-learn-latex-pt/artigos-aprofundados/28-how-to-use-latexmkrc-with-overleaf.md).

### Solução de Tom Hejda

Os ficheiros-fonte para demonstrar esta solução estão listados abaixo, juntamente com ligações para os abrir como um projeto do Overleaf. Veja [Como funciona esta segunda solução](#how-this-second-solution-works) para uma breve explicação deste código.

[Abra a solução de Tom Hejda no 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{A demonstrar o latexdiff}
```

**main.tex**

```latex
\documentclass{article}
\title{Solução de Tom Hejda}
\author{me}
\date{May 2024}
\begin{document}
\maketitle
\section{Introdução}
zzz
\end{document}
```

**main2.tex**

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

\begin{document}

\maketitle

\section{Introdução}
zzz zzz

\section{Secção}
zzz
\end{document}
```

[Abra a solução de Tom Hejda no 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)

Este exemplo produz a seguinte saída:

![Gráfico que mostra a saída produzida pelo latexdiff](/files/d4c1f24e495744890342f2df3087854d6ce2d7b9)

#### Como funciona esta segunda solução

Esta solução compara os ficheiros `main.tex` e `main2.tex` e escreve os resultados para um ficheiro chamado `main-d.tex`. Note que, como `main-d.tex` ficheiro é um *gerado* ficheiro, ou seja, criado pelo nosso código, não ficará visível (listado) nos ficheiros do projeto.

Um ficheiro chamado `diff.tex` usa o `\ShellEscape` comando, disponibilizado pelo [`shellesc` pacote](https://ctan.org/pkg/shellesc?lang=en), para executar `latexdiff`. Os resultados da comparação, contidos em `main-d.tex`, são `\input` em `diff.tex` para composição.

`diff.tex` contém a linha `\documentclass{dummy}` para enganar o compilador do Overleaf, fazendo-o acreditar que `diff.tex` pode ser compilado. Isso funciona porque o processo de compilação do Overleaf verifica o ficheiro atualmente aberto quanto à presença de `\documentclass`. Se não o encontrar, o Overleaf compila o ficheiro listado no Menu como **Principal** ficheiro.

Se selecionar **Recompilar** com `diff.tex` abrir no editor, ele irá compor os resultados da comparação. Pode selecionar e compilar `main.tex` ou `main2.tex` porque ambos contêm um `\documentclass` comando.

Para mais informações sobre `latexdiff` consulte a [documentação oficial](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/overleaf-learn-latex-pt/artigos-aprofundados/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.
