diff options
-rw-r--r-- | lisp/init-tex.el | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/lisp/init-tex.el b/lisp/init-tex.el index 708c19e..5fc1a68 100644 --- a/lisp/init-tex.el +++ b/lisp/init-tex.el @@ -9,5 +9,30 @@ (add-to-list 'auto-mode-alist '("\\.[tT]e[xX]\\'" . latex-mode)) (add-hook 'LaTeX-mode-hook 'turn-on-reftex) +(add-hook 'LaTeX-mode-hook (lambda () + (setq imenu-create-index-function + #'km/latex-imenu-create-index-function))) + +(defun km/latex-imenu-create-index-function () + ;; See `LaTeX-imenu-create-index-function'. + (TeX-update-style) + (let ((sec-re (LaTeX-outline-regexp)) + (title-re "\\*\\{0,1\\}{\\([^}]+\\)}") + entries) + (goto-char (point-min)) + (while (re-search-forward sec-re nil t) + (let ((sec (replace-regexp-in-string + "\\\\" "" (match-string-no-properties 0))) + (title (and (looking-at title-re) + (replace-regexp-in-string + "\\s-\\s-+" " " + (replace-regexp-in-string + "\n" "" (match-string-no-properties 1)))))) + (when (> (length title) 45) + (setf (substring title 21 -21) "...")) + (push (cons (if title (format "%s (%s)" title sec) sec) + (save-excursion (beginning-of-line) (point-marker))) + entries))) + (nreverse entries))) (provide 'init-tex) |