Search code examples
emacsauctex

Emacs AucTeX; How to set C-c C-c default command?


I have set this in my .emacs file:

(add-hook 'TeX-mode-hook 
      (lambda () 
        (setq TeX-command-default "LaTeX"))

(add-hook 'LaTeX-mode-hook 
      (lambda () 
        (setq TeX-command-default "LaTeX"))

I see that C-c C-c is bound to TeX-command-master, which calls TeX-command-query. But since my (TeX-master-file) is "<none>", I expect the default command to be called, but keeps wanting to invoke "View" instead of "LaTeX".


Solution

  • If you check the source for TeX-command-query you'll find that it checks the modification date of the tex (lines 4-9) and bbl (lines 10-19) files involved in your document. Unless those files are more recent than the output file and there is no known next command to be performed (lines 20-22) it will use the "View" command as default (line 23).

    This behaviour is of course sensible because normally you don't want to recompile unless there are changes (modified tex files). Apart from "patching" the command [posted below, would not really recommend to use because it will not receive automatic updates ;-) ] there isn't really anything you can do.

    If you decide to use the patched command, just put is somewhere in your init file after the original command has been loaded. You could for example wrap it into (replace ;; BODY by code)

    (eval-after-load "tex-buf" 
      '(progn
        ;; BODY
        ))
    

    Here comes the patched command:

    (defun TeX-command-query (name)
      "Query the user for what TeX command to use."
      (let* ((default
           (cond ((if (string-equal name TeX-region)
                  (TeX-check-files (concat name "." (TeX-output-extension))
                           (list name)
                           TeX-file-extensions)
                (TeX-save-document (TeX-master-file)))
              TeX-command-default)
             ((and (memq major-mode '(doctex-mode latex-mode))
                   ;; Want to know if bib file is newer than .bbl
                   ;; We don't care whether the bib files are open in emacs
                   (TeX-check-files (concat name ".bbl")
                        (mapcar 'car
                            (LaTeX-bibliography-list))
                        (append BibTeX-file-extensions
                            TeX-Biber-file-extensions)))
              ;; We should check for bst files here as well.
              (if LaTeX-using-Biber TeX-command-Biber TeX-command-BibTeX))
             ((TeX-process-get-variable name
                            'TeX-command-next
                            ;; HERE COMES THE PATCH
                            ;; was TeX-command-View
                            TeX-command-default)) 
                            ;; END OF PATCH
             (TeX-command-Show)))
             (completion-ignore-case t)
             (answer (or TeX-command-force
                         (completing-read
                          (concat "Command: (default " default ") ")
                          (TeX-mode-specific-command-list major-mode) nil t
                          nil 'TeX-command-history))))
        ;; If the answer is "latex" it will not be expanded to "LaTeX"
        (setq answer (car-safe (TeX-assoc answer TeX-command-list)))
        (if (and answer
                 (not (string-equal answer "")))
            answer
          default)))