1

在我的乳胶文件中,我定义了

\newcommand{\replace}[2]{\textcolor{red}{\sout{#1} }\textcolor{blue}{{#2}}}

只是为了突出变化。所以在我的论文草稿中,出现了很多

\replace{old text}{new text}

现在论文被接受了,我想得到一个干净的版本。如何使用 emacs 正则表达式替换将它们全部更改为

new text
4

2 回答 2

1

一个非常简单的方法是修改您的替换命令,使其仅打印新文本:

\newcommand{\replace}[2]{#2}

否则,我会使用如下的键盘宏来执行此操作:

C-s           ;; isearch-forward
\             ;; self-insert-command
replace{      ;; self-insert-command * 8
RET           ;; newline
<left>        ;; backward-char
ESC <C-right> ;; forward-sexp
C-SPC         ;; set-mark-command
C-r           ;; isearch-backward
\             ;; self-insert-command
replace       ;; self-insert-command * 7
RET           ;; newline
C-w           ;; kill-region
2*C-SPC       ;; set-mark-command
ESC <C-right> ;; forward-sexp
DEL           ;; delete-backward-char
C-u C-SPC     ;; set-mark-command
C-d           ;; delete-char

这个键盘宏背后的逻辑是你搜索\replace{命令,然后使用forward-sexpbackward-sexp移动平衡的“大括号”对。

编辑:请注意,绑定forward-sexp传统上写为C-M-<right>,但这样的按键可能会被您的窗口管理器拦截(至少对于 Linux 机器来说这是一种非常常见的行为)。因此,通常更容易键入ESCC-<right>

于 2012-12-11T06:52:51.723 回答
1

我将使用具有以下模式的命令query-replace-regexpM-x query-replace-regexp或):C-M-%

\\replace{.+?}{\(.+?\)}

和以下替换字符串:

\1

请注意花括号中的问号,它使搜索变得懒惰(非贪婪),这意味着它匹配尽可能少的字符。

于 2012-12-11T08:28:23.383 回答