I am using the following function to run latexmk on my latex-file in emacs:
(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)))
(Taken from https://stackoverflow.com/a/14699078/406686).
Suppose I have a simple document (test.tex
) with some errors in it like:
\documentclass{article}
\begin{document}
\error1
\error2
\end{document}
Now if I press for example Space and then Backspace (or doing any change and undo it) and then run my-run-latex
latexmk runs and says that all targets are up to date. The problem is that then I loose the error list, so TeX-next-error
will not have any effect.
I guess the problem could be solved by replacing (buffer-modified-p)
by something which prevents to run latexmk in this case (best by the same test latexmk does to check if the file changed since the last run). Any idea how to do this?
latexmk
uses hashing to determine whether a file was changed. The hash algorithm used ismd5
, it isn't completely secure but this isn't really important in this respect. So you can use a hash-based test instead of(buffer-modified-p)
. The following code should work:As pointed out by @student, the function
secure-hash
was introduced in Emacs 24.2. For previous versions one can use(md5 (current-buffer))
.