需要LaTeX的简单正则表达式

时间:2010-01-27 14:14:52

标签: regex latex

在我的LaTeX文件中,我确实发生了数以千计的以下构造:

$\displaystyle{...math goes here...}$

我想用

替换这些
\mymath{...math goes here...}

请注意,$'s消失,但花括号仍然存在---如果不是尾随$,这将是一个基本的查找和替换。如果我只知道任何正则表达式,我相信它会毫无问题地处理这个问题。我需要什么样的正则表达式来实现这个目标?

非常感谢提前。

编辑:出现了一些问题和疑问,请让我澄清一下:

  1. 是的,$\displaystyle{ ... }$可以在同一行上多次出现。
  2. 不,嵌套的}$(例如$\displaystyle{...{more math}$...}$)不会发生。我的意思是,我想如果你把它放在\mbox或者什么东西中就可以了,但我无法想象为什么有人会在$\displaystlye{}$构造中做到这一点,其目的是显示数学内联文字。无论如何,这不是我做过或不太可能做的事情。
  3. 我尝试使用perl建议,但是虽然shell没有提出任何异议,但文件仍未受影响。
  4. 我尝试使用sed建议,但shell反对“'('”附近的意外标记。我以前从未使用过sed(并且“man sed”是钝的),但这就是我所做的:导航到包含.tex文件并键入“sed s/\$\\displaystyle({[^}]+})\$/\\mymath\1/g *.tex”的目录。没有运气。我如何使用sed做我想做的事?
  5. 再次,非常感谢所有人提供的帮助。

3 个答案:

答案 0 :(得分:4)

sed的:

s/\$\\displaystyle({[^}]+})\$/\\mymath\1/g

答案 1 :(得分:4)

使用REGEX进行此类替换时要非常小心 因为理论上的答案是这样的 REGEX无法匹配此类模式。

REGEX是一种有限状态机;它没有包含下推堆栈 它不能与嵌套结构一起使用,例如“{... math goes here ...}”if 有任何嵌套的可能性,比如“{more math} $” 可以作为“数学在这里”字符串的一部分出现。你需要至少一个 上下文无关语法来描述这种类型的构造 - 状态机 只是不削减它!

现在已经说过了,你仍然可以使用REGEX来解决这个问题 如果没有你的“数学在这里”字符串比它更复杂 状态机可以处理什么。

试一试....但要小心结果!

答案 2 :(得分:1)

perl -pi -e 's/$\\displaystyle({.*)}\$/\\mymath$1}/g' *.tex

如果倍数} $在同一行,则需要非贪婪版本:

perl -pi -e 's/$\\displaystyle({.*?)}\$/\\mymath$1}/g' *.tex