1

現在の latex ファイルをコンパイルする関数を作成しました。

;close the *async pdflatex* window, when pdflatex finishes
(defun latex-sentinel (process event)
      (message event)
      (cond ((string-match-p "finished" event)
                  (progn
                        (kill-buffer "*async pdflatex*")
                        (message "pdflatex done")
                        (delete-other-windows)))))

(defun latex-compile ()
      "Runs pdflatex on current file"
      (interactive)
      (let* ((file-name (shell-quote-argument (buffer-file-name)))
            (process (start-process-shell-command
                           "pdflatex"
                           "*async pdflatex*"
                           (concat "pdflatex " file-name))))
            (set-process-sentinel process 'latex-sentinel)
            (setq new-window (split-window-below 40))
            (set-window-buffer new-window "*async pdflatex*")
            (other-window 1)))

(add-hook 'LaTeX-mode-hook (lambda () 
    (define-key LaTeX-mode-map (kbd "<f2>") 'latex-compile)))

コンパイル中にエラーが発生すると、pdflatex がフリーズし、次のように表示されます。

ここに画像の説明を入力

私の現在のワークフロー:

  1. 上にスクロールしてエラーを表示します
  2. kill-this-buffer - pdflatex プロセスを強制終了します
  3. delete-window - *async pdflatex* ウィンドウを閉じて編集に戻ります。

プロセスが停止し、ユーザー入力を待っていることを追跡することは可能ですか? 私の現在の歩哨は、「終了」イベントでのみアクティブになります。そのため、現在のワークフローを自動化できました。

4

2 に答える 2

3

[ @Thomas: そのために AUCTeX は必要ありません。ビルトインは、そのタスクのバインドlatex-modeも提供します。C-c C-c]

一般に、プロセスが「私を待っている」ことを検出することは困難/不可能です (せいぜいプロセスの CPU 使用率を監視し、しばらくの間 0% である場合は、おそらくあなたを待っていると判断できますが、それを行うことさえできます)。監視する適切な OS プロセスを見つけてから、システム依存の操作を使用して CPU 使用率を取得する必要があるため、注意が必要です)。\nonstopmode\inputlatex-modes は通常、pdflatex のコマンドラインを渡すことでこれを「解決」します。

于 2013-06-03T14:05:34.700 に答える