¿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