Если вы используете AUCTeX (так и должно быть), вы можете проверить LaTeX-indent-environment-list
. Добавление окружения к этой переменной сделает так, чтобы (среди прочего) M-q не пополнял абзац. К сожалению, это не работает для режима автозаполнения. Следующий в значительной степени непроверенный код, добавленный к LaTeX-mode-hook
, может сделать то, что вы хотите.
(setq auto-fill-function
(lambda ()
(unless (> (save-excursion (or (search-backward "%%% BEGIN NO FILL" (point-min) t) 0))
(save-excursion (or (search-backward "%%% END NO FILL" (point-min) t) 0)))
(do-auto-fill))))
Это очень глупо и неэффективно, но, кажется, достаточно быстро на моей машине. Он не допускает вложения и требует, чтобы вы вручную отмечали все разделы, которые вы не хотите заполнять. То, что я думаю добавить в мой .emacs (пока я не прочитал твой вопрос, я не понимал, насколько это меня беспокоило), ниже того, какие ключи от текущей среды, поэтому нет необходимости в специальной разметке (хотя она только смотрит на самая внутренняя среда (я не уверен, сколько проблем возникнет на практике)). Объединение этих двух вопросов оставлено заинтересованным читателем в качестве упражнения.
;; You can use the following to unset the variables and play around with them
;; (makunbound 'auto-fill-ignore-environments)
;; (makunbound 'auto-fill-ignore-environments-regexp)
(defcustom auto-fill-ignore-environments
(mapcar 'car LaTeX-indent-environment-list)
"List of environments for which `auto-fill-mode' should be
disabled. Used to generate `auto-fill-ignore-environments-regexp'."
:type '(sexp)
)
(defcustom auto-fill-ignore-environments-regexp
(regexp-opt auto-fill-ignore-environments)
"Regexp matching LaTeX environments for which `auto-fill-mode'
should be disabled. If not set, automatically generated from
`auto-fill-ignore-environments'"
:type '(string)
:set-after '(auto-fill-ignore-environments)
)
(add-hook 'LaTeX-mode-hook
(lambda ()
(setq auto-fill-function
(lambda ()
(unless (string-match auto-fill-ignore-environments-regexp
(LaTeX-current-environment))
(do-auto-fill))))))
Я никогда не использовал defcustom раньше, поэтому я уверен, что часть может быть улучшена немного.