仅替换数学环境中的文本的编辑器

仅替换数学环境中的文本的编辑器

我正在编写一个文档,其中必须将所有变量实例更改i为,x并且该文档已经很长了。有没有编辑器可以让我这样做,或者一般来说,在数学环境中替换文本?

答案1

emacs 可以相当轻松地完成这类事情

(defun change-mathvar (a b)
  (interactive "sfrom: \nsto: ")
  (beginning-of-buffer)
  (while (re-search-forward
      "\\(\\\\(\\|\\\\\\[\\|[^\\\\]\$\$?\\|\\\\begin{equation}\\|\\\\begin{align}\\)" nil 1)
    (query-replace-regexp a  b t  (point) 
              (progn (re-search-forward 
                  "\\(\\\\)\\|\\\\\\]\\|[^\\\\]\$\$?\\|\\\\end{equation}\\|\\\\end{align}\\)" nil 1) (point)))))

这看起来$ \( \[ \begin{equation} \begin{align}像是 math-start。可以添加其他环境。

从以下文档开始

\documentclass{article}

\begin{document}


i   i   aib  


\[i   i   aib  \]


i   i   aib  


\begin{equation}
i   i   aib
\end{equation}


\end{document}

然后执行M-x change-mathvar 编辑器将提示输入旧名称和新名称,然后对变量名称进行查询替换以生成:

\documentclass{article}

\begin{document}


i   i   aib  


\[x   x   aib  \]


i   i   aib  


\begin{equation}
x   x   aib
\end{equation}


\end{document}

请注意,它没有改变任何数学内容,它只改变了i它作为完整单词出现的位置,而不是aib。如果您还想aib更改,请将t代码中的更改为nil进行非分隔匹配。

答案2

我的解决方案使用emacs(> = 24)和auctex

(defun latex-replace-in-math ()
"Call `query-replace-regexp' with `isearch-filter-predicate' set to only match inside LaTeX math environments."
(interactive)
(let ((isearch-filter-predicate
(lambda (BEG END)
(save-excursion (save-match-data (goto-char BEG) (texmathp)))))
(case-fold-search nil))
(call-interactively 'query-replace-regexp)))

这用于texmathp检测数学环境。取消定义case-fold-search会使搜索区分大小写;这通常对变量符号有意义。

可以使用通常的正则表达式,例如搜索\<i\>而不是仅仅i避免更改\sin\sxn

答案3

WinEdt 就足够了:

  1. 在“替换”对话框中,选中“仅全词”和“正则表达式”复选框。

  2. 搜索i\E{isMath}并替换为x

然后,它就可以正常工作了。但是,对于像 这样的表达式_i,它也会更改为 ,_x这可能不是您想要的。

您还可以使用 替换不在数学环境中的文本i\e{isMath}

我在“WinEdt 帮助”对话框中搜索“正则表达式”找到了这个技巧。也许您可以在帮助中找到更多有用的技巧。

答案4

那么如何使用 TeX 本身来解决这个任务呢?在文档开头写下以下行:

\mathcode`i=\mathcode`x

相关内容