Closed icymist closed 9 years ago
M-x parsebib-find-next-item
isn't supposed to turn anything up, because parsebib-find-next-item
isn't a command: it cannot be executed with M-x
.
I suspect you have the same problem as reported in tmalsburg/helm-bibtex#25, though. Have you tried restarting Emacs and reinstalling parsebib
?
Yep. I think they are related too.
I restarted emacs a zillion times. Also, I reinstalled parsebib a couple of times. Same result.
Can you tell me how I can test if parsebib is working the way it is supposed to work?
Weird...
You can test what parsebib
does by opening a .bib
file in Emacs and then do M-: (parsebib-find-next-item)
. That should return the name of the first item after point
, e.g.,
#("incollection" 0 12 (fontified t face font-lock-function-name-face))
This is the representation of a fontified string, the important part is the string at the beginning (here "incollection"
).
Then, without moving the cursor, do M-: (parsebib-read-entry “incollection”)
. That should return the fields of the entry as an alist.
If the first item is a @preamble
or @string
, use parsebib-read-preamble
or parsebib-read-string
instead, both of which take no arguments.
If that doesn’t return anything, could you post a few of your BibTeX entries in a gist or in this thread, so I can take a look at them? Thanks.
Both parsebib-find-next-item and parsebib-read-entry work in the bibtex file that I used. But, obviously I only checked a couple of entries at the top of the file.
I am not sure errors, if there are any, further down in the file would cause errors in helm-bibtex.
Doing M-x helm-bibtex > pattern: /search term/ leads to fall back behavior. Basically, it just shows 'Loading bibliography' and then if I just type the search term and press enter, it just takes me to the end of the bib file (which I think is the fallback behavior for helm-bibtex).
On Thu, Feb 19, 2015 at 11:07 PM, Joost Kremers notifications@github.com wrote:
Weird...
You can test what parsebib does by opening a .bib file in Emacs and then do M-: (parsebib-find-next-item). That should return the name of the first item after point, e.g.,
("incollection" 0 12 (fontified t face font-lock-function-name-face))
This is the representation of a fontified string, the important part is the string at the beginning (here "incollection").
Then, without moving the cursor, do M-: (parsebib-read-entry “incollection”). That should return the fields of the entry as an alist.
If the first item is a @preamble or @string, use parsebib-read-preamble or parsebib-read-string instead, both of which take no arguments.
If that doesn’t return anything, could you post a few of your BibTeX entries in a gist or in this thread, so I can take a look at them? Thanks.
— Reply to this email directly or view it on GitHub https://github.com/joostkremers/parsebib/issues/3#issuecomment-75148785.
42
Try this:
.bib
file*scratch*
bufferCopy & paste the following code (replace "Bibliography.bib"
with the name of your .bib
file):
(with-current-buffer "Bibliography.bib"
(let ((entries (helm-bibtex-parse-bibliography)))
(assoc "=key=" (car (last entries)))))
C-x C-e
The key of the last entry read should appear in the minibuffer.
This is what I get. The bib file is created by JabRef. JabRef opens the file just fine. I will also check if the file can be processed by a python bibtex module and post a link to the whole file shortly.
Debugger entered--Lisp error: (wrong-type-argument char-or-string-p nil)
#[(it) "@\227AB\207" [--cl-var--] 2](("Url" . "{http://link.aps.org/doi/10.1103/PhysRevB.81.121413}"))
mapcar(#[(it) "@\227AB\207" [--cl-var--] 2] (("Url" . "{http://link.aps.org/doi/10.1103/PhysRevB.81.121413}") ("Timestamp" . "{2013.07.23}") ("Publisher" . "{American Physical Society}") ("Owner" . "{chaitanya}") ("Numpages" . "{4}") ("Keywords" . "{Ru(0001), RuO2, CO oxidation}") ("Issue" . "{12}") ("File" . "{Sljivancanin10.pdf:Sljivancanin10.pdf:PDF}") ("Doi" . "{10.1103/PhysRevB.81.121413}") ("Volume" . "{81}") ("Pages" . "{121413}") ("Month" . "{Mar}") ("Year" . "{2010}") ("Journal" . "{Physical Review B}") ("Author" . "{\\v{S}ljivan\\v{c}anin, \\v{Z}eljko and Hammer, Bj\\o{}rk}") ("Title" . "{{CO} oxidation on fully oxygen covered {R}u(0001): {R}ole of step edges}") ("=type=" . #("Article" 0 7 (fontified t face font-lock-function-name-face))) ("=key=" . "Sljivancanin10")))
helm-bibtex-parse-bibliography()
(let ((entries (helm-bibtex-parse-bibliography))) (assoc "=key=" (car (last entries))))
(save-current-buffer (set-buffer "mynewrefs.bib") (let ((entries (helm-bibtex-parse-bibliography))) (assoc "=key=" (car (last entries)))))
(with-current-buffer "mynewrefs.bib" (let ((entries (helm-bibtex-parse-bibliography))) (assoc "=key=" (car (last entries)))))
eval((with-current-buffer "mynewrefs.bib" (let ((entries (helm-bibtex-parse-bibliography))) (assoc "=key=" (car (last entries))))) nil)
eval-last-sexp-1(nil)
eval-last-sexp(nil)
ad-Orig-call-interactively(eval-last-sexp nil nil)
call-interactively(eval-last-sexp nil nil)
I can parse the file without any problem with pybtex.
Here is the link to the full file if you want to have a look.
https://drive.google.com/file/d/0BzoeB0s5X2tYcjhiSzdQR2d4d3M/view?usp=sharing
I downloaded your file and tried to read it. On my machine, parsebib
has no problems with it. I'm using Emacs 24.4, though, so perhaps it's a problem with Emacs 24.3. I'm trying to set up a virtual machine with Emacs 24.3 so I can test that version. Will let you know ASAP.
Ok, I installed the VM and did some experimenting. The problem is not with parsebib
nor with helm-bibtex
. For some reason, the interaction of cl-loop
and --map
triggers a bug in (I think) cl-loop
that has apparently been fixed in Emacs 24.4. It's possible to work around it, but that has to be done in helm-bibtex
. I'll report the issue to the helm-bibtex
maintainer, but for now, to get things working again, you can replace the function helm-bibtex-parse-bibliograpy
with the following modified version:
(defun helm-bibtex-parse-bibliography ()
"Parse the BibTeX entries listed in the current buffer and
return a list of entry keys in the order in which the entries
appeared in the BibTeX files."
(goto-char (point-min))
(cl-loop
for entry-type = (parsebib-find-next-item)
while entry-type
unless (member-ignore-case entry-type '("preamble" "string" "comment"))
collect (-map (lambda (it)
(cons (downcase (car it)) (cdr it)))
(parsebib-read-entry entry-type))))
You can put this function in your ~/emacs.d/init.el
after (require 'helm-bibtex)
, or you can replace the function in helm-bibtex.el
and recompile the file.
The latest version of helm-bibtex
contains a fix for this issue. Do report back if you still have problems.
Works now. Thank you! @joostkremers @tmalsburg
C-h f parse-bib-next-item shows help about the function.
But, M-x parsebib-find-next-item does not show up. Says, No match.
Tried (load "parsebib.el") and also (load "absolute-path-to-parsebib.el"); both give same result as above.
When loading .el file do not byte compile to .elc files; although, I am not sure if this should be the case.
Since, parsebib is not working for me, I can't use helm-bibtex and therefore org-ref.
Might be related to https://github.com/tmalsburg/helm-bibtex/issues/25