Merge branch 'master' of orgmode.org:org-mode
This commit is contained in:
commit
e29a4703c7
|
@ -28,6 +28,8 @@
|
|||
;;
|
||||
;; http://www.lri.fr/~filliatr/bibtex2html/
|
||||
;;
|
||||
;; It also introduces "cite" syntax for Org links.
|
||||
;;
|
||||
;; The usage is as follows:
|
||||
;;
|
||||
;; #+BIBLIOGRAPHY: bibfilebasename stylename optional-options
|
||||
|
@ -64,9 +66,18 @@
|
|||
;; into the TeX file when exporting.
|
||||
;;
|
||||
;; For HTML export it:
|
||||
;; 1) converts all \cite{foo} to links to the bibliography,
|
||||
;; 1) converts all \cite{foo} and [[cite:foo]] to links to the
|
||||
;; bibliography,
|
||||
;; 2) creates a foo.html and foo_bib.html,
|
||||
;; 3) includes the contents of foo.html in the exported HTML file.
|
||||
;;
|
||||
;; For LaTeX export it:
|
||||
;; 1) converts all [[cite:foo]] to \cite{foo}.
|
||||
|
||||
;; Initialization
|
||||
|
||||
(eval-when-compile (require 'cl))
|
||||
(org-add-link-type "cite" 'ebib)
|
||||
|
||||
|
||||
;;; Internal Functions
|
||||
|
@ -109,18 +120,22 @@ contains a list of strings to be passed as options ot
|
|||
(setq limit (not (equal "nil" value))))
|
||||
((equal "option" key) (push value options)))))))))
|
||||
|
||||
(defun org-bibtex-citation-p (fragment)
|
||||
"Non-nil when a LaTeX macro is a citation.
|
||||
FRAGMENT is a `latex-fragment' type object."
|
||||
(string-match "\\`\\\\cite{" (org-element-property :value fragment)))
|
||||
(defun org-bibtex-citation-p (object)
|
||||
"Non-nil when OBJECT is a citation."
|
||||
(case (org-element-type object)
|
||||
(link (equal (org-element-property :type object) "cite"))
|
||||
(latex-fragment
|
||||
(string-match "\\`\\\\cite{" (org-element-property :value object)))))
|
||||
|
||||
(defun org-bibtex-get-citation-key (citation)
|
||||
"Return key for a given citation, as a string.
|
||||
CITATION is a `latex-fragment' type object satisfying to
|
||||
`org-bibtex-citation-p' predicate."
|
||||
CITATION is a `latex-fragment' or `link' type object satisfying
|
||||
to `org-bibtex-citation-p' predicate."
|
||||
(if (eq (org-element-type citation) 'link)
|
||||
(org-element-property :path citation)
|
||||
(let ((value (org-element-property :value citation)))
|
||||
(and (string-match "\\`\\\\cite{" value)
|
||||
(substring value (match-end 0) -1))))
|
||||
(substring value (match-end 0) -1)))))
|
||||
|
||||
|
||||
|
||||
|
@ -139,7 +154,16 @@ Fallback to `latex' back-end for other keywords."
|
|||
(concat (and style (format "\\bibliographystyle{%s}\n" style))
|
||||
(format "\\bibliography{%s}" file))))))))
|
||||
|
||||
(defadvice org-latex-link (around bibtex-link)
|
||||
"Translate \"cite\" type links into LaTeX syntax.
|
||||
Fallback to `latex' back-end for other keywords."
|
||||
(let ((link (ad-get-arg 0)))
|
||||
(if (not (org-bibtex-citation-p link)) ad-do-it
|
||||
(setq ad-return-value
|
||||
(format "\\cite{%s}" (org-bibtex-get-citation-key link))))))
|
||||
|
||||
(ad-activate 'org-latex-keyword)
|
||||
(ad-activate 'org-latex-link)
|
||||
|
||||
|
||||
|
||||
|
@ -176,8 +200,25 @@ Fallback to `html' back-end for other keywords."
|
|||
(org-split-string (org-bibtex-get-citation-key fragment) ",")
|
||||
"")))))
|
||||
|
||||
(defadvice org-html-link (around bibtex-link)
|
||||
"Translate \"cite:\" type links into HTML syntax.
|
||||
Fallback to `html' back-end for other types."
|
||||
(let ((link (ad-get-arg 0)))
|
||||
(if (not (org-bibtex-citation-p link)) ad-do-it
|
||||
(setq ad-return-value
|
||||
(mapconcat
|
||||
(lambda (key)
|
||||
(format "[<a href=\"#%s\">%s</a>]"
|
||||
key
|
||||
(or (cdr (assoc key org-bibtex-html-entries-alist))
|
||||
key)))
|
||||
(org-split-string (org-bibtex-get-citation-key link)
|
||||
"[ \t]*,[ \t]*")
|
||||
"")))))
|
||||
|
||||
(ad-activate 'org-html-keyword)
|
||||
(ad-activate 'org-html-latex-fragment)
|
||||
(ad-activate 'org-html-link)
|
||||
|
||||
|
||||
;;;; Filter
|
||||
|
@ -202,10 +243,10 @@ Return new parse tree. This function assumes current back-end is HTML."
|
|||
;; argument.
|
||||
(when (plist-get arguments :limit)
|
||||
(let ((citations
|
||||
(org-element-map tree 'latex-fragment
|
||||
(lambda (fragment)
|
||||
(and (org-bibtex-citation-p fragment)
|
||||
(org-bibtex-get-citation-key fragment))))))
|
||||
(org-element-map tree '(latex-fragment link)
|
||||
(lambda (object)
|
||||
(and (org-bibtex-citation-p object)
|
||||
(org-bibtex-get-citation-key object))))))
|
||||
(with-temp-file (setq temp-file (make-temp-file "ox-bibtex"))
|
||||
(insert (mapconcat 'identity citations "\n")))
|
||||
(setq arguments
|
||||
|
|
Loading…
Reference in New Issue