16

C-0AUCTeXを使用していますが、次のようなキーをバインドしたいと思います。

  1. プロンプトを表示せずにアクティブなファイルを保存します。
  2. latexmkプロンプトを表示せずにアクティブファイルで実行されます。
  3. によって何かが発生した場合にエラーを表示latexmkします。

私の問題はキーをバインドする方法(Tylerが以下のコメントにリンクを投稿したもの)ではなく、項目1〜3を実行する関数を作成する方法です。


私はLatexmkを

(add-hook 'LaTeX-mode-hook (lambda ()
  (push 
    '("Latexmk" "latexmk %s" TeX-run-TeX nil t
      :help "Run Latexmk on file")
    TeX-command-list)))

これは私の.latexmkrcです

$pdf_mode = 1;
$recorder = 1;
$latex = 'latex -recorder -halt-on-error -interaction=nonstopmode -shell-escape';
$pdflatex = 'pdflatex -recorder -halt-on-error -interaction=nonstopmode -shell-escape';

私はEmacs23.3とAUCTeX11.86を使用しています。

4

3 に答える 3

14

このようなもの?

(require 'tex-buf)

(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" "latexmk" master-file)
    (if (plist-get TeX-error-report-switches (intern master-file))
        (TeX-next-error t)
      (minibuffer-message "latexmk done"))))

(add-hook 'LaTeX-mode-hook
          (lambda () (local-set-key (kbd "C-0") #'run-latexmk)))

編集TeX-save-documentマスターファイルとサブファイルを保存し(ファイルが1つしかない場合は、それがマスターファイルです)、TeX-save-queryがnilの場合、確認を求められません。次にTeX-run-TeX、実行TeXに通常使用されるメカニズムを使用してlatexmkを実行します。これには、エラーメッセージの解析が含まれますが、通常は非同期プロセスを開始するため、TeX-process-asynchronousnilに設定して終了を待機します。奇妙に見えるplist-getフォームは、からのエラーをチェックするための文書化された方法でありTeX-run-TeX(のコメントを参照tex-buf.el)、エラーがある場合は、最初のフォームにジャンプします。エラーがない場合は、楽しみのためにミニバッファにメッセージを表示します。

最後に、これlocal-set-keyはキーを関数にバインドする1つの方法です。

于 2011-10-18T17:24:21.867 に答える
3

これはあなたが望むことをしますか?

(defun my-tex ()
"Saves the current buffer and runs LaTeX, all with no prompts or further interaction."
  (interactive)
  (save-buffer)
  (TeX-command "LaTeX" 'TeX-master-file -1))

私はlatexmkを使用していませんが、それを機能させるために必要なのは、latexmkに使用する名前文字列TeX-command-list(おそらく「latexmk」または「Latexmk」)の文字列「LaTeX」を切り替えることだけです。

これは私にとって今役立つので、あなたが尋ねてくれてうれしいです!

于 2011-10-18T14:49:38.070 に答える
2

emacsでlatexmkを呼び出す方法の回答をすでに使用していて、 next-errorにジャンプしてAUCTeXのコマンドリストに追加latexmkしたとすると、次の関数を使用できます。

(defun run-latexmk ()
  (interactive)
  (save-buffer)
  (TeX-command "Latexmk" 'TeX-master-file 0)
  (if (plist-get TeX-error-report-switches (intern (TeX-master-file)))
      (next-error))) ;; 0 -> suppress confirmation

そして、キーバインド手法のいずれかを使用して、C-0;にバインドします。これがTeXモードにローカルなものです:

(define-key TeX-mode-map (kbd "C-0") 'run-latexmk)

このrun-latexmk機能は、を掘り下げてTeX-command-master、必要に応じて単純化することに基づいています。(next-error)LaTeXはエラーによって混乱し、入力の待機を一時停止する可能性があるため、への呼び出しが常に発生するとは限らないことに注意してください

于 2011-10-18T14:50:37.970 に答える