;; -*- emacs-lisp -*- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; $Id: tex.el,v 1.7 2006/03/06 12:07:06 ole Exp $ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; TeX initialization ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;; TeX (require 'tex-site) (setq tex-default-mode 'latex-mode TeX-auto-save t TeX-parse-self t) (setq-default TeX-master nil) (defun tex-indent-complete () "A special indent/complete function" (interactive) (if (save-excursion (skip-chars-backward " \t") (not (bolp))) (hippie-expand 1) (indent-for-tab-command))) (add-hook 'LaTeX-mode-hook (function (lambda () (turn-on-reftex) (flyspell-mode t) (ispell-change-dictionary "deutsch8") (setq ispell-parser 'tex) (turn-on-auto-fill) (define-key LaTeX-mode-map [(return)] 'reindent-then-newline-and-indent) (define-key LaTeX-mode-map [(tab)] 'tex-indent-complete) (define-key LaTeX-mode-map [(f10)] 'TeX-next-error)))) (defvar kdvi-script "kdvi" "*Name of start script for kdvi.") (defun kdvi-jump-to-line () "Call kdvi-script to perform a `forward search' for current file and line number. See contents of kdvi-script for details. If AucTeX is used, the value of TeX-master-file is used as filename for the master .dvi file; else, the return value of kdvi-master-file-name is used (which see)." (interactive) (save-excursion (save-restriction (widen) (beginning-of-line 1) (let* (;;; current line in file, as found in the documentation ;;; of emacs. Slightly non-intuitive. (current-line (format "%d" (+ 1 (count-lines (point-min) (point))))) ;;; name of the `main' .tex file, which is also used as .dvi basename: (master-file (expand-file-name (if (fboundp 'TeX-master-file) (TeX-master-file t) (kdvi-get-masterfile (kdvi-master-file-name))))) ;;; .dvi file name: (dvi-file (concat (file-name-sans-extension master-file) ".dvi")) ;;; current source file name. (filename (expand-file-name (buffer-file-name)))) (start-process "kdvi" "kdvi-output" "kdvi" ;;; src-args ;;; args for -sourceposition: "--unique" (concat "file:" dvi-file "#src:" current-line filename) ))))) (defun kdvi-get-masterfile (file) "Small helper function for AucTeX compatibility. Converts the special value t that TeX-master might be set to into a real file name." (if (eq file t) (buffer-file-name) file)) (defun kdvi-master-file-name () "Emulate AucTeX's TeX-master-file function. Partly copied from tex.el's TeX-master-file and TeX-add-local-master." (if (boundp 'TeX-master) TeX-master (let ((master-file (read-file-name "Master file (default this file): "))) (if (y-or-n-p "Save info as local variable? ") (progn (goto-char (point-max)) (if (re-search-backward "^\\([^\n]+\\)Local Variables:" nil t) (let* ((prefix (if (match-beginning 1) (buffer-substring (match-beginning 1) (match-end 1)) "")) (start (point))) (re-search-forward (regexp-quote (concat prefix "End:")) nil t) (if (re-search-backward (regexp-quote (concat prefix "TeX-master")) start t) ;;; if TeX-master line exists already, replace it (progn (beginning-of-line 1) (kill-line 1)) (beginning-of-line 1)) (insert prefix "TeX-master: " (prin1-to-string master-file) "\n")) (insert "\n%%% Local Variables: " ;;; mode is of little use without AucTeX ... ;;; "\n%%% mode: " (substring (symbol-name major-mode) 0 -5) "\n%%% TeX-master: " (prin1-to-string master-file) "\n%%% End: \n")) (save-buffer) (message "(local variables written.)")) (message "(nothing written.)")) (set (make-local-variable 'TeX-master) master-file))))