简短问题
似乎--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
--flatten
latexdiff
答案3
通常,我会latexpand
首先使用 将单独的文件合并为一个 tex 文件,然后使用latexdiff
。这可以通过批处理脚本轻松完成。