我正在与我的合作者撰写一篇科学论文。我们已经向期刊提交了一个版本,现在我们得到了他们的评论,所以我们需要修复一些问题。在 Microsoft Word 中有一个“跟踪更改”选项,它会将删除的文本显示为划掉,并将新文本显示为粗体(如果我没记错的话)。有没有办法在 LaTeX 中实现类似的效果?
我正在考虑为修订版本创建一个新文件,然后编写一个脚本,该脚本基本上会比较这两个文件,并在将其发送到 latex 之前将差异加粗或划掉。有没有已经可以做到这一点的工具?
答案1
你可以用 Perl 程序处理 TeX 文件latexdiff
它包含在大多数 LaTeX 发行版中。
来自手册:
简而言之,latexdiff 是一个帮助管理 latex 文档修订的实用程序。它比较两个有效的 latex 文件(这里称为 old.tex 和 new.tex),找出它们之间的显著差异(即忽略空格数和换行符的位置),并添加特殊命令来突出显示差异。
答案2
我已经使用了changes
以前我使用过这个包,我发现它非常有用。它有一个 key=value 系统,因此大多数东西都是可定制的。您可以定义不同的作者,并根据 id 跟踪更改;这里有一个简单的例子(主要来自手册)。
\documentclass{article}
\usepackage{changes}
\usepackage{lipsum}% <- For dummy text
\definechangesauthor[name={Per cusse}, color=orange]{per}
\setremarkmarkup{(#2)}
\begin{document}
\lipsum[1-7]
This is \added[id=per,remark={we need this}]{new} text.
This is \added[id=per,remark={has to be in it}]{new} text.
This is \deleted[id=per,remark=obsolete]{unnecessary}text.
This is \replaced[id=per]{nice}{bad} text.
This is \added[remark={we need this}]{new} text.
This is \added[remark={has to be in it}]{new} text.
This is \deleted[remark=obsolete]{unnecessary}text.
This is \replaced{nice}{bad} text.
\listofchanges
\end{document}
好消息是,如果您final
为包声明提供该选项,它将\usepackage[final]{changes}
清除作者所做的更改痕迹并尊重最后的更改。请参阅替换和删除的文本以获取示例。
答案3
Latex 文档是纯文本。因此,您可以使用数百万软件开发人员几十年来一直使用的相同强大方法来处理 Latex 文档的跟踪更改!
软件开发人员如何跟踪其源代码中的变化的简要描述:
下面是一个 diff 程序的屏幕截图(本例中,这是来自 Beyond Compare 网站的库存照片):
(我其实不使用 Beyond Compare。我更喜欢普通的使用 vim 进行差异分析,对差异进行着色。
因此,每当发生更改时,更改都会保存在版本控制中。并且您的版本控制会跟踪所有更改。允许您执行以下操作:比较两个最近的版本,或将最新版本与 5 个版本进行比较...或将任意版本与任意版本进行比较。您已将所有版本存储在版本控制中!
答案4
您可以简单地创建两个命令来标记添加和删除的文本,并根据需要显示它们。LyX 具有更改跟踪机制,该机制在源代码中实现如下:
\PassOptionsToPackage{normalem}{ulem}
\usepackage{ulem}
\providecolor{added}{rgb}{0,0,1}
\providecolor{deleted}{rgb}{1,0,0}
%% Change tracking with ulem
\newcommand{\added}[1]{{\color{added}{}#1}}
\newcommand{\deleted}[1]{{\color{deleted}\sout{#1}}}
无论你标记什么,\added{...}
都会以蓝色和红色显示,\deleted{...}
并带有删除线。如果这样的功能对你来说足够了,那么在文档的最终编译中,只需重新定义\added
为纯文本传递和\deleted
省略即可。即,以下代码片段应该可以做到:
\newcommand{\added}[1]{#1}
\newcommand{\deleted}[1]{}
请注意,这些是命令,因此您不能将其用于太长的文本片段。如果您的更改更像是文本块,请查看以下软件包versions
:加拿大运输安全局。