在审阅一份手稿的过程中,我被要求根据审阅者的评论突出显示更改。我结合使用了 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.
所以如果您真的需要此类构造的解决方案,也许我应该再考虑一下)。