2012-04-12 10 views
12

に問い合わせることなく、キーの組み合わせのEmacs/AucTeXでCcをCcとを実行(ラテックス、BibTeX用、ビュー、またはその他)、その後、ユーザーに確認すべきかを決定するコマンド機能TeX-command-masterを実行しますコマンドを実行する前に確認してください。ランのTeXコマンド・マスターのemacs

私は、確認を求めずに以外のキー(たとえばF9)にこれをバインドしたいと思います。このようにして、F9を押すだけで、最も適切なコマンドが実行されます。どうやってやるの?

+0

どのバージョンのAUCTeX? – Thomas

+0

@トーマス「11.86-3」と思う。それは意味がありますか?] – Malabarba

答えて

9

私はこのスニペットを以下のEmacswikiのリンクから取ってきました。私はあなたが好きなら、コピー、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))) 

私はさらにいくつかのAUCTeX/RefTeX設定hereを持っているにバインドされました。

+1

'C:' C-a'(あるいは私が関数を手動で実行する)しようとすると、 'let:Symbolの関数定義がvoid:TeX-command-default'エラーメッセージが出ます。 'C-h v TeX-command-default'を実行すると、変数として記述されます。 – Malabarba

+0

@BruceConnorごめんなさい。合計スニペットが追加されました。 – kindahero

+0

パーフェクト。ありがとう。 – Malabarba

0

は、最もエレガントなソリューションがありますが、次のコマンドを含むキーボードマクロを定義することができます。

  • C-x C-sあらかじめ選択された(AucTeXによって)コマンドを実行するために、ファイル
  • M-x TeX-command-master <RET>を保存します。

定義した後、M-x insert-kbd-macroは、マクロ定義を(Lispコードとして)現在のバッファに挿入します。その後、.emacsに追加してF9にバインドすることができます。

関連する問題