Emacs(TeX):如何搜索和替换整个区域?

时间:2011-12-19 22:05:05

标签: regex emacs replace tex

我打扰你有一些关于这个问题的提示:我正在使用一个非常脏的代码在Latex中工作,由writer2latex生成(相当不错的程序),使用Emacs,我正在尝试查询 - 替换多行代码,例如:

{\centering   [Warning: Image ignored] % Unhandled or unsupported graphics:
%\includegraphics[width=11.104cm,height=8.23cm]{img34}

必须成为:

\begin{figure}[tpb]
\begin{center}
\includegraphics[width=\textwidth]{img34}

使用Mx重新构建器,我发现我可以使用字符串\{.*centering.* .*cm]强调我需要查询的整个区域。 ,如果我用Mx替换-regexp,我只得到:Invalid regexp: "Invalid content of \\{\\}" 有关如何执行查询的任何建议?我有大量这样的线来代替......: - )

2 个答案:

答案 0 :(得分:1)

确保重新语法为“已读”, C-c选项卡。删除初始反斜杠。现在,如果你把它放到replace-regexp

中,那么regexp应该可行

答案 1 :(得分:1)

您收到此错误消息,因为在Emacs的正则​​表达式中,花括号\{\}具有特殊含义。这些大括号用于指定紧跟在大括号之前的正则表达式部分应该匹配一定次数。

来自正则表达式上的GNU Emacs documentation

  

\ {N \}       是一个后缀运算符,指定n次重复[...]

     

\ {N,M \}       是一个后缀运算符,指定n和m次重复[...]

如果你想让你的正则表达式实际匹配花括号,请不要使用前导斜杠来逃避它:

{.*centering.* C-q C-j .*cm]

为了在替换字符串中使用反斜杠,您必须使用另一个反斜杠来转义它。 (当在代码中执行此操作时,它很快变得非常难看,因为在双引号字符串中,反斜杠本身必须已经转义。但是,由于您以交互方式进行替换,因此不需要双重转义,因此两个反斜杠就足够了。 )

MC - % {.*centering.* Cq Cj .*cm] RET \\begin{figure}[tpb] Cq Cj \\begin{center} Cq Cj \\includegraphics[width=\\textwidth] RET