emacs-orgmode
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[O] org-ref: conditionally add url to formatted citation


From: Matt Price
Subject: [O] org-ref: conditionally add url to formatted citation
Date: Fri, 30 Aug 2019 15:12:54 -0400



On Sat, Jan 7, 2017 at 8:23 AM John Kitchin <address@hidden> wrote:
>
>>
>> 2. If you click on a citation link, you can select an action to copy the
>> formatted entry for that key.
>
>
> I had trouble with this. I constructed a minimal emacs config:
>
> #+BEGIN_SRC emacs-lisp
> ;;; elpa interface
> (setq package-archives ())
> (add-to-list 'package-archives '("marmalade" . "
> http://marmalade-repo.org/packages/"))
> (add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/"))
> (add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/") t)
> (add-to-list 'package-archives '("melpa" . "
> http://melpa.milkbox.net/packages/") t)
> ;; basic initialization, (require) non-ELPA packages, etc.
> (package-initialize)
>
> (require 'cl)
> (require 'org)
> (require 'helm-config)
> (require 'helm)
> (require 'helm-bibtex)
>
> ;; see org-ref for use of these variables
> (setq org-ref-bibliography-notes "~/Bibliography/notes.org"
>       org-ref-default-bibliography '("~/Bibliography/Bibliography.bib")
>       org-ref-pdf-directory "~/Bibliography/files/")
>
> (setq bibtex-completion-bibliography "~/Bibliography/Bibliography.bib"
>       bibtex-completion-library-path "~/Bibliography/files"
>       )
>
> ;; org-define-error
> ;; for whatever reason, org wasn't finding this
> (defun org-define-error (name message)
>   "Define NAME as a new error signal.
> MESSAGE is a string that will be output to the echo area if such
> an error is signaled without being caught by a `condition-case'.
> Implements `define-error' for older emacsen."
>   (if (fboundp 'define-error) (define-error name message)
>     (put name 'error-conditions
>      (copy-sequence (cons name (get 'error 'error-conditions))))))
>
> (setq org-ref-formatted-citation-backend "org")
> (setq org-ref-completion-library 'org-ref-helm-bibtex)
>
> (require 'org-ref)
>
> #+END_SRC

It is pretty weird about org-define-error. It is in org-compat.el. I am
using org-9.

> The action proceeds without errors, but nothing seems to be copied ot the
> clipboard.
>
>>
>> 3. On a bibtex entry, you can use the org-ref-bibtex-hydra/body to copy
>> a formatted string of the entry.
>>
> this works great.  Obviously I need to learn how to use hydra...

I go back and forth on liking ivy/hydra vs helm.

>> You would want to have these settings with a new org-ref:
>> (setq org-ref-formatted-citation-backend "org")
>>
>> (setf (cdr (assoc "book" (cdr (assoc "org"
>> org-ref-formatted-citation-formats))))
>>  "${author} ${year}. /${title}/, ${address}:${publisher}. [[${url}]]")
>>
>> Then you can insert the citation and get this (there is no address for
>> the publisher in my entry). With helm bibtex as the backend, you would
>> type C-c ], select an entry, and press f8 (or tab and select the insert
>> formatted action). In the ivy backend, you type M-o f. Both of them
>> support multiple selections.
>
> Yeah, this is awesome, thank you.  it's F7 though, not F8.

could be, the key is related to the number/order of actions in helm-bibtex.
>>
>>
>>
>> That entry type isn't defined in the formats (there should be a default
>> entry, but it isn't formatted the way you want), but you could add it
> like this:
>>
>>
>> (push '("misc" . "${author} ${year}. /${title}/,
> [[${howpublished}]]")(cdr (assoc "org"
>> org-ref-formatted-citation-formats)))
>>
>
> got it now.  This is great, thanks.  Moving forward now that you've solved
> my last problem... for properly formatted citations, is latex the only
> fully supported publication type? What about, say, pandoc md or odt?
>
> Thank you thank you thank you!

org-ref has some support to export citations in latex, html, org,
md/pandoc and text. I do not know how good it is, but the framework for
it mostly exists.



I rediscovered this thread recently and found it very helpful.  Hope the necroposting isn't annoying to others.

Using a current org-ref, I was able to  use these hints to make my life quite a bit easier when writing syllabi.  I'm just inserting formatted citations for course texts; this is a bit different from most uses of org-ref. I want the text to be as readable as possible, and to include a link to the resource if it exists online, or to ignore the url field if it doesn't exist.  I did this by lightly modifying ~org-ref-formatted-citation-formats~ and then modifying the function org-ref uses to insert formatted citations:

-----------
(defun org-ref-format-bibtex-entry (entry)
  "Return a formatted citation for the bibtex entry at point.
Formats are from `org-ref-formatted-citation-formats'. The
variable `org-ref-formatted-citation-backend' determines the set
of format strings used."
  (save-excursion
    (bibtex-beginning-of-entry)
    (let* ((formats (cdr (assoc org-ref-formatted-citation-backend  org-ref-formatted-citation-formats)))
  (format-string)
  (ref))
      (if (null entry)
          "!!! No entry found !!!"
        (setq format-string (cdr (or (assoc (downcase (bibtex-completion-get-value "=type=" entry)) formats)
                                     (assoc nil formats))))
        (if (and (string-equal org-ref-formatted-citation-backend "org" )
                 (bibtex-completion-get-value "url" entry))
            (setq format-string
                  (replace-regexp-in-string "${title}" "[[${url}][${title}]]" format-string)))

        (setq ref (s-format format-string 'bibtex-completion-apa-get-value entry))
        (replace-regexp-in-string "\\([.?!]\\)\\." "\\1" ref)))))
---------------

The relevant section is the "if" near hte end of the function:

        (if (and (string-equal org-ref-formatted-citation-backend "org" )
                 (bibtex-completion-get-value "url" entry))
            (setq format-string
                  (replace-regexp-in-string "${title}" "[[${url}][${title}]]" format-string)))

I thought it might possibly be useful for others -- like, it might be nice to use when composing emails etc -- so I figured I'd post it here.  And thanks again esp to John for this tool!


reply via email to

[Prev in Thread] Current Thread [Next in Thread]