I've written a quick hack to accomplish that in Emacs. The idea is the following: first, find the first "hard" paragraph separation (that is, two newlines). I'm sure there should be a better way of identifying paragraphs, maybe via some other elisp function, but I haven't looked at it. That separation will bound the area of application of the paragraph fill (fill-paragraph
never goes beyond a hard paragraph). Then, we convert any "starting" TeX command (a \
just after a newline) into a starting of a paragraph of its own. It is ugly, as it changes the text, inserting newlines for TeX commands that start in a new line.
Note however that getting the correct behavior is sometimes impossible. For instance, if you maintain etiquette, your lines will be around 75 characters long and will end with a newline. By chance, a \textbf
, for example, may start after a newline, but you obviously want that one inside the current paragraph.
This is the code. You can bind it to M-q when in TeX/LaTeX mode:
(defun latex-fill-paragraph ()
(interactive)
(save-excursion
;; Insert a newline before a TeX command starting a line to avoid
;; fill-paragraph to include it in the current paragraph
(let ((end-point
(or
(save-excursion
(re-search-forward "\n\n" (point-max) t))
(point-max))))
(replace-regexp "\n\\\\" "\n\n\\\\" t (point) (- end-point 2))))
(save-excursion
(fill-paragraph)))
Best Answer