하위 파일이 포함된 Latexdiff

하위 파일이 포함된 Latexdiff

latexdiff를 'subfiles' 패키지와 함께 사용할 수 있는 방법이 있나요?

나는 다른 .tex 파일의 문서 일부를 포함하기 위해 하위 파일을 사용합니다. Latexdiff는 하위 파일의 변경 사항을 표시하지 않는 것 같습니다.

--Flatten 옵션은 도움이 되지 않습니다. Latexdiff 버전은 1.0.2입니다.

예 :

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}

달리기

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

결과 문서에는 하위 파일의 내용이 포함되지 않습니다.

mydiff.tex

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

그렇습니다. 문제는 \subfile{includeme.tex} 포함과 함께 작동하지 않는 것 같은 평면화된 파이프라인/워크플로에 있습니다.

답변1

다음은 전체 솔루션이 아닌 해결 방법입니다.

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

\subfile 명령이 파일에 추가되거나 제거되고 전체 블록이 표시되는 경우(MWE에서만 테스트되며 더 긴 내용이 포함된 경우 확인해야 함) 또는 포함된 파일 이름이 표시되는 경우를 처리합니다. 파일 변경. 포함된 파일을 차등 파일이 생성된 디렉터리(MWE의 현재 디렉터리)에 복사해야 합니다.

하위 파일의 콘텐츠 변경 사항을 강조 표시하려면 각 파일을 별도로 처리하면 됩니다.

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

-p 옵션은 latexdiff가 \begin{document}를 찾을 때 일반적으로 자동으로 삽입하는 프리앰블 명령을 생략하도록 강제합니다(latexdiff의 버그로 인해 -p/dev/null이 인식되지 않으므로 보조 파일 "null"이 필요합니다). .

이제 남은 것은 이를 자동화하는 것 뿐이다. 다음 줄은 개념 증명으로 일부 자동화를 달성하는 해킹 방법이지만 실제로는 더 강력하고 유연한 작은 쉘 스크립트로 확장되어야 합니다.

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

답변2

질문을 받은 지 2년이 지났지만 결국 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

답변3

위의 게시물링크매우 도움이 되었지만 여러분이 사용할 수 있도록 수정된 버전을 만들었습니다.

@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

관련 정보