帶子檔案的 Latexdiff

帶子檔案的 Latexdiff

有沒有辦法讓 Latexdiff 與「子檔案」套件一起工作?

我使用子文件來包含不同 .tex 文件中的部分文件。 Latexdiff 似乎沒有標記子檔案中的變更。

--flatten 選項沒有幫助。 Latexdiff 版本是 1.0.2。

例 :

主文件

\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} 時自動插入的前導碼命令(需要輔助檔案“null”,因為由於 Latexdiff 中的錯誤而無法識別 -p/dev/null) 。

現在剩下的就是將其自動化。以下行是實現一些自動化作為概念驗證的一種駭客方法,但確實需要擴展為更強大、更靈活的小型 shell 腳本:

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

答案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

相關內容