我正在使用背叶编写Latex,我希望轻松地从Latex文件的相同环境中找到和替换特定的文本。
示例文本,
abc xyz \a{} mno
\begin{equation}
\a{}=a+c
\a{}=c+b
\end{equation}
klm mno
\begin{equation}
x=\a{}\times\b{}
\end{equation}
xyz mno \a{} abc
我只想在方程中将\a{}
替换为其他文本xyz
。
我要短信,
abc xyz \a{} mno
\begin{equation}
xyz=a+c
xyz=c+b
\end{equation}
klm mno
\begin{equation}
x=xyz\times\b{}
\end{equation}
xyz mno \a{} abc
我试了很多次,用我的一点点判读知识来匹配课文。这些方法正确吗?
/(?:\b(?:\\begin\{equation\})="|\G(?!\\end\{equation\}))[^}]*\K(\\a\{\})/g
和,
/(?<=\\begin\{equation\})[\s\S]*\\a\{\}[\s\S]*(?=\\end\{equation\})/gs
发布于 2022-09-02 21:20:11
不需要实际替换宏,只需让latex在方程中重新定义宏:
\documentclass{article}
\def\a{a}
\AtBeginEnvironment{equation}{\def\a{xyz}}
\begin{document}
abc xyz \a{} mno
\begin{equation}
\a{}=a+c
\a{}=c+b
\end{equation}
klm mno
\begin{equation}
x=\a{}\times b
\end{equation}
xyz mno \a{} abc
\end{document}
发布于 2022-09-02 21:31:20
您可以在/s
修饰符中使用这样的模式,使模式中的点匹配任何字符,包括换行符。
(?:\\begin\{equation\}|\G(?!^))(?:(?!\\a{}|\\(?:begin|end){equation}).)*\K\\a{}
解释
(?:
非捕获群\\begin\{equation\}
匹配\begin{equation}
|
或\G(?!^)
断言上一场比赛结束时的位置)
关闭非捕获组(?:
非捕获组作为一个整体进行匹配(?!\\a{}|\\(?:begin|end){equation})
负前瞻,断言当前位置右侧的不是\a{}
、begin{equation}
或end{equation}
.
匹配任何字符,包括带有/s
标志的换行符。)*
关闭非捕获组并可选择地重复它\K
忘记了到目前为止匹配的\\a{}
匹配\a{}
在替换中使用xyz
看一个regex演示。
https://stackoverflow.com/questions/73587809
复制相似问题