Latexdiff con subarchivos

Latexdiff con subarchivos

¿Hay alguna manera de hacer que latexdiff funcione con el paquete 'subfiles'?

Utilizo subarchivos para incluir partes del documento de diferentes archivos .tex. Latexdiff no parece marcar cambios en los subarchivos.

La opción --flatten no ayuda. La versión de Latexdiff es 1.0.2.

Ejemplo :

principal.tex

\documentclass[10pt]{article}
\usepackage{subfiles}
\begin{document}
\subfile{includeme.tex}
\end{document}  

incluirme.tex

\documentclass[main.tex]{subfiles} 
\begin{document}
Text!
\end{document}

Correr

latexdiff d1/main.tex d2/main.tex --flatten > mydiff.tex

el documento resultante simplemente no incluye el contenido del subarchivo.

mydiff.tex

\documentclass[10pt]{article}
%DIF LATEXDIFF DIFFERENCE FILE
%DIF (...)
%DIF END PREAMBLE EXTENSION ADDED BY LATEXDIFF
\begin{document}
\subfile{includeme.tex}
\end{document}

Entonces, sí, el problema radica en la canalización/flujo de trabajo aplanado, que no parece estar diseñado para funcionar con \subfile{includeme.tex} inclusiones.

Respuesta1

Tenga en cuenta que lo siguiente es una solución alternativa más que una solución completa:

latexdiff --append-safecmd=subfile d1/main.tex d2/main.tex --flatten > mydiff.tex

se encargará de los casos en los que se haya agregado o eliminado un comando \subfile del archivo, y todo el bloque esté marcado (solo probado en el MWE, sería necesario confirmarlo para material incluido más largo), o el nombre del archivo incluido cambios de archivos. Aún necesitará copiar los archivos incluidos en el directorio donde se genera el archivo de diferencia (directorio actual en MWE).

Para resaltar los cambios de contenido en los subarchivos, puede procesar cada archivo por separado

cat /dev/null > null latexdiff -pnull d1/includeme.tex d2/includeme.tex > includeme.tex

La opción -p obliga a latexdiff a omitir los comandos de preámbulo que normalmente inserta automáticamente cuando encuentra un \begin{document} (se necesita el archivo auxiliar "null" ya que -p/dev/null no se reconoce debido a un error en latexdiff) .

Ahora sólo queda automatizar esto. La siguiente línea es una forma ingeniosa de lograr algo de automatización como prueba de concepto, pero realmente necesitaría ampliarse a un pequeño script de shell más robusto y flexible:

grep -v '^%' main.tex | grep subfile\{ | sed 's/^.*subfile{\(.*\)}.*$/\1/' \ | awk '{ print "latexdiff -pnull d1/" $1, "d2/" $1,">", $1 }' | sh

Respuesta2

2 años después de que se hizo la pregunta, terminé escribiendo un archivo por lotes para resolver esto en un entorno de Windows:

@echo off
setlocal

set "old_path=..\..\tags\old_version\my_folder\"
set "new_path=..\..\..\trunk\my_folder\"
set "doc_name=my_file.tex"

latexdiff --flatten %doc_name% %doc_name% > flat.tex
cd %old_path%
latexdiff --flatten %doc_name% %doc_name% > flat.tex
cd %new_path%
latexdiff --flatten %old_path%flat.tex flat.tex > diff.tex

rm flat.tex
rm %old_path%flat.tex

Respuesta3

Publicar arribaenlaceFue muy útil, pero hice mi versión modificada que puedes usar.

@echo off
setlocal

set "old_path=..\documentation\"
set "new_path=..\documentation_old\"
set "doc_name_filename=main"

echo Generate %doc_name_filename%_flat.tex for %new_path%
cd %new_path%
latexpand %doc_name_filename%.tex > %doc_name_filename%_flat.tex

echo Generate %doc_name_filename%_flat.tex for %old_path%
cd %old_path%
latexpand %doc_name_filename%.tex > %doc_name_filename%_flat.tex

echo Generate diff
cd %new_path%
latexdiff %old_path%%doc_name_filename%_flat.tex %doc_name_filename%_flat.tex > diff.tex
pdflatex  --max-print-line=10000 -shell-escape -synctex=1 -interaction=nonstopmode -file-line-error -recorder  diff.tex 2>&1 > NUL
echo PDF generated in case of problems see diff.log

echo Cleaning up
del %doc_name_filename%_flat.tex
del %old_path%%doc_name_filename%_flat.tex

pause

información relacionada