2012-04-12 10 views
12

Tổ hợp phím Cc Cc trong Emacs/AucTeX chạy hàm TeX-command-master để quyết định lệnh nào sẽ chạy (latex, bibtex, view hoặc các lệnh khác) và sau đó yêu cầu người dùng để xác nhận trước khi chạy lệnh.Chạy lệnh TeX-command-master mà không truy vấn trong các emacs

Tôi muốn liên kết khóa này với khóa (giả sử F9) ngoại trừ mà không cần yêu cầu xác nhận. Bằng cách này, tôi chỉ cần bấm F9 và lệnh thích hợp nhất sẽ được chạy. Làm thế nào tôi có thể làm điều đó?

+0

Phiên bản AUCTeX nào? – Thomas

+0

@Thomas Tôi nghĩ đó là '11.86-3'. Điều đó có ý nghĩa không?] – Malabarba

Trả lời

9

Tôi có đoạn trích này (được lấy từ liên kết Emacswiki bên dưới), điều đó làm mọi thứ với việc làm phiền tôi phải làm gì bây giờ. Tôi chắc chắn sẽ C-c C-a

;;; http://www.emacswiki.org/emacs/TN 
(require 'tex-buf) 
(defun TeX-command-default (name) 
    "Next TeX command to use. Most of the code is stolen from `TeX-command-query'." 
    (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)) 
       (TeX-check-files (concat name ".bbl") 
           (mapcar 'car 
             (LaTeX-bibliography-list)) 
           BibTeX-file-extensions)) 
     ;; We should check for bst files here as well. 
     TeX-command-BibTeX) 
     ((TeX-process-get-variable name 
            'TeX-command-next 
            TeX-command-Show)) 
     (TeX-command-Show))) 

;;; from wiki 
(defcustom TeX-texify-Show t 
    "Start view-command at end of TeX-texify?" 
    :type 'boolean 
    :group 'TeX-command) 

(defcustom TeX-texify-max-runs-same-command 5 
    "Maximal run number of the same command" 
    :type 'integer 
    :group 'TeX-command) 

(defun TeX-texify-sentinel (&optional proc sentinel) 
    "Non-interactive! Call the standard-sentinel of the current LaTeX-process. 
If there is still something left do do start the next latex-command." 
    (set-buffer (process-buffer proc)) 
    (funcall TeX-texify-sentinel proc sentinel) 
    (let ((case-fold-search nil)) 
    (when (string-match "\\(finished\\|exited\\)" sentinel) 
     (set-buffer TeX-command-buffer) 
     (unless (plist-get TeX-error-report-switches (intern (TeX-master-file))) 
     (TeX-texify))))) 

(defun TeX-texify() 
    "Get everything done." 
    (interactive) 
    (let ((nextCmd (TeX-command-default (TeX-master-file))) 
     proc) 
    (if (and (null TeX-texify-Show) 
      (equal nextCmd TeX-command-Show)) 
     (when (called-interactively-p 'any) 
      (message "TeX-texify: Nothing to be done.")) 
     (TeX-command nextCmd 'TeX-master-file) 
     (when (or (called-interactively-p 'any) 
       (null (boundp 'TeX-texify-count-same-command)) 
       (null (boundp 'TeX-texify-last-command)) 
       (null (equal nextCmd TeX-texify-last-command))) 
     (mapc 'make-local-variable '(TeX-texify-sentinel TeX-texify-count-same-command TeX-texify-last-command)) 
     (setq TeX-texify-count-same-command 1)) 
     (if (>= TeX-texify-count-same-command TeX-texify-max-runs-same-command) 
      (message "TeX-texify: Did %S already %d times. Don't want to do it anymore." TeX-texify-last-command TeX-texify-count-same-command) 
     (setq TeX-texify-count-same-command (1+ TeX-texify-count-same-command)) 
     (setq TeX-texify-last-command nextCmd) 
     (and (null (equal nextCmd TeX-command-Show)) 
      (setq proc (get-buffer-process (current-buffer))) 
      (setq TeX-texify-sentinel (process-sentinel proc)) 
      (set-process-sentinel proc 'TeX-texify-sentinel)))))) 

(add-hook 'LaTeX-mode-hook 
      '(lambda() 
      (define-key LaTeX-mode-map (kbd "C-c C-a") 'TeX-texify))) 

tôi có thêm vài thiết lập AUCTeX/RefTeX here, sao chép nếu bạn muốn.

+1

Tôi nhận được định nghĩa chức năng 'let: Symbol bị vô hiệu: thông báo lỗi TeX-command-default' ngay khi tôi thử' C-c C-a' (hoặc nếu tôi chạy hàm thủ công). Làm 'C-h v TeX-command-default' mô tả nó như là một biến. – Malabarba

+0

@BruceConnor Xin lỗi về điều đó. đã thêm tổng số đoạn mã ngay bây giờ. – kindahero

+0

Hoàn hảo. Cảm ơn. – Malabarba

0

Không phải là giải pháp thanh lịch nhất, nhưng bạn có thể định nghĩa một macro bàn phím chứa các lệnh sau:

  • C-x C-s để lưu các tập tin
  • M-x TeX-command-master <RET> để chạy chọn trước (bằng cách AucTeX) lệnh.

Sau khi xác định, M-x insert-kbd-macro sẽ chèn định nghĩa macro vào bộ đệm hiện tại (dưới dạng mã Lisp). Sau đó, bạn có thể thêm nó vào .emacs của bạn và liên kết nó với F9.