Предотвратить 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))))
Другие вопросы по тегам