首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何测试当前文件是否在与latexmk兼容的elisp中更改

如何测试当前文件是否在与latexmk兼容的elisp中更改
EN

Stack Overflow用户
提问于 2013-08-08 20:19:12
回答 1查看 457关注 0票数 3

我使用以下函数在emacs中的胶乳文件上运行latexmk:

代码语言:javascript
复制
(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),其中包含一些错误,例如:

代码语言:javascript
复制
\documentclass{article}

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

现在,如果我按Space,然后按Backspace (或者做任何更改并撤消它),然后运行my-run-latex latexmk,运行它并说所有目标都是最新的。问题是,然后我松开了错误列表,所以TeX-next-error不会产生任何影响。

我想这个问题可以通过用防止在本例中运行latexmk的方法来代替(buffer-modified-p)来解决(最好是通过同一个测试latexmk来检查文件自上次运行以来是否发生了变化)。知道怎么做吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-09 21:25:59

latexmk使用散列来确定文件是否被更改。所使用的哈希算法是md5,它并不完全安全,但在这方面并不是很重要。所以您可以使用基于散列测试而不是(buffer-modified-p)。以下代码应该有效:

代码语言:javascript
复制
(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函数是在Emacs24.2中引入的。对于以前的版本,可以使用(md5 (current-buffer))

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18135366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档