2013-06-11 11 views
7

Ich benutze Emacs in Kombination mit AUCTeX, um Manuskripte mit viel Inline-Mathematik mit $ zu bearbeiten. Beim automatischen Füllen (z. B. mit M-q) unterbricht Emacs häufig diese Inline-Mathematikumgebungen an Positionen, die die Leseflüssigkeit stören (z. B. in Indizes oder dergleichen).Verhindern, dass Emacs vom Zeilenumbruch in TeX inline Mathe

Gibt es eine Möglichkeit, Emacs mitzuteilen, dass er lieber die gesamte $…$-Umgebung in eine neue Zeile einfügt, wenn dies das Brechen verhindern würde? Genauer gesagt, sollte es zu einem Bruch in der Mathematik kommen, sollte die gesamte Umgebung in eine neue Zeile verschoben werden, die nicht getrennt werden sollte.

Ein Beispiel: Wenn Sie

(add-hook 'LaTeX-mode-hook 
      (lambda() 
      (add-hook 'fill-nobreak-predicate 'my-latex-fill-nobreak))) 

und dann definieren eine Funktion my-latex-fill-nobreak, die einen Nicht-Null:

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. 

sollte so etwas wie führen in

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. 

Antwort

5

Versuchen:

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

Platz es in Ihrem .emacs und starten Sie Emacs.

+0

Danke, das ist nah! Es ist schön, dass es kurze mathematische Umgebungen über mehrere Zeilen verteilt. Dies führt jedoch dazu, dass sehr lange Zeilen _explitely_ nicht gebrochen werden können (ich meine, dass die expliziten Breaks gelöscht werden, wenn man 'M-q' drückt). Weißt du, wie man das einbaut? (Es ist jedoch schwierig, ich kann es nicht präziser präzisieren.) – Xlea

+1

Ich bin mir nicht sicher, ob ich verstehe, was Sie unter "explizite Unterbrechungen" verstehen. Wenn Sie nur Stellen des Textes meinen, an denen Sie "RET" gedrückt haben, dann gibt es keine Möglichkeit, diese von den automatischen Zeilenumbrüchen der Emacs-Füllfunktionen zu unterscheiden. Sie könnten jedoch das Kommentarzeichen '%' am Ende einer Zeile hinzufügen, um zu verhindern, dass der Zeilenumbruch durch 'M-q' geändert wird. – mk1

+0

Was ich meine ist, dass, wenn lange Mathematik (länger als eine Zeile) bereits auf einer separaten Zeile und gebrochen ist (von wem auch immer), dann möchte ich nicht Emacs nachfolgende Zeilen nach oben ziehen (dh, _don't remove_ ein Zeilenumbruch, wenn das würde zu einer langen Linie führen). Ich benutze bereits '%', aber es ist nicht sehr praktisch. – Xlea

1

Sie tun können sind in einer kurzen mathematischen Umgebung, z so etwas wie:

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

Sie können 'texmathp' verwenden, um zu erkennen, ob der Punkt im mathematischen Modus ist. – mk1

+0

Ich habe versucht, dies zu ~/.emacs hinzuzufügen, aber das schien keine Wirkung zu haben. – Xlea

+0

Wahrscheinlich wegen des nicht-quoted $ in der Regexp-Suche. Ich änderte es, um stattdessen eine nicht-reguläre Suche zu verwenden, die Ihr Problem beheben könnte. – Stefan

Verwandte Themen