最近碰到了一个硬钉子,论文审稿意见返回来需要修改,但是修改完要提交两个修改版本:一个是修改后的最新版论文稿件,这个好说;另外一个是包含了修改痕迹的修订版稿件,而且修订的内容还要高亮(见下图,这个图扯就扯在它是word版的,但投稿要用latex写,惊不惊喜意不意外?),为了实现这两个要求,跟latex斗智斗勇十几天终于在老师和师姐的帮助下解决了这个老大难的问题,特此总结一下防止以后在掉进坑里。特别感谢老板提供的latexdiff修改方法还陪我一块加班改论文到大半夜,以及老婆对latexdiff编译乱码问题的关键帮助!

img

如何选择latex的修改方案

如果可以的话,其实还是推荐changes包,因为你只需要通过代码的形式把修改内容写进latex里,然后通过全局控制只显示旧版只显示新版显示修订过程实现三个版本的快速渲染,完美符合latex的思想!但是,changes包也有坏处,他对中文的支持很不好,而且不支持双栏,所以如果是双栏的论文那就只能选择latexdiff的方案了。而latexdiff虽然可以显示出修订过程,但是没法按照要求高亮背景,并添加批注,想要高亮和批注就只能渲染完一版然后一点一点手工土法修改,要是再多来几个老师和同学一块修订,不停的返工,那太酸爽了o(╥﹏╥)o。所以总结一下changes包和latexdiff的优缺点,看自己的需求选择人工工作量少的方案,哪怕花1天去搞自动流程都不要引入人工,不然一旦返工就得花掉成倍的垃圾时间。

优势 劣势
changes包 一次编写,自动生成三种不同的文档,而且生成的pdf自带高亮和批注 文档兼容性极差,除非是eprint那种简单格式的,不然动不动就不显示高亮或者批注
latexdiff 直接把新的tex和旧的tex合并就完事了,对于大多数英文期刊这个指令还是很友好的 没有高亮和批注,生成的pdf得靠自己纯手工高亮,一旦返工就是噩梦

changes包方式

changes包其实很适合overleaf这种在线协作的写论文方式,使用这个包的时候需要注意一点,批注的宽度可能会超过页面宽度,所以需要先在导言区手动设置页面宽度以便留出足够的空间显示批注:

1
2
3
\geometry{a4paper,left=3cm,right=3cm,top=3cm,bottom=2cm} % 调整页面布局,右侧留出空间
\setlength{\paperwidth}{26cm} % 扩展页面宽度,增加几厘米用于边注
\setlength{\textwidth}{16cm} % 保持左侧正文为A4纸宽度

然后在导言区添加changes包:

1
\usepackage{changes}

命令用法

常见的命令如下,更多的自定义设置见文档:https://mirrors.ibiblio.org/CTAN/macros/latex/contrib/changes/changes.english.pdf

1
2
3
4
5
6
7
8
9
10
% 添加
This is \added{added text}.
% 删除
This is \deleted[comment={two words}]{deleted text}.
% 替换
This is \replaced{new}{old} text.
% 高亮
This is \highlight{highlight} text.
% 批注
This is \comment{comment} commented text.

效果如下:

image-20250114101016914

需要注意的是,直接导入changes包可能会报错,一般这种情况是因为指令冲突,需要在导入的时候添加commandnameprefix=always指令。

1
\usepackage[commandnameprefix=always]{changes}

使用指令的时候就需要在原有的指令前加上ch

1
2
3
4
% 这是一个\chadded{新增的}句子。
% 这是一个\chdeleted{需要删除的}句子。
% 这是一个\chreplaced{新的文本}{旧的文本}。
% 这是一个\chhighlight{需要注意的部分}。

如果对changes的批注有要求的话,还需要引用todonotes, 在进一步对todonotes进行配置。

1
2
\usepackage[colorinlistoftodos,size=tiny]{todonotes}	%配置批注栏的效果
\usepackage[authormarkup=todonotes,commandnameprefix=always]{changes} %引入todonotes包

对于需要添加高亮和批注的修订,只需要在正文代码中进行以下修改即可,这里以删除为例,这里使用了高亮和删除的嵌套,[comment={审阅意见10}]跟在\chhighlight后作为对高亮的批注,高亮内部在嵌套一个删除,实现修订痕迹和修订批注的效果:

1
实验结果表明,本协议\chhighlight[comment={审阅意见10}]{\chdeleted{在保证效率的同时,}}极大提升了效果。

效果如下:

image-20250114103502740

添加\chadded

1
本协议\chhighlight[comment={审阅意见10}]{\chadded{在保证效率的同时,}}极大提升了效果。

效果:

image-20250114104427004

替换\chreplaced

1
本协议\chhighlight[comment={审阅意见10}]{\chreplaced{balabala}{在保证效率的同时,}}极大提升了效果。

效果:

image-20250114104519595

颜色格式

