summaryrefslogtreecommitdiff
path: root/lisp/init-tex.el
blob: 2929606358f8de85dd9019303ccfc8f8a391b29c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
(require-package 'auctex)

(add-hook 'LaTeX-mode-hook 'turn-on-reftex)

;;; Add path for pdflatex.
(setenv "PATH"
        (concat
         "/usr/texbin" ":"
         (getenv "PATH")))

(defun km/org-mode-reftex-setup ()
  (define-key org-mode-map (kbd "C-c [") 'reftex-citation))

(add-hook 'org-mode-hook 'km/org-mode-reftex-setup)

(setq reftex-default-bibliography '("refs.bib"))

(defun km/latex-narrow-to-single-tag (&optional tag)
  "Narrow region to LaTeX tag.
This is meant for single elements, like \"\\section\". If TAG is
not given, it is taken from the active region."
  (interactive)
  (save-excursion
    (widen)
    (let* ((tag (or tag
                (buffer-substring-no-properties (mark) (point))))
           (tag (if (s-starts-with? "\\" tag)
                    tag
                  (concat "\\" tag)))
           (beg (progn (end-of-line)
                       (search-backward tag)))
           (end (progn (forward-line 1)
                       (unless (search-forward tag nil t)
                         (search-forward "\\end{document}"))
                       (forward-line -1)
                       (point))))
      (narrow-to-region beg end))))

(defun km/latex-narrow-to-paired-tag (&optional tag)
  "Narrow region to LaTeX tag.
This is meant for paired elements, like \"\\begin{document}\". If
TAG is not given, it is taken from the active region."
  (interactive)
  (save-excursion
    (widen)
    (let* ((tag (or tag
                (buffer-substring-no-properties (mark) (point))))
           (beg (progn (end-of-line)
                       (search-backward (format "\\begin{%s}" tag))))
           (end (progn (forward-line 1)
                       (search-forward (format "\\end{%s}" tag)))))
      (narrow-to-region beg end))))

(defun km/latex-narrow-to-document ()
  "Narrow region to LaTeX document text.
The point should be beyond \"\\begin{document}\"."
  (interactive)
  (km/latex-narrow-to-paired-tag "document"))

(defun km/latex-narrow-to-section ()
  "Narrow region to current LaTeX section.
The point should be beyond \"\\section\"."
  (interactive)
  (km/latex-narrow-to-single-tag "section"))

(defun km/latex-find-pdf ()
  "Find the PDF file for the current LaTeX file."
  (interactive)
  (let ((pdf-file (concat (file-name-base (buffer-file-name))
                          ".pdf")))
    (unless (file-exists-p pdf-file)
      (error "%s does not exist" pdf-file))
    (start-process "tex-pdf" nil "xdg-open" pdf-file)))

(after 'latex
  (define-key LaTeX-mode-map (kbd "C-c m p") 'km/latex-find-pdf))

(provide 'init-tex)