10

我使用 Emacs 来编写我的大部分作品。我使用 reStructuredText 编写,然后在一些预处理后将它们转换为 LaTeX,因为我写了我的引文 á-la LaTeX。这是我的一篇文章的摘录(西班牙语):

En \cite[pp.~XXVIII--XXIX]{Crnkovic2002} se brindan algunos riesgos
que se pueden asumir con el desarrollo basado en componentes, los

此文本由一些处理该\cite部分的自定义脚本处理,因此rst2latex可以完成其工作。

当我激活 flyspell 模式时,它会将大多数引文键标为拼写错误。

我如何告诉 flyspell 不要对\cite命令中的内容进行拼写检查。

此外,如何将 rst-mode 和 flyspell 结合起来,以便 rst-mode 可以防止 flyspell 对以下内容进行拼写检查?

  • 休息评论
  • reST 代码字面量
  • reST 指令参数和参数
  • reST 原始指令内容

有任何想法吗?

4

3 回答 3

11

您可以将变量设置ispell-parser为该值'tex,以便 flyspell 将忽略 (la)tex 序列。为此,您可以像这样在每个缓冲区中手动设置它:

M-: (setq 'ispell-parser 'tex)

或者你编写一个小函数来为你做这件事。将以下内容放入您的 .emacs 文件中:

(defun flyspell-ignore-tex ()
  (interactive)
  (set (make-variable-buffer-local 'ispell-parser) 'tex))

然后你仍然可以手动调用它,使用

M-x flyspell-ignore-tex

或者您可以添加一个挂钩,在您编辑某种类型的文件时自动调用该函数。您可以通过将新定义的函数添加到您的auto-mode-alist. 假设您的文件名通常以“.rst”结尾,然后将此行添加到您的 .emacs 文件中:

(add-to-list 'auto-mode-alist '("\\.rst$" . flyspell-ignore-tex))

至于你问题的第二部分:让 flyspell-mode 忽略更大的区域,例如 reST 评论,是不容易实现的。当您考虑 flyspell 的工作方式时就会清楚:它逐字检查文本。为此,flyspell-word一次只查看一个单词,然后将其发送到后台运行的 ispell 进程。ispell 进程进行字典查找并返回当前单词是否正确。如果flyspell-word必须每次都检查当前单词是否是注释的一部分或不应该检查的其他区域,那将相当慢,因为这将包括相当多的缓冲区搜索。

现在当然,人们可以更聪明地处理这个问题,首先找到非评论区域等,然后只在这些区域之外的那些部分进行逐字检查 - 但不幸的是,这不是方法flyspell被实施。

但是,如果您可以不使用“fly”部分,ispell-mode 有一种机制可以自定义可以跳过缓冲区的哪些区域。这是通过变量完成的ispell-skip-region-alist。但是,尽管 flyspell-mode 在 ispell-mode 下工作,但由于上述原因,flyspell-mode 不使用该变量。

于 2011-01-12T21:39:16.847 回答
4

您也可以flyspell-generic-check-word-predicate按照我在超级用户的这个问题中解释的那样使用。

于 2011-10-11T21:02:31.833 回答
1

(aspell 的 tex 过滤器可能完全符合您的要求 - 但如果您想要更通用的解决方案)

虽然我使用下面的代码来说服 flyspell 不要标记某些带有数字的单词,但您可以使用这种钩子来匹配某些上下文。

查看从您想要的位置开始 - 因此您可能想要向后搜索您关心的任何上下文的开始/结束。

(when "another attempt to accept certain words flyspell/ispell/aspell flags as incorrect"
  (defun flyspell-ignore-WordNumber99-stuff/ag (beg end info)
    (save-excursion
      (goto-char beg)
      (cond
    ((or
       (looking-at "\\bWord1\\b")
       (looking-at "\\bWord99Foo\\b")
       )
      t)
    (t nil)
    )
      )
    )
  )

(add-hook 'flyspell-incorrect-hook 'flyspell-ignore-WordNumber99-stuff/ag)
于 2014-06-19T02:28:06.300 回答