在我的 LaTeX 文件中,我确实有数千次出现以下构造:
$\displaystyle{...math goes here...}$
我想用
替换这些\mymath{...math goes here...}
请注意,$ 消失了,但花括号仍然存在——如果不是尾随 $,这将是一个基本的查找和替换。如果我知道任何正则表达式,我相信它会毫无问题地处理这个问题。我需要什么正则表达式来实现这一点?
非常感谢。
编辑:出现了一些问题和疑问,所以让我澄清一下:
- 是的,
$\displaystyle{ ... }$
可以在同一行出现多次。 - 不,嵌套的
}$
(例如$\displaystyle{...{more math}$...}$
)不能发生。我的意思是,如果你把它放在\mbox
之类的东西中,我想它可以,但我无法想象为什么有人会在$\displaySTLye{}$
构造,其目的是显示与文本内联的数学。无论如何,这不是我曾经做过或可能会做的事情。 - 我尝试使用 perl 建议,但当 shell 没有提出异议时,文件仍然不受影响。
- 我尝试使用 sed 建议,但 shell 反对“`('”附近的意外标记。我以前从未使用过 sed(并且“man sed”是迟钝的),但这是我所做的:导航到包含 .tex 文件并键入“
sed s/\$\\displaystyle({[^}]+})\$/\\mymath\1/g *.tex
”的目录。不走运. 如何使用 sed 做我想做的事?
再次感谢大家提供的帮助。
最佳答案
在使用 REGEX 进行这种类型的替换时要非常小心 因为理论上的答案是 REGEX 无法匹配这种类型的模式。
REGEX 是一个有限状态机;它不包含下推堆栈,所以 它不能与嵌套结构一起使用,例如“{...math goes here...}”,如果 有任何嵌套的可能性,例如“{more math}$” 可以作为“数学到这里”字符串的一部分出现。你至少需要一个 描述这种结构的上下文无关语法 - 状态机 就是不切!
话虽如此,您仍然可以使用 REGEX 完成此操作 前提是您的“数学在这里”字符串都不比 状态机可以处理什么。
试一试....但要注意结果!
关于regex - LaTeX 需要简单的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2147477/