3

次の関数を使用して、emacs の latex ファイルで latexmk を実行しています。

(defun my-run-latex ()
  (interactive)
  (if (buffer-modified-p)
      (progn  
        (setq TeX-save-query nil) 
        (TeX-save-document (TeX-master-file))
        (TeX-command "Latexmk" 'TeX-master-file -1))
    (TeX-view)))

( https://stackoverflow.com/a/14699078/406686から取得)。

test.tex次のようないくつかのエラーを含む単純なドキュメント ( ) があるとします。

\documentclass{article}

\begin{document}
\error1
\error2
\end{document}

たとえば、Space キーを押してから Backspace キーを押して (または変更を行って元に戻す)、my-run-latexlatexmk を実行すると、すべてのターゲットが最新であると表示されます。問題は、エラーリストが失われるため、TeX-next-error何の効果もありません。

この場合、latexmk の実行を妨げるものに置き換えることで問題を解決できると思います(buffer-modified-p)(latexmk が前回の実行以降にファイルが変更されたかどうかを確認するのと同じテストを行うのが最善です)。これを行う方法はありますか?

4

1 に答える 1

1

latexmkハッシュを使用して、ファイルが変更されたかどうかを判断します。使用されているハッシュ アルゴリズムは ですmd5。完全に安全というわけではありませんが、この点ではあまり重要ではありません。したがって、代わりにハッシュベースのテストを使用できます(buffer-modified-p)。次のコードが機能するはずです。

(setq current-buffer-hash nil)
(make-variable-buffer-local 'current-buffer-hash)
(defun my-run-latex ()
  (interactive)
  (if (equal current-buffer-hash
         (setq current-buffer-hash (secure-hash 'md5 (current-buffer))))
      (TeX-view)
    (setq TeX-save-query nil)
    (TeX-save-document (TeX-master-file))
    (TeX-command "Latexmk" 'TeX-master-file -1)))

@student が指摘したように、この関数secure-hashは Emacs 24.2 で導入されました。以前のバージョンでは、(md5 (current-buffer)).

于 2013-08-09T21:25:59.447 に答える