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

# Cómo usar latexdiff en Overleaf

Este artículo demuestra dos formas de usar [latexdiff](https://ctan.org/pkg/latexdiff?lang=en) en Overleaf.

## ¿Qué es latexdiff?

`latexdiff` es un script de Perl diseñado para comparar el contenido de dos archivos LaTeX. Genera código LaTeX que muestra visualmente cualquier diferencia significativa entre esos archivos.

Para comparar `new.tex` con `old.tex` y enviar los resultados a un archivo llamado `diff.tex`, usarías `latexdiff` así:

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

`OPTIONS` son parámetros de línea de comandos que puedes usar para configurar `latexdiff`el comportamiento de—consulta la [`latexdiff` documentación](http://mirrors.ctan.org/support/latexdiff/doc/latexdiff-man.pdf) para ver una lista de las opciones disponibles.

## Cómo usar latexdiff en Overleaf

Ofrecemos dos soluciones, ambas publicadas y comentadas en tex.stackexchage. La [primera método](#david-carlisles-solution) fue [sugerida por David Carisle](https://tex.stackexchange.com/a/603311), la [segunda solución](#tom-hejdas-solution) fue [propuesta por Tom Hejda](https://tex.stackexchange.com/a/603351), el gerente de soporte de Overleaf.

### La solución de David Carlisle

Los archivos fuente para demostrar esta solución se enumeran a continuación, junto con enlaces para abrirlos como un proyecto de Overleaf. Consulta [Cómo funciona esta primera solución](#how-this-first-solution-works) para una breve explicación de este código.

[Abre la solución de David Carlisle en 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{La solución de David Carlisle}
\author{me}
\date{mayo de 2024}
\begin{document}
\maketitle
\section{Introducción}
zzz
\end{document}
```

**main2.tex**

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

\begin{document}

\maketitle

\section{Introducción}
zzz zzz

\section{Sección}
zzz
\end{document}
```

**latexmkrc**

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

[Abre la solución de David Carlisle en 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 ejemplo produce la siguiente salida:

![Gráfico que muestra la salida producida por latexdiff](/files/3491a385342a4c8abc08e605d1b6719be9bd8b32)

#### Cómo funciona esta primera solución

Esta solución compara los archivos `main.tex` y `main2.tex` y escribe los resultados en un archivo llamado `main-d.tex`. Ten en cuenta que, como `main-d.tex` el archivo *generado* archivo, es decir, creado por nuestro código, no será visible (listado) dentro de los archivos del proyecto.

Funciona haciendo uso de un archivo llamado `latexmkrc` que contiene código Perl para personalizar el proceso de compilación de Overleaf. Aquí, el comando para compilar usando pdfLaTeX se redefine para ejecutar primero `latexdiff` y luego ejecutar pdfLaTeX para compilar `main-d.tex`, el archivo generado por `latexdiff`.

Como [señaló el autor de la solución](https://tex.stackexchange.com/a/603311), para dejar de ejecutar `latexdiff` y maquetar el contenido real de `main.tex` o `main2.tex`, solo añade un `#`, el marcador de comentario de Perl, a la `latexmkrc` línea de comandos, quedando así:

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

Ahora puedes compilar `main.tex` o `main2.tex` para maquetar su contenido real, no las diferencias entre ellos.

Para más información, consulta el artículo de Overleaf [Cómo usar `latexmkrc` con Overleaf](/latex/es/articulos-en-profundidad/28-how-to-use-latexmkrc-with-overleaf.md).

### La solución de Tom Hejda

Los archivos fuente para demostrar esta solución se enumeran a continuación, junto con enlaces para abrirlos como un proyecto de Overleaf. Consulta [Cómo funciona esta segunda solución](#how-this-second-solution-works) para una breve explicación de este código.

[Abre la solución de Tom Hejda en 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{Demostrando latexdiff}
```

**main.tex**

```latex
\documentclass{article}
\title{La solución de Tom Hejda}
\author{me}
\date{mayo de 2024}
\begin{document}
\maketitle
\section{Introducción}
zzz
\end{document}
```

**main2.tex**

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

\begin{document}

\maketitle

\section{Introducción}
zzz zzz

\section{Sección}
zzz
\end{document}
```

[Abre la solución de Tom Hejda en 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 ejemplo produce la siguiente salida:

![Gráfico que muestra la salida producida por latexdiff](/files/a0def24ab1452c6da1ebb5dfaf53e14e2258f88b)

#### Cómo funciona esta segunda solución

Esta solución compara los archivos `main.tex` y `main2.tex` y escribe los resultados en un archivo llamado `main-d.tex`. Ten en cuenta que, como `main-d.tex` el archivo *generado* archivo, es decir, creado por nuestro código, no será visible (listado) dentro de los archivos del proyecto.

Un archivo llamado `diff.tex` usa el `\ShellEscape` comando, proporcionado por el [`shellesc` paquete](https://ctan.org/pkg/shellesc?lang=en), para ejecutar `latexdiff`. Los resultados de la comparación, contenidos en `main-d.tex`, se `\input` en `diff.tex` para maquetar.

`diff.tex` contiene la línea `\documentclass{dummy}` para engañar al compilador de Overleaf haciéndole creer `diff.tex` puede compilarse. Eso funciona porque el proceso de compilación de Overleaf comprueba si el archivo abierto actualmente contiene `\documentclass`. Si no lo encuentra, Overleaf compila el archivo listado en el menú como el **principal** archivo.

Si seleccionas **Recompilar** con `diff.tex` abierto en el editor, maquetará los resultados de la comparación. Puedes seleccionar y compilar `main.tex` o `main2.tex` porque ambos contienen un `\documentclass` comando.

Para más información sobre `latexdiff` consulta la [documentación 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/es/articulos-en-profundidad/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.
