Освобождение фрагментов кода в документе Sweave от проверки орфографии emacs

В документе Sweave фрагменты кода в R отделены от основного текста следующим образом:

Catz are well known for their fur & pur. 

<<echo = false>>=
catz <- 1 + 2 
@

Я хотел бы запустить проверку орфографии для части LaTeX (и пометить «Catz»), но пропустить фрагменты кода (не пометить «catz»). В длинном документе нажимать «SPC» для каждой «орфографической ошибки» в разделе кода становится утомительно.


person John Horton    schedule 27.11.2011    source источник


Ответы (1)


Попробуйте добавить это в свой файл инициализации emacs:

(add-to-list 'ispell-skip-region-alist '("^<<.*>>=" . "^@"))

Редактировать (комментарии Майкла Хоффмана):

Если Flyspell включен, эти два дополнительных выражения также понадобятся:

(defun flyspell-eligible ()
  (let ((p (point)))
    (save-excursion
      (cond ((re-search-backward (ispell-begin-skip-region-regexp) nil t)
             (ispell-skip-region (match-string-no-properties 0))
             (< (point) p))
            (t)))))

(put 'latex-mode 'flyspell-mode-predicate 'flyspell-eligible)

Для других режимов замените latex-mode в последнем выражении соответствующими основными именами режимов.

person huaiyuan    schedule 28.11.2011
comment
Это отлично работает для ispell (согласно вопросу). Для тех, кто хочет сделать это и для Flyspell, к сожалению, это не сработает, поскольку flyspell проверяет слова по одному за раз. Я думаю, что нужно отредактировать функцию синтаксического анализатора, чтобы заставить ее работать для Flyspell. - person Michael Hoffman; 29.11.2011
comment
Отлично! Элегантное и универсальное решение. - person Michael Hoffman; 30.11.2011