如果对高亮的颜色有要求,也可以通过newcommand命令个性化设置,但是我一直没搞定批注的颜色设置,所以使用了changes包修订todo批注的方式。首先在导言区自定义包含颜色的高亮和批注:

1
2
3
4
5
6
7
8
% 自定义批注颜色
\newcommand{\redtodo}[2][]{\todo[color=red!20, linecolor=red, bordercolor=red, size=tiny, #1]{#2}}
\newcommand{\bluetodo}[2][]{\todo[color=blue!20, linecolor=blue, bordercolor=blue, #1]{#2}}

% 自定义高亮颜色
\newcommand{\coloredhighlight}[2]{%
\colorbox{#1!20}{#2}%
}

然后在正文中使用这个两个指令即可:

1
\coloredhighlight{red}{In the decentralized markets based on \chadded{blockchain}}\redtodo[size=\tiny]{意见9}

效果:

image-20250114105118537

缺点

changes包对双栏的支持效果很不好,双栏的无论是使用changes内嵌的comment方法还是手动定义todo的方法都无法在边栏显示批注内容,我就卡在这里一直没法解决,被迫使用latexdiff指令的方法。

latexdiff方式

因为我的论文是用overleaf写的,使用latexdiff必须要在本地配置一下latex环境,所以需要先安装texlive2024、texstudio、latexdiff,在进行比对生成diff文件,放进texstudio里渲染后手动高亮修改痕迹。

安装texlive2024

  1. texlive官网下载安装包:https://tug.org/texlive/windows.html

  2. 使用简易安装
    image-20250114105742804

  3. 选择install,一路next
    image-20250114105822705

  4. 修改路径,然后点安装(installation root 可以使用默认位置,这样环境变量和texstudio设置会很方便)
    image-20250114110034873

  5. 安装过程时间会很久(20分钟+),等到所有安装包执行完毕,退出即可。然后再检查一下环境变量的path是否有texlive路径
    image-20250114110233321

    这里的用户变量和系统变量里的path最好都添加上,否则会出现管理员运行就可以,非管理员运行报错的问题

  6. 使用cmd验证是否安装成功
    image-20250114110414993

安装texstudio

  1. 去texstudio官网:https://texstudio.sourceforge.net/ ,选择Windows installer下载
    image-20250114110722200
  2. 运行texstudio安装程序,修改安装路径然后一路下一步就行。
  3. 打开texstudio,选项-设置TeXstudio
    image-20250114111006211
  4. (可选步骤)选择构建,这里因为我是中文论文,默认的pdflatex用不了,所以需要手动修改成Xelatex
    image-20250114111129468
  5. 此时设置成功,就可以在本地使用latex编辑文件了,测试一下,编译通过
    image-20250114111220695

安装strawberry perl

  1. 去strawberry perl官网下载msi包即可:https://strawberryperl.com/
    image-20250114111700740
  2. 一路安装即可,路径可以自己设置,但我使用的是默认的。
    image-20250114111746020

latexdiff使用

由于我的texlive2024自带了latexdiff,不需要额外进行安装。这里直接介绍如何使用latexdiff。

latexdiff对中文路径支持很不好,使用的时候需要尤其注意中文路径的问题和编码问题!

  1. 先打开cmd,输入latexdiff看下是否正常使用
    image-20250114111911178

  2. old.texnew.tex放到同一个路径下,如果两个tex引用了同一个参考文献文件,需要手动修改其中的一个确保两个文件引用的是不一样的bib文件。

    比如old.tex文件里头的参考文献修改成oldref.bib,然后再把参考文献文件复制一份,重命名成oldref.bib,确保相同目录下同时有新旧论文tex文件和对应的新旧参考文献文件。

    image-20250114112407264

  3. 确认old.texnew.tex文件是UTF-8编码,这一步很重要,否则latexdiff生成的是乱码,我这里用的是sublimetext(记事本也可以)

    image-20250114112619184

    如不是utf-8编码的话,就手动保存成utf-8编码即可
    image-20250114112831982

  4. 使用latexdiff命令比较文件,输出到different.tex中,请注意,这个指令中不能有任何非英文字母,否则会报错

    1
    D:\lunwen\new>latexdiff old.tex new.tex > different.tex
  5. 得到different.tex文件之后,先不要在texstudio中打开进行编译,因为此时different.tex是utf-16编码,导入到texstudio就乱码了,像这样:
    8e67dca52d0316926899f2e9a533e8d

  6. 在sublimetext中打开different.tex文件,按照步骤3的方式修改一下这个文件的编码为utf-8然后保存。

  7. 然后在texstudio里打开,就是正常的了

    image-20250114113607125

  8. 编译通过!但是很多地方会有奇怪的换行问题,只能用\\(公式里用\allowbreak)手动控制换行(酸爽*1)
    image-20250114114043199

  9. 然后在打开pdf编辑器(different.pdf一定要备份!),手动高亮,添加注释(酸爽*2)
    image-20250114125000209

    如果有返工的话建议直接在这个版本上改,不然会重复5-9步,工作量超级加倍