使用 notepad++ 或 Texstudio 删除 hl 命令

使用 notepad++ 或 Texstudio 删除 hl 命令

在审阅一份手稿的过程中,我被要求根据审阅者的评论突出显示更改。我结合使用了 soul 包和 color 包。这两个包确实能完成工作,但现在我迫切地想找到一种不删除内部部分的情况下删除 hl 命令的方法。例如,来自:

\hl{This is a default text.}

This is a default text.

我找到了这个回答,使用 vim 解决非常类似的问题。由于我不熟悉 vim,所以我正在寻找我熟悉的编辑器的解决方案,例如 texstudio 或 notepad++。有什么想法吗?

答案1

如果您\hl仅用于此目的,则可以通过添加以下内容删除 LaTeX 中的突出显示:

\renewcommand\hl[1]{#1}

到您的文档序言中。

如果您确实需要用\hl{…}源代码中的参数内容替换,则可以使用正则表达式的搜索和替换来实现。如果您不需要处理平衡括号(例如\hl{Test \textit{and} test}),则搜索表达式可以是\hl{\([^}]*\)}和替换$1\1如下所示:

echo '\But{and \hl{Test} and}' | sed 's/\\hl{\([^}]*\)}/\1/'

或(启用扩展正则表达式):

echo '\But{and \hl{Test} and}' | sed -E 's/\\hl\{([^}]*)\}/\1/'

结果是

\But{and Test and}

对于\hl包含命令的多行命令,这会更复杂。因为perl应该可以在 TeX Live 和 MiKTeX 中使用,所以您可以使用(注意:本例中的引用是针对类似 的 unix shell 进行的bash):

perl -0ne 's/\\hl{//g;$i=0;while(/./gs){$i-- if $& eq "{";$i++ if $& eq "}"; if ($i<1){print $&}else{$i=0}}' <infile.tex >outfile.tex

这也适用于多行上方的文本和\hl参数内的命令。例如,如果您的infile.tex是:

This is a \hl{test
  \textit{and
    does} also work} as wanted.

outfile.tex是:

This is a test
  \textit{and
    does} also work as wanted.

不幸的是,目前它失败了,如果\hl{…}在另一个参数中使用,就像这里:

\But{This is a \hl{test
  \textit{and
    does} not work} as wanted.}

(会导致

\But{This is a test
  \textit{and
    does} not work} as wanted.

所以如果您真的需要此类构造的解决方案,也许我应该再考虑一下)。

相关内容