2013-06-11 10 views
7

używam Emacsa w połączeniu z AUCTeX edytować rękopisy z dużo inline matematyki używając $. W przypadku automatycznego napełniania (na przykład z M-q) Emacs często wypełnia tych wbudowanych środowiska matematycznych w pozycjach, które zakłóca płynność odczytu (na przykład, w dolne lub tym podobne).Prevent Emacs z linebreaking w TeX inline matematyki

Czy istnieje sposób, aby powiedzieć Emacsowi, aby preferowało umieszczenie całego środowiska $…$ w nowej linii, jeśli to zapobiegnie zerwaniu? Dokładniej mówiąc, gdyby doszło do złamania matematyki, całe środowisko powinno zostać przeniesione do nowej linii, która nie powinna być rozdzielana.

Przykład:

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. 

powinno skutkować

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. 

Odpowiedz

5

Spróbuj:

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

umieścić go w .emacs i uruchom emacs.

+0

Dzięki, to blisko! Fajnie, że gromadzi krótkie środowiska matematyczne rozłożone na wiele linii. Dzieje się tak jednak kosztem tego, że bardzo długie linie nie mogą zostać zerwane _wyjątkowo_ (mam na myśli to, że wyraźne przerwy są usuwane po naciśnięciu 'M-q'). Czy wiesz, jak to uwzględnić? (Jest to trudne, chociaż, ja nawet nie można stwierdzić, dokładniej w zwięzły sposób.) – Xlea

+1

Nie jestem pewien, czy rozumiem co masz na myśli przez „wyraźnych przerw”. Jeśli masz na myśli pozycje tekstu, w którym naciśniesz 'RET', nie ma możliwości odróżnienia ich od automatycznych podziałów linii wykonywanych przez funkcje wypełniania emacs. Można jednak dodać symbol komentarza '%' na końcu wiersza, aby zapobiec zmianie tej linii przez 'M-q'. – mk1

+0

Chodzi mi o to, że jeśli długo math (dłuższy niż jedna linia) jest już na linii oddzielnym i uszkodzony (przez kogo), to ja nie chce ciągnąć Emacsa kolejne linie w górę (tj _don't remove_ się linebreak jeśli to prowadziłoby do zbyt długiej linii). Używam już '%', ale nie jest to bardzo wygodne. – Xlea

1

można zrobić coś takiego:

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

a następnie zdefiniować funkcję my-latex-fill-nobreak która zwraca non-zero, jeśli ciebie "Wewnątrz krótkiego środowiska matematycznego, np coś takiego:

(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

Możecie użyć 'texmathp' wykryć, czy punkt znajduje się w trybie matematycznym. – mk1

+0

Próbowałem dodać to do ~/.emacs, ale to nie miało żadnego efektu. – Xlea

+0

Prawdopodobnie z powodu niecytowanych $ w wyszukiwaniu regexp. Zmieniłem go, aby zamiast tego używać wyszukiwania bez regexp, co może naprawić Twój problem. – Stefan

Powiązane problemy