Latexdiff 与子文件

Latexdiff 与子文件

有没有办法让 latexdiff 与'subfiles'包一起工作?

我使用子文件来包含来自不同 .tex 文件的文档部分。Latexdiff 似乎没有标记子文件中的更改。

--flatten 选项没有帮助。Latexdiff 版本是 1.0.2。

例子 :

主文本

\documentclass[10pt]{article}
\usepackage{subfiles}
\begin{document}
\subfile{includeme.tex}
\end{document}  

包括me.tex

\documentclass[main.tex]{subfiles} 
\begin{document}
Text!
\end{document}

跑步

latexdiff d1/main.tex d2/main.tex --flatten > 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”)。

现在剩下的就是自动化。下面这行代码是实现自动化的一种简单方法,作为概念验证,但实际上需要扩展为更强大、更灵活的小型 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

相关内容