在我的LaTeX文件中,我确实发生了数以千计的以下构造:
$\displaystyle{...math goes here...}$
我想用
替换这些\mymath{...math goes here...}
请注意,$'s消失,但花括号仍然存在---如果不是尾随$,这将是一个基本的查找和替换。如果我只知道任何正则表达式,我相信它会毫无问题地处理这个问题。我需要什么样的正则表达式来实现这个目标?
非常感谢提前。
编辑:出现了一些问题和疑问,请让我澄清一下:
$\displaystyle{ ... }$
可以在同一行上多次出现。}$
(例如$\displaystyle{...{more math}$...}$
)不会发生。我的意思是,我想如果你把它放在\mbox
或者什么东西中就可以了,但我无法想象为什么有人会在$\displaystlye{}$
构造中做到这一点,其目的是显示数学内联文字。无论如何,这不是我做过或不太可能做的事情。sed s/\$\\displaystyle({[^}]+})\$/\\mymath\1/g *.tex
”的目录。没有运气。我如何使用sed做我想做的事?再次,非常感谢所有人提供的帮助。
答案 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