2012-02-26 11 views
6

tôi sử dụng các chức năng sau đây từ Latex, Emacs: automatically open *TeX Help* buffer on error and close it after correction of the error? biên soạn tài liệu .tex qua latexmk:Làm thế nào để thêm một hàm (biến thể latexmk) vào danh sách lệnh TeX trong AUCTeX?

(defun run-latexmk() 
    (interactive) 
    (let ((TeX-save-query nil) 
     (TeX-process-asynchronous nil) 
     (master-file (TeX-master-file))) 
    (TeX-save-document "") 
    (TeX-run-TeX "latexmk" 
       (TeX-command-expand "latexmk -pdf %s" 'TeX-master-file); adjusted 
       master-file) 
    (if (plist-get TeX-error-report-switches (intern master-file)) 
     (TeX-next-error t) 
     (progn 
    (demolish-tex-help) 
    (minibuffer-message "latexmk: Done"))))) 

Làm thế nào tôi có thể "thêm" chức năng này để TeX-command-list để C-c C-c trong file .tex thực hiện chức năng này? [C-c C-c nên sử dụng run-latexmk như mặc định khi thực hiện trên file .tex]

tôi đã cố gắng

(add-hook 'LaTeX-mode-hook 
     (lambda() 
     (add-to-list 'TeX-command-list 
      '("latexmk" #'run-latexmk 
       TeX-run-command nil t :help "Run latexmk") t) 
     (setq TeX-command-default "latexmk"))) 

nhưng nó không thành công với thông điệp: TeX-command-expand: Wrong type argument: stringp, (function run-latexmk) (lấy từ * Tin nhắn *)

Trả lời

4

Bạn không muốn sử dụng TeX-run-command vì đó là để chạy lệnh shell. Bạn sẽ muốn chạy TeX-run-function nhưng vẫn giữ "hàm" làm chuỗi nên bạn nên nói (chưa được kiểm tra):

(add-hook 'LaTeX-mode-hook 
    (lambda() 
    (add-to-list 'TeX-command-list 
      '("latexmk" "(run-latexmk)" 
      TeX-run-function nil t :help "Run latexmk") t) 
    (setq TeX-command-default "latexmk"))) 
+0

trông thật tuyệt vời, hoạt động tuyệt vời. Rất cám ơn, Ivan! –

+0

Tôi thiết lập nhiều tùy chọn trong 'Tex-command-list' trong' LaTeX-mode-hook', vì vậy tôi có thể chọn bất kỳ một trong 'Cc Cc', và tôi đặt một trong số chúng là' TeX-command-default' trong ' LaTeX-mode-hook', nhưng tôi sử dụng một hàm khác để chạy toàn bộ quá trình biên dịch vì vậy tôi không phải chọn một từ 'Cc Cc', làm cách nào tôi có thể sử dụng giá trị' Tex-command-default' trong hàm đó? – CodyChan

+0

Thử bỏ ràng buộc TeX-command-default trong chức năng khác của bạn, ví dụ: (defun xxx() (let ((TeX-command-default "lệnh của tôi")) ...)) –