I have this test code: ```latex foo \begin{equation} foo \end{equation} foo $foo$ foo ``` I want to replace "foo" with "bar" everywhere but LaTeX math, so I have written these functions: ```lang-el (defun test-a () (interactive) (let ((isearch-filter-predicate 'skip-equation-env)) (query-replace-regexp "foo" "bar" nil (point-min) (point-max)))) (defun skip-equation-env (beg end) (catch 'skip-region (save-excursion (save-match-data (when (and (looking-back "\\\\begin{equation}\\([[:graph:] \n]+\\)") (looking-at "\\([[:graph:] \n]+\\)\\\\end{equation}")) (throw 'skip-region nil))) t))) (defun test-b () (interactive) (let ((isearch-filter-predicate 'skip-inline-math)) (query-replace-regexp "foo" "bar" nil (point-min) (point-max)))) (defun skip-inline-math (beg end) (catch 'skip-region (save-excursion (save-match-data (when (face-at-point beg 'tex-math) (throw 'skip-region nil))) t))) ``` I have adapted `skip-equation-env` and `skip-inline-math` from another code to be fit to my case, so I'm not sure of all their lines. I have tested these functions successfully, but I would like to know if there is a more suitable way to write them using `isearch-filter-predicate`. I am new to `isearch`. I am not allowed to use `auctex`.