latexdiff + svn 无法处理多个文件(扁平化)

latexdiff + svn 无法处理多个文件(扁平化)

简短问题

似乎--flatten无法与 配合使用latexdiff-vc。如何才能让它正常工作,而无需恢复到下面描述的详细工作流程?

语境

我使用 SVN 跟踪我的 Latex 文档的历史记录。我最近开始使用它latexdiff来生成突出显示某些修订之间的更改的 PDF。

我最初的 svn+latexdiff 工作流程是 (1) 将整个 svn 文件夹复制到临时位置,(2) 将其更新为相关修订版,(3) 返回原始 svn 文件夹,(4) 开始latexdiff指定相关文件夹和文件。当我使用语句将 latex 文档拆分为多个文件时\input{},我必须使用选项latexdiff --flatten才能使其正常工作。因此,在 Windows 命令提示符下,我输入了类似以下内容的内容:

latexdiff --flatten ..\..\copy_at_r48\main.tex main.tex > diff.tex

我想一定有更简单的方法,撞到 latexdiff-vc它支持直接指定 svn 修订版本。但是,下面的方法似乎不起作用,因为链接文件的旧版本似乎没有被检索/展平;主要内容中只有 DIFF 标记:

latexdiff-vc --flatten -r 48 main.tex

答案1

我编写了一个非常简单的 Windows 批处理脚本 ( latexdiff-svn.bat),用于自动执行我所描述的工作流程。它将 svn 工作副本的给定修订版本导出到临时文件夹(通常在 下C:\Users\username\AppData\Local\Temp),执行latexdiff --flatten,然后删除临时文件夹。

实际的基本脚本只有 5 行

:: Usage: 
::      latexdiff-svn <svn revision number> <filename>
set tempfolder=%TEMP%\latexdiffsvn
rmdir /s /q %tempfolder%
svn export -r %1 . %tempfolder%
latexdiff --flatten %tempfolder%/%2 %2 > diff-%2-r%1.tex
rmdir /s /q %tempfolder%



下面是一个稍微更详细的版本,它对参数进行了一些基本检查,并为用户提供了一些友好的提示。您可以将代码复制粘贴到名为“latexdiff-svn.bat”的文件中

:: Usage: 
::      latexdiff-svn <svn revision number> <filename>
:: e.g.
::      latexdiff-svn.bat 23 main.tex

::Some basic checks on the arguments
@if "%1"=="" goto not_enough_parameters
@if "%2"=="" goto not_enough_parameters
@if not exist %2 goto file_does_not_exist
@svn info -r %1 > NUL
@if errorlevel 1 goto revision_does_not_exist
@goto all_seems_ok

:not_enough_parameters
@echo.
@echo I need exactly two arguments, the first one specifying 
@echo the svn revision number, the second one the file name.
@echo Example syntax:
@echo    latexdiff-svn 23 main.tex
@goto :EOF

:file_does_not_exist
@echo.
@echo I couldn't find the file you specified: %2
@goto :EOF

:revision_does_not_exist
@echo.
@echo The current folder does not contain an svn working copy, 
@echo or the revision number specified (%1) does not exist
@goto :EOF

:all_seems_ok
@set tempfolder=%TEMP%\latexdiffsvn
@set difffile=diff-%2-r%1.tex
@if exist %tempfolder% rmdir /s /q %tempfolder%
@echo Creating temporary folder at revision %1
@svn export -r %1 . %tempfolder% > NUL
@echo Running latexdiff
latexdiff --flatten %tempfolder%/%2 %2 > %difffile%

:cleanup
@if exist %tempfolder% rmdir /s /q %tempfolder%

@echo.
@echo Written to: %difffile%
@echo Done !

注意:latexdiff使用的脚本--flatten会输出几行 DEBUG 行。如果您想要抑制这些行(而不修复 perl 脚本本身),请参阅此 stackoverflow 问题的解决方案:https://stackoverflow.com/questions/11362041/how-to-suppress-specific-lines-in-windows-cmd-output

答案2

从 1.1.0 版开始,SVN 的选项实际上支持通过临时在单独的目录中签出旧版本来latexdiff-vc使用该选项。Jörg对另一个答案的评论中提到的该选项的限制在较新版本的 中也不再存在。--flatten--flattenlatexdiff

答案3

通常,我会latexpand首先使用 将单独的文件合并为一个 tex 文件,然后使用latexdiff。这可以通过批处理脚本轻松完成。

相关内容