man*_*anu 9 emacs emacs23 flyspell
我用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
Run Code Online (Sandbox Code Playgroud)
此文本由一些处理部件的自定义脚本处理,\cite因此rst2latex可以完成其工作.
当我激活flyspell-mode时,它会将大多数引文键指示为拼写错误.
如何告诉flyspell不要在\cite命令中拼写检查内容.
此外,我如何组合rst模式和flyspell,以便rst模式可以保持飞行速度不受以下拼写检查?
有任何想法吗?
Tho*_*mas 11
您可以将变量ispell-parser设置为值,'tex以便flyspell忽略(la)tex序列.为此,您可以在每个缓冲区中手动设置它,如下所示:
M-: (setq 'ispell-parser 'tex)
Run Code Online (Sandbox Code Playgroud)
或者你写一个小功能,为你做这件事.将以下内容放在.emacs文件中:
(defun flyspell-ignore-tex ()
(interactive)
(set (make-variable-buffer-local 'ispell-parser) 'tex))
Run Code Online (Sandbox Code Playgroud)
然后你仍然可以使用手动调用它
M-x flyspell-ignore-tex
Run Code Online (Sandbox Code Playgroud)
或者你可以添加一个钩子,当你编辑某种类型的文件时,它会自动调用该函数.你可以通过添加新定义的函数来完成后者auto-mode-alist.假设您的文件名通常以".rst"结尾,然后将此行添加到.emacs文件中:
(add-to-list 'auto-mode-alist '("\\.rst$" . flyspell-ignore-tex))
Run Code Online (Sandbox Code Playgroud)
至于问题的第二部分:使用flyspell模式忽略更大的区域,例如reST注释,是不容易实现的.当您考虑flyspell的工作方式时,它就会变得清晰:它会逐字逐句地检查文本.为此,flyspell-word它一次只查看一个单词,它发送到后台运行的ispell进程.ispell进程执行字典查找并返回当前单词是否正确.如果flyspell-word必须每次检查当前单词是否是评论或其他不应该检查的区域的一部分,那么它将会相当慢,因为这将包括相当多的搜索缓冲区.
当然,现在可以稍微聪明一点,首先找到非评论区域等,然后只在那些区域之外的那些部分进行逐字检查 - 但不幸的是,这不是那种方式flyspell已实施.
但是,如果没有"fly"部分,则ispell-mode有一种机制来自定义可以跳过缓冲区的哪些区域.这是通过变量完成的ispell-skip-region-alist.但是,尽管flyspell-mode在ispell模式下工作,但由于上面提到的原因,flyspell-mode不使用变量.