在TeX内联数学中防止Emacs进行换行

时间:2013-06-11 09:58:02

标签: emacs auctex math-mode

我将Emacs与AUCTeX结合使用$来编辑包含大量内联数学的手稿。当自动填充时(例如,使用 M-q ),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 个答案:

答案 0 :(得分:5)

尝试:

(add-hook 'LaTeX-mode-hook
          (lambda ()
            (add-to-list 'fill-nobreak-predicate 'texmathp)))

将其放入.emacs并重新启动emacs。

答案 1 :(得分:1)

您可以执行以下操作:

(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))))