2011-12-19 49 views
0

我打扰你有这个问题的一些提示:我正在Latex中使用一个非常脏的代码,由writer2latex(相当不错的程序生成),使用Emacs,我试图查询 - 替换多行的代码,例如:Emacs(TeX):如何搜索和替换整个区域?

{\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替换电子正则表达式使用此,我只得到:Invalid regexp: "Invalid content of \\{\\}" 任何关于如何执行查询的建议?我有大量这样的线代替...... :-)

回答

1

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

从GNU Emacs的documentation上正则表达式:

\ {N \} 的后缀操作符指定重复n次[...]

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

如果你希望你的正则表达式实际匹配大括号,不带前导斜杠转义:

{.*centering.*C-Q&A-J.*cm]

为了在你有一个反斜杠逃脱它替换字符串使用反斜杠。 (当在代码中这样做时,它很快就会变得非常丑陋,因为在双引号字符串中,反斜杠本身必须已经被转义。但是,由于您正在交互地进行替换,所以不需要双转义,因此两个反斜杠就足够了。 )

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

+0

谢谢你,完美的选择区域,但是我只能用没有任何“\”的文本字符串替换“{”,我在乳胶中需要它们!任何建议?ThanX – user1106732 2011-12-20 23:25:59

+0

大括号在替换字符串中不是问题,但是必须转义反斜杠。我相应地更新了我的答案。如果它适用于您,请记住将答案标记为“正确”。谢谢。 – Thomas 2011-12-21 06:00:55

+0

谢谢!你拯救了一个肮脏的新手:-P – user1106732 2011-12-21 21:35:28

1

确保重新语法是“读取”,C-c标签。删除最初的反斜杠。现在,如果你拔成replace-regexp

+0

我做了:M-x重新生成器,C-C TAB,我得到:“Select syntax:read”。我需要在我的查询中也有“\”和“{”,因为它们对Latex非常重要... – user1106732 2011-12-20 23:22:12