我做了一個函數,編譯當前乳膠文件:elisp的哨兵等待輸入
當有錯誤,在編譯或pdflatex凍結了,我看到:
我目前的工作流程:
- 向上滾動查看錯誤
- kill-this-buffer - kill pdflatex進程
- delete-window - 關閉* async pdflatex *窗口並返回編輯狀態。
是否有可能跟蹤,該進程已停止並正在等待用戶輸入?我目前的哨兵只在「完成」事件中激活。所以我可以自動化我當前的工作流程。
我做了一個函數,編譯當前乳膠文件:elisp的哨兵等待輸入
當有錯誤,在編譯或pdflatex凍結了,我看到:
我目前的工作流程:
是否有可能跟蹤,該進程已停止並正在等待用戶輸入?我目前的哨兵只在「完成」事件中激活。所以我可以自動化我當前的工作流程。
[@Thomas:你不需要AUCTeX。內建latex-mode
還爲該任務提供了一個C-c C-c
綁定。 ]
一般來說,檢測一個進程是否在「等待我」是困難的或不可能的(最好你可能監視進程的CPU使用情況,如果它一直是0%,你可以決定它可能正在等待你,但即使這樣做也很棘手,因爲您需要找到適當的OS進程來監視,然後使用依賴於系統的操作來獲取CPU使用率)。乳膠模式通常通過在pdflatex的命令行上傳遞\nonstopmode\input
來「解決」這個問題。
我有同樣的困難。以下似乎是確定的。
(defun latex-compile()
(interactive)
(save-buffer)
(set 'tex-to-pdf "pdflatex -interaction=nonstopmode")
(set 'file-name (shell-quote-argument (buffer-file-name)))
(set 'comm1 (concat tex-to-pdf " " file-name))
(set-process-sentinel
(start-process-shell-command "latex-compile"
"*async latex-compile*"
comm1)
'tex-to-pdf-sentinel))
;;;
(defun tex-to-pdf-sentinel (process event)
(cond
((string-match-p "finished" event)
(message "latex-compile complete"))
((string-match-p "\\(exited\\|dumped\\)" event)
(message "error in latex-compile"))
))
我意識到使用全局變量set
是不可取的;這只是一個簡單的例子。
第一次完成時,您可以設置第二個sentilel
,例如,以便查看器打開以顯示.pdf
輸出,或者您希望確保每次運行bibtex
。這可以節省重複呼叫C-c C-c in latex mode
。
您是否知道AUCTeX模式? – Thomas
@Thomas是的,我知道 – user4035
你可以嘗試的一件事是將命令改爲'pdflatex dev/null'。這樣,程序應該檢測到沒有任何輸入即將出現。 – legoscia