Posted on 11 January 2013
TeX-fold-mode
is a minor mode which is part of
AUCTEX, and automatically hides
a lot of the latex formatting commands. For example, \alpha is
rendered using an alpha character, and references are shortened to
[r]. Here’s an example:
 
This gives a much cleaner feel when writing. Adding
(add-hook 'LaTeX-mode 
          (lambda ()
            (TeX-fold-mode 1)
            (add-hook 'find-file-hook 'TeX-fold-buffer t t)))to your .emacs will load the mode automatically and fold the whole
buffer when you load a latex file. However, when typing, any new stuff
won’t appear “folded”. To “re-fold” a paragraph, the command
TeX-fold-paragraph must be used (shortcut C-c C-o C-p), which is a
bit tedious.
Instead, it would be great if things would fold automatically. Calling
TeX-fold-paragraph after every character insert event would slow
emacs down to a crawl, so the approach that I use is to automatically
call it when either $ or } are entered (typically ending an
expression which should be folded). The code required for this adds a
local hook which detects this change (the local part is important as
we don’t want this hook applying to other buffers) is
(add-hook 'LaTeX-mode-hook 
      (lambda () 
        (TeX-fold-mode 1)
        (add-hook 'find-file-hook 'TeX-fold-buffer t t)
        (add-hook 'after-change-functions 
              (lambda (start end oldlen) 
                (when (= (- end start) 1)
                  (let ((char-point 
                                 (buffer-substring-no-properties 
                                  start end)))
                   (when (or (string= char-point "}")
                         (string= char-point "$"))
                    (TeX-fold-paragraph)))))
               t t)))This does not slow emacs down noticeably on my machine while keeping
folding up to date. Typing a row of $ or } characters becomes very
laggy but I don’t have to do that very often!