Emacs bibtex-mode 无法解析未访问的文件
Emacs bibtex-mode unable to parse un-visited file
我不确定用什么方式来表达这个问题,但希望我的例子能说明发生了什么。
我有一些代码,我想在临时缓冲区中插入一个 bibtex 文件的内容,并一次一个地移动条目,使用 bibtex-parse-entry
获取条目供以后使用。但是,每当我 运行 我在这个 emacs 会话期间没有访问过的 bibtex 文件上的代码时,bibtex-parse-entry
returns 一个 (wrong-type-argument stringp nil)
错误。
访问文件后,即使关闭缓冲区,代码 运行s 也没有任何问题。如果我删除 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},
}
有了这些你应该能够重现我的错误。
我不知道发生了什么,所以非常感谢任何帮助!
我不是这方面的专家。我只是稍微调试了一下情况(在这种情况下尝试 M-x toggle-debug-on-error
)并找到了一个带有 nil
值的对 looking-at
的调用。堆栈跟踪告诉我们问题出在 bibtex 函数 bibtex-valid-entry
中。在那里,我找到了变量 bibtex-entry-maybe-empty-head
,根据它的文档字符串,它是由 bibtex-set-dialect
.
设置的
因此,在调用 bibtex-mode
之后向您的函数添加对 bibtex-set-dialect
的调用似乎可以解决问题。因为我真的不知道,你最终想要实现什么,我不确定它是否真的解决了你的问题。至少该函数确实不再引发错误。
希望,这是有道理的并且有所帮助。
(with-temp-buffer
(insert-file-contents "~/test.bib")
(goto-char (point-min))
(bibtex-mode)
(bibtex-set-dialect) ;; <-- add this
(while (not (eobp))
(let* ((entry (bibtex-parse-entry t)))
(message "i'm here"))
(bibtex-kill-entry)
(bibtex-beginning-of-entry)))
我不确定用什么方式来表达这个问题,但希望我的例子能说明发生了什么。
我有一些代码,我想在临时缓冲区中插入一个 bibtex 文件的内容,并一次一个地移动条目,使用 bibtex-parse-entry
获取条目供以后使用。但是,每当我 运行 我在这个 emacs 会话期间没有访问过的 bibtex 文件上的代码时,bibtex-parse-entry
returns 一个 (wrong-type-argument stringp nil)
错误。
访问文件后,即使关闭缓冲区,代码 运行s 也没有任何问题。如果我删除 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},
}
有了这些你应该能够重现我的错误。
我不知道发生了什么,所以非常感谢任何帮助!
我不是这方面的专家。我只是稍微调试了一下情况(在这种情况下尝试 M-x toggle-debug-on-error
)并找到了一个带有 nil
值的对 looking-at
的调用。堆栈跟踪告诉我们问题出在 bibtex 函数 bibtex-valid-entry
中。在那里,我找到了变量 bibtex-entry-maybe-empty-head
,根据它的文档字符串,它是由 bibtex-set-dialect
.
因此,在调用 bibtex-mode
之后向您的函数添加对 bibtex-set-dialect
的调用似乎可以解决问题。因为我真的不知道,你最终想要实现什么,我不确定它是否真的解决了你的问题。至少该函数确实不再引发错误。
希望,这是有道理的并且有所帮助。
(with-temp-buffer
(insert-file-contents "~/test.bib")
(goto-char (point-min))
(bibtex-mode)
(bibtex-set-dialect) ;; <-- add this
(while (not (eobp))
(let* ((entry (bibtex-parse-entry t)))
(message "i'm here"))
(bibtex-kill-entry)
(bibtex-beginning-of-entry)))