summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lisp/init-tex.el25
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)