;;; km-tex.el --- TeX extensions ;; Copyright (C) 2012-2018 Kyle Meyer ;; Author: Kyle Meyer ;; URL: https://gitlab.com/kyleam/emacs.d ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Code: (require 'tex) (require 'latex) (defun km/latex-imenu-create-index-function () ;; See `LaTeX-imenu-create-index-function'. (TeX-update-style) (let ((sec-re (LaTeX-outline-regexp)) (short-re (rx (zero-or-one "*") "[" (group (zero-or-more (not (any "]")))) "]")) (title-re (rx (zero-or-one "*") "{" (group (zero-or-more (not (any "}")))))) 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 (or (looking-at short-re) (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) "...")) (when (> (length title) 0) (push (cons (if title (format "%s (%s)" title sec) sec) (save-excursion (beginning-of-line) (point-marker))) entries)))) (nreverse entries))) (provide 'km-tex) ;;; km-tex.el ends here