如何配置 flyspell 以忽略给定环境的内容?

如何配置 flyspell 以忽略给定环境的内容?

flyspell在使用时,配置忽略某些环境的内容emacs会很有用,例如或。flyspelltikzcdtikzpicture

例如,在下面的文档中,人们想要flyspell忽略环境中的单词“asdf” myenv

\documentclass{standalone}

\newenvironment{myenv}{}{}

\begin{document}

\begin{myenv}
  asdf
\end{myenv}

\end{document}

如何实现这一点?

答案1

将以下代码添加到您的~/.emacs文件中告诉flyspell忽略环境的内容myenv1myenv2myenv3

(put 'LaTeX-mode 'flyspell-mode-predicate 'auctex-mode-flyspell-skip-myenv)
(defun auctex-mode-flyspell-skip-myenv ()
  (save-excursion
    (widen)
    (let ((p (point))
          (count 0))
      (not (or (and (re-search-backward "\\\\begin{\\(myenv1\\|myenv2\\|myenv3\\)}" nil t)
                    (> p (point))
                    (or (not (re-search-forward "^\\\\end{\\(myenv1\\|myenv2\\|myenv3\\)}" nil t))
                        (< p (point))))
               (eq 1 (progn (while (re-search-backward "`" (line-beginning-position) t)
                              (setq count (1+ count)))
                            (- count (* 2 (/ count 2)))))))))
  )
(add-hook 'LaTeX-mode-hook (lambda () (setq flyspell-generic-check-word-predicate 
                        'auctex-mode-flyspell-skip-myenv)))

可以根据需要在 第 7 行和 第 9 行同时添加环境。

相关内容