如何删除\added

如何删除\added

我正在用 latex 写一篇论文。我的导师要求我做一些修改,所以在查看了这个网站后,我找到了几种跟踪修改的解决方案,最后决定使用 changes 包。

我把包含 100 多处修改的文档发给他。他几乎批准了所有修改,然后又提出了几处新修改……并要求我发送一份仅包含新修改内容的新文档。

我知道使用更改包我可以使用“最终”选项来禁用更改标记,但我的乳胶代码仍然具有所有 \added{} \replaced{}{} 和 \deleted{},所以我的问题是:

有没有什么简单的方法可以隐藏修订版 1 中的更改并显示我现在要添加的新更改?

编辑:正如建议的那样,我添加了一个示例来显示我所拥有的内容,以及另一个我正在寻找的内容。

这是我的第一篇修订文本可能的样子:

\documentclass{article}

\usepackage{changes}
% Example of what first revision may be

\begin{document}

This is \added{new} text.

This is \deleted{unnecessary}text.

This is \replaced{nice}{bad} text. 

\end{document}

这就是我想要的第二个修订文本(当然,我不想手动删除 \added、\deleted、\replaced 命令,只是希望更改包忽略它们)

\documentclass{article}

\usepackage{changes}
% Example of what second revision should look like

\begin{document}

This is new text.

This is text.

This is nice text. 

\added{This should be seen as a change in revision 2 of document}

\end{document}

因此,如果您编译这两个文档,您就会明白我想要实现的目标,但显然无需手动删除 \added、\deleted、\replaced 命令。

我正在使用 Miktex+Texmaker(Windows 端口),它默认使用 pdflatex 进行编译。

提前致谢

答案1

在源文件中用 替换每个实例。适当定义\added。对其他两个更改命令执行相同操作。您可以使用 awk(如下所示)或在您喜欢的编辑器中使用搜索和替换来执行此操作。\xadded\xadded

版本1.tex:

\documentclass{article}

\usepackage{changes}
% Example of what first revision may be

\newcommand{\xadded}[1]{#1}
\newcommand{\xdeleted}[1]{}
\newcommand{\xreplaced}[2]{#1}

\begin{document}

This is \added{new} text. This is more \added{new text with
\emph{embedded} \TeX{} on more than one line.}

This is \deleted{unnecessary}text.

This is \replaced{nice}{bad} text. 

\end{document}

version2.tex,替换后:

\documentclass{article}

\usepackage{changes}
% Example of what first revision may be

\newcommand{\xadded}[1]{#1}
\newcommand{\xdeleted}[1]{}
\newcommand{\xreplaced}[2]{#1}

\begin{document}

This is \xadded{new} text. This is more \xadded{new text with
\emph{embedded} \TeX{} on more than one line.}

This is \xdeleted{unnecessary}text.

This is \xreplaced{nice}{bad} text. 

\end{document}

我使用的脚本:

#!/usr/bin/awk
# Rename a few TeX macros
#
{
    gsub(/\\added/,"\\xadded",$0);
    gsub(/\\deleted/,"\\xdeleted",$0);
    gsub(/\\replaced/,"\\xreplaced",$0);
    print
}

暂时搁置我原来那个尴尬的部分解决方案。

awk这是扩展这三个宏的程序的开始。

#!/usr/bin/awk
# Expand a few TeX macros
#

# delete the macro name
# leaving the parentheses doesn't hurt
/\\added/ { 
    sub(/\\added/,"",$0) 
}

# delete the macro name and its argument
/\\deleted/ { 
    sub(/\\deleted.*\}/,"",$0) 
}

# should delete the macro name and its SECOND argument
/\\replaced/ { 
    sub(/\\replaced/,"",$0)
}
{print}

调用 OP 的输入文件 expandsome.tex,命令

 $ awk -f expand.awk < expandsome.tex > expanded.tex

生产

documentclass{article}

\usepackage{changes}
% Example of what first revision may be

\begin{document}

This is {new} text.

This is text.

This is {nice}{bad} text. 

\end{document}

我还没有弄清楚删除的第二个参数的正则表达式语法\replace。我现在没时间。如果有人愿意贡献,那么我就不必明天或后天找时间了……

这不是一个可靠的解决方案。如果更改涉及多行,它将失败。如果任何一行中有多个类似的更改,它也会失败。

答案2

您会使用Vim文本编辑器吗?

如何删除\added

在正常模式下输入以下内容:(注意:不要输入<esc>和,而是按下键盘上的<enter>实际键esc和。)enter

<esc>qa/\\added\><enter>dt{yi{da{"0P<esc>q
1000@a

第一行记录并将一个宏存储到寄存器中,该宏a查找并替换单个— 即使其本身包含嵌套分组 — 例如,变成。\added{...}......\added{123\emph{foo}456}123\emph{foo}456

第二行执行该宏 1000 次。

如何删除\deleted

<esc>qb/\\deleted\><enter>dt{da{<esc>q
1000@b

第一行记录并将宏存储到寄存器中,b该宏查找并删除单个\deleted{...{...}...}

第二行执行b1000次。

如何删除\replaced

<esc>qc/\\replaced\><enter>dt{yi{da{da{"0P<esc>q
1000@c

等等等等

据我所知,perl或脚本的难点在于找到一种可靠的方法来解析嵌套分组。awkTeX

答案3

正如有人提到的那样,如果必须多次跟踪更改,则使用更改包跟踪更改并不是可行的方法。

如果我是你,我会花时间学习和设置 git、cvs。你不需要了解太多,只需要了解最基本的命令(git add、git commit,还有什么?)。

然后,您必须删除用于标记更改的命令:\add\changed以及\deleted可能。

之后将其作为第一个版本签入。要比较使用 git 签入的任何版本,请使用 latexbatchdiff,请参见此处:https://tex.stackexchange.com/a/44092/4736

答案4

我认为您不应该隐藏先前的更改,而应该接受已批准的更改并创建一个包含更改的新文件。然后照常在此新版本的文件中添加新更改。

对于此更改,软件包提供了一个名为 delcmdchanges 的 bash 脚本,位于<texpath>/scripts/changes/,其中<texpath>通常是系统中 texlive 的安装路径/usr/share/texlive/texmf-dist。以交互方式运行此脚本,并-i选择接受所有已批准的更改。

delcmdchanges.bash [options] <inputfile> <outputfile>

相关内容