![Latexdiff com subarquivos](https://rvso.com/image/286963/Latexdiff%20com%20subarquivos.png)
Existe uma maneira de fazer o latexdiff funcionar com o pacote 'subfiles'?
Eu uso subarquivos para incluir partes do documento de diferentes arquivos .tex. O Latexdiff não parece marcar alterações nos subarquivos.
A opção --flatten não ajuda. A versão do Latexdiff é 1.0.2.
Exemplo :
principal.tex
\documentclass[10pt]{article}
\usepackage{subfiles}
\begin{document}
\subfile{includeme.tex}
\end{document}
includeme.tex
\documentclass[main.tex]{subfiles}
\begin{document}
Text!
\end{document}
Correndo
latexdiff d1/main.tex d2/main.tex --flatten > mydiff.tex
o documento resultante simplesmente não inclui o conteúdo do subarquivo.
meudiff.tex
\documentclass[10pt]{article}
%DIF LATEXDIFF DIFFERENCE FILE
%DIF (...)
%DIF END PREAMBLE EXTENSION ADDED BY LATEXDIFF
\begin{document}
\subfile{includeme.tex}
\end{document}
Então, sim, o problema está no pipeline/fluxo de trabalho nivelado, que não parece funcionar com \subfile{includeme.tex} inclui.
Responder1
Observe que o seguinte é uma solução alternativa e não uma solução completa:
latexdiff --append-safecmd=subfile d1/main.tex d2/main.tex --flatten > mydiff.tex
cuidará dos casos em que um comando \subfile foi adicionado ou removido do arquivo, e todo o bloco é marcado (testado apenas no MWE, precisaria ser confirmado para material incluído mais longo), ou o nome do arquivo incluído alterações de arquivo. Você ainda precisaria copiar os arquivos incluídos no diretório onde o arquivo de diferença é gerado (diretório atual no MWE).
Para destacar alterações de conteúdo nos subarquivos, você pode processar cada arquivo separadamente
cat /dev/null > null latexdiff -pnull d1/includeme.tex d2/includeme.tex > includeme.tex
A opção -p força o latexdiff a omitir os comandos de preâmbulo que normalmente insere automaticamente quando encontra um \begin{document} (o arquivo auxiliar "null" é necessário pois -p/dev/null não é reconhecido devido a um bug no latexdiff) .
Agora só falta automatizar isso. A linha a seguir é uma maneira hackeada de obter alguma automação como prova de conceito, mas realmente precisaria ser expandida para um pequeno script de shell mais robusto e flexível:
grep -v '^%' main.tex | grep subfile\{ | sed 's/^.*subfile{\(.*\)}.*$/\1/' \ | awk '{ print "latexdiff -pnull d1/" $1, "d2/" $1,">", $1 }' | sh
Responder2
2 anos depois que a pergunta foi feita, acabei escrevendo um arquivo em lote para resolver isso em um ambiente 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
Responder3
Postar acimalinkfoi muito útil, mas fiz minha versão modificada que você pode 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