oc-basic.el: Drop {...} when rendering Bibtex entries
* lisp/oc-basic.el (org-cite-basic--print-bibtex-string): New function approximately parsing Bibtex strings and dropping {...}. (org-cite-basic--print-entry): Use the new function. * testing/examples/Basic.bib: * testing/lisp/test-oc-basic.el (test-org-cite-basic/export-bibliography): Add test. Reported-by: Dominik Schrempf <dominik.schrempf@gmail.com> Link: https://orgmode.org/list/CAF+0kSg8O3RQBG1wXoHjMEHwnGFz0gaDkTTSGv+ZaOt4d4myCA@mail.gmail.com
This commit is contained in:
parent
286a8fb798
commit
d2df9624ce
|
@ -463,6 +463,38 @@ necessary, unless optional argument NO-SUFFIX is non-nil."
|
||||||
new))))
|
new))))
|
||||||
(if no-suffix year (concat year suffix)))))))
|
(if no-suffix year (concat year suffix)))))))
|
||||||
|
|
||||||
|
(defun org-cite-basic--print-bibtex-string (element &optional info)
|
||||||
|
"Print Bibtex formatted string ELEMENT, according to Bibtex syntax.
|
||||||
|
Remove all the {...} that are not a part of LaTeX macros and parse the
|
||||||
|
LaTeX fragments. Do nothing when current backend is derived from
|
||||||
|
LaTeX, according to INFO.
|
||||||
|
|
||||||
|
Return updated ELEMENT."
|
||||||
|
(if (org-export-derived-backend-p (plist-get info :back-end) 'latex)
|
||||||
|
;; Derived from LaTeX, no need to use manual ad-hoc LaTeX
|
||||||
|
;; parser.
|
||||||
|
element
|
||||||
|
;; Convert ELEMENT to anonymous when ELEMENT is string.
|
||||||
|
;; Otherwise, we cannot modify ELEMENT by side effect.
|
||||||
|
(when (org-element-type-p element 'plain-text)
|
||||||
|
(setq element (org-element-create 'anonymous nil element)))
|
||||||
|
;; Approximately parse LaTeX fragments, assuming Org mode syntax
|
||||||
|
;; (it is close to original LaTeX, and we do not want to
|
||||||
|
;; re-implement complete LaTeX parser here))
|
||||||
|
(org-element-map element t
|
||||||
|
(lambda (str)
|
||||||
|
(when (stringp str)
|
||||||
|
(org-element-set
|
||||||
|
str
|
||||||
|
(org-element-parse-secondary-string
|
||||||
|
str '(latex-fragment entity))))))
|
||||||
|
;; Strip the remaining { and }.
|
||||||
|
(org-element-map element t
|
||||||
|
(lambda (str)
|
||||||
|
(when (stringp str)
|
||||||
|
(org-element-set str (replace-regexp-in-string "[{}]" "" str)))))
|
||||||
|
element))
|
||||||
|
|
||||||
(defun org-cite-basic--print-entry (entry style &optional info)
|
(defun org-cite-basic--print-entry (entry style &optional info)
|
||||||
"Format ENTRY according to STYLE string.
|
"Format ENTRY according to STYLE string.
|
||||||
ENTRY is an alist, as returned by `org-cite-basic--get-entry'.
|
ENTRY is an alist, as returned by `org-cite-basic--get-entry'.
|
||||||
|
@ -474,27 +506,29 @@ Optional argument INFO is the export state, as a property list."
|
||||||
(org-cite-basic--get-field 'journal entry info)
|
(org-cite-basic--get-field 'journal entry info)
|
||||||
(org-cite-basic--get-field 'institution entry info)
|
(org-cite-basic--get-field 'institution entry info)
|
||||||
(org-cite-basic--get-field 'school entry info))))
|
(org-cite-basic--get-field 'school entry info))))
|
||||||
(pcase style
|
(org-cite-basic--print-bibtex-string
|
||||||
("plain"
|
(pcase style
|
||||||
(let ((year (org-cite-basic--get-year entry info 'no-suffix)))
|
("plain"
|
||||||
(org-cite-concat
|
(let ((year (org-cite-basic--get-year entry info 'no-suffix)))
|
||||||
(org-cite-basic--shorten-names author) ". "
|
(org-cite-concat
|
||||||
title (and from (list ", " from)) ", " year ".")))
|
(org-cite-basic--shorten-names author) ". "
|
||||||
("numeric"
|
title (and from (list ", " from)) ", " year ".")))
|
||||||
(let ((n (org-cite-basic--key-number (cdr (assq 'id entry)) info))
|
("numeric"
|
||||||
(year (org-cite-basic--get-year entry info 'no-suffix)))
|
(let ((n (org-cite-basic--key-number (cdr (assq 'id entry)) info))
|
||||||
(org-cite-concat
|
(year (org-cite-basic--get-year entry info 'no-suffix)))
|
||||||
(format "[%d] " n) author ", "
|
(org-cite-concat
|
||||||
(org-cite-emphasize 'italic title)
|
(format "[%d] " n) author ", "
|
||||||
(and from (list ", " from)) ", "
|
(org-cite-emphasize 'italic title)
|
||||||
year ".")))
|
(and from (list ", " from)) ", "
|
||||||
;; Default to author-year. Use year disambiguation there.
|
year ".")))
|
||||||
(_
|
;; Default to author-year. Use year disambiguation there.
|
||||||
(let ((year (org-cite-basic--get-year entry info)))
|
(_
|
||||||
(org-cite-concat
|
(let ((year (org-cite-basic--get-year entry info)))
|
||||||
author " (" year "). "
|
(org-cite-concat
|
||||||
(org-cite-emphasize 'italic title)
|
author " (" year "). "
|
||||||
(and from (list ", " from)) "."))))))
|
(org-cite-emphasize 'italic title)
|
||||||
|
(and from (list ", " from)) "."))))
|
||||||
|
info)))
|
||||||
|
|
||||||
|
|
||||||
;;; "Activate" capability
|
;;; "Activate" capability
|
||||||
|
|
|
@ -7,3 +7,14 @@
|
||||||
doi = {10.1007/978-3-642-23816-1},
|
doi = {10.1007/978-3-642-23816-1},
|
||||||
isbn = {9783642238161}
|
isbn = {9783642238161}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@InCollection{Geyer2011,
|
||||||
|
author = {Geyer, Charles J},
|
||||||
|
title = {{Introduction to Markov\plus Chain Monte Carlo}},
|
||||||
|
year = 2011,
|
||||||
|
booktitle = {{Handbook of Markov Chain Monte Carlo}},
|
||||||
|
editor = {Brooks, Steve and Gelman, Andrew and Jones, Galin and Meng,
|
||||||
|
Xiao-Li},
|
||||||
|
publisher = {CRC press},
|
||||||
|
pages = 45,
|
||||||
|
}
|
||||||
|
|
|
@ -156,5 +156,24 @@ Text: [cite/t: Citing ; @friends; and @friends also; is duplication.]"
|
||||||
(search-forward "Text: Citing van Dongen, M.R.C. (2012), and van Dongen, M.R.C. (2012)
|
(search-forward "Text: Citing van Dongen, M.R.C. (2012), and van Dongen, M.R.C. (2012)
|
||||||
also is duplication." nil t)))))))
|
also is duplication." nil t)))))))
|
||||||
|
|
||||||
|
(ert-deftest test-org-cite-basic/export-bibliography ()
|
||||||
|
"Test `org-cite-basic-export-bibliography'."
|
||||||
|
;; Drop {...} Bibtex brackets and render entities.
|
||||||
|
(org-test-with-temp-text
|
||||||
|
(format
|
||||||
|
"#+bibliography: %s
|
||||||
|
#+cite_export: basic
|
||||||
|
Foo [cite/plain:@Geyer2011]
|
||||||
|
#+print_bibliography:"
|
||||||
|
(expand-file-name "examples/Basic.bib" org-test-dir))
|
||||||
|
(let ((export-buffer "*Test ASCII Export*")
|
||||||
|
(org-export-show-temporary-export-buffer nil))
|
||||||
|
(org-export-to-buffer 'ascii export-buffer)
|
||||||
|
(with-current-buffer export-buffer
|
||||||
|
(let ((case-fold-search t))
|
||||||
|
(should
|
||||||
|
;; Rendered from {Introduction to Markov\plus Chain Monte Carlo}
|
||||||
|
(search-forward "Introduction to Markov+ Chain Monte Carlo" nil t)))))))
|
||||||
|
|
||||||
(provide 'test-oc-basic)
|
(provide 'test-oc-basic)
|
||||||
;;; test-oc-basic.el ends here
|
;;; test-oc-basic.el ends here
|
||||||
|
|
Loading…
Reference in New Issue