Предотвратить Emacs от разрыва строки в встроенной математике TeX
Я использую Emacs в сочетании с AUCTeX для редактирования рукописей со множеством встроенных математических операций, используя $
, При автоматическом заполнении (например, с помощью Mq) Emacs часто ломает эти встроенные математические среды в положениях, которые нарушают беглость чтения (например, в подписках или тому подобное).
Есть ли способ сказать Emacs, чтобы предпочесть положить весь $…$
окружение в новой строке, если это предотвратит нарушение? Более конкретно, если произойдет нарушение математики, вся среда должна быть перенесена на новую строку, которая не должна быть разбита на части.
Пример:
Lorem ipsum dolor sit amet, consectetur adipisici elit, sed $a^2 + b^2 = c^2$ eiusmod tempor incidunt ut labore et dolore magna aliqua. Ut enim ad minim veniam.
должно привести к
Lorem ipsum dolor sit amet, consectetur adipisici elit, sed
$a^2 + b^2 = c^2$ eiusmod tempor incidunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam.
2 ответа
Пытаться:
(add-hook 'LaTeX-mode-hook
(lambda ()
(add-to-list 'fill-nobreak-predicate 'texmathp)))
Поместите это в свой .emacs
и перезапустите emacs.
Вы можете сделать что-то вроде:
(add-hook 'LaTeX-mode-hook
(lambda ()
(add-hook 'fill-nobreak-predicate 'my-latex-fill-nobreak)))
а затем определить функцию my-latex-fill-nobreak
который возвращает не ноль, если вы находитесь в короткой математической среде, например что-то вроде:
(defun my-latex-fill-nobreak ()
(save-excursion
(when (search-backward "$" (- (point) 20) t)
;; We found a nearby $. Now let's see if it's an opening $
;; rather than a closing one. Using font-lock properties is
;; a hack, but it might be good enough. Apparently (texmathp)
;; could be a better choice.
(eq (get-text-property (point) 'face) 'font-latex-math-face))))