Gibt es eine Möglichkeit, Latexdiff mit dem Paket „Subfiles“ zum Laufen zu bringen?
Ich verwende Unterdateien, um Teile des Dokuments aus verschiedenen .tex-Dateien einzubinden. Latexdiff scheint Änderungen in den Unterdateien nicht zu markieren.
Die Option --flatten hilft nicht. Die Latexdiff-Version ist 1.0.2.
Beispiel :
main.tex
\documentclass[10pt]{article}
\usepackage{subfiles}
\begin{document}
\subfile{includeme.tex}
\end{document}
includeme.tex
\documentclass[main.tex]{subfiles}
\begin{document}
Text!
\end{document}
Läuft
latexdiff d1/main.tex d2/main.tex --flatten > mydiff.tex
das resultierende Dokument enthält einfach nicht den Inhalt der Unterdatei.
meindiff.tex
\documentclass[10pt]{article}
%DIF LATEXDIFF DIFFERENCE FILE
%DIF (...)
%DIF END PREAMBLE EXTENSION ADDED BY LATEXDIFF
\begin{document}
\subfile{includeme.tex}
\end{document}
Also ja, das Problem liegt an der Flatten-Pipeline/dem Flatten-Workflow, der anscheinend nicht dafür ausgelegt ist, mit \subfile{includeme.tex}-Includes zu funktionieren.
Antwort1
Beachten Sie, dass es sich bei dem Folgenden eher um eine Problemumgehung als um eine vollständige Lösung handelt:
latexdiff --append-safecmd=subfile d1/main.tex d2/main.tex --flatten > mydiff.tex
kümmert sich um die Fälle, in denen ein \subfile-Befehl zur Datei hinzugefügt oder daraus entfernt wurde und der gesamte Block markiert ist (nur auf dem MWE getestet, müsste für länger eingeschlossenes Material bestätigt werden) oder sich der Dateiname der eingeschlossenen Datei ändert. Sie müssten die eingeschlossenen Dateien trotzdem in das Verzeichnis kopieren, in dem die Differenzdatei generiert wird (aktuelles Verzeichnis im MWE).
Um inhaltliche Änderungen an den Unterdateien hervorzuheben, können Sie jede Datei separat verarbeiten
cat /dev/null > null latexdiff -pnull d1/includeme.tex d2/includeme.tex > includeme.tex
Die Option -p zwingt latexdiff, die Präambelbefehle wegzulassen, die es normalerweise automatisch einfügt, wenn es ein \begin{document} findet (die Zusatzdatei „null“ wird benötigt, da -p/dev/null aufgrund eines Fehlers in latexdiff nicht erkannt wird).
Jetzt muss dies nur noch automatisiert werden. Die folgende Zeile ist ein Hack, um eine gewisse Automatisierung als Proof-of-Concept zu erreichen, müsste aber wirklich zu einem robusteren und flexibleren kleinen Shell-Skript erweitert werden:
grep -v '^%' main.tex | grep subfile\{ | sed 's/^.*subfile{\(.*\)}.*$/\1/' \ | awk '{ print "latexdiff -pnull d1/" $1, "d2/" $1,">", $1 }' | sh
Antwort2
2 Jahre nachdem die Frage gestellt wurde, habe ich schließlich eine Batchdatei geschrieben, um das Problem in einer Windows-Umgebung zu lösen:
@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
Antwort3
Oben postenVerknüpfungwar sehr hilfreich, aber ich habe meine eigene geänderte Version erstellt, die Sie verwenden können.
@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