我不确定说出这个问题的最好方法,但希望我的例子能说明发生了什么。
我有一些代码,我希望在临时缓冲区中插入bibtex文件的内容,并逐个浏览条目,使用bibtex-parse-entry
获取条目以供日后使用。但是,每当我在此emacs会话期间未访问的bibtex文件上运行代码时,bibtex-parse-entry
都会返回(wrong-type-argument stringp nil)
错误。
一旦我访问该文件,即使我然后关闭缓冲区,代码运行也没有任何问题。如果我删除bibtex-parse-entry
来电,则bibtex-kill-entry
会遇到同样的问题。
这是我正在使用的elisp代码:
(with-temp-buffer
(insert-file-contents "~/test.bib")
(goto-char (point-min))
(bibtex-mode)
(while (not (eobp))
(let* ((entry (bibtex-parse-entry t)))
(message "i'm here"))
(bibtex-kill-entry)
(bibtex-beginning-of-entry)
)
)
和一个虚拟.bib文件:
@Article{test,
author = {joe shmo},
title = {lorem ipsum},
journal = {something},
year = {1990},
}
有了这些,您应该能够重现我的错误。
我不知道发生了什么,所以我非常感谢任何帮助!
答案 0 :(得分:1)
我不是真正的专家。我刚刚调试了一下情况(在这种情况下尝试M-x toggle-debug-on-error
)并找到looking-at
的{{1}}值调用。堆栈跟踪告诉我们问题出在bibtex函数nil
中。在那里,我发现变量bibtex-valid-entry
- 根据其docstring--由bibtex-entry-maybe-empty-head
设置。
因此,在调用bibtex-set-dialect
后向您的函数添加对bibtex-set-dialect
的调用似乎可以解决问题。我真的不知道,到底想要达到什么目标,我不确定它是否真正解决了你的问题。至少该函数不再引发错误。
希望,这是有道理和有帮助的。
bibtex-mode