From: Matt Price <moptop99@gmail.com>
To: John Kitchin <jkitchin@andrew.cmu.edu>
Cc: Org Mode <emacs-orgmode@gnu.org>
Subject: org-ref: conditionally add url to formatted citation
Date: Fri, 30 Aug 2019 15:12:54 -0400 [thread overview]
Message-ID: <CAN_Dec80CU8_0xSddu8e=Ms4=SmWfsmSHHV-HF7Wiy34tumC-w@mail.gmail.com> (raw)
In-Reply-To: <m2r34fovfp.fsf@Johns-MacBook-Air.local>
[-- Attachment #1: Type: text/plain, Size: 6242 bytes --]
On Sat, Jan 7, 2017 at 8:23 AM John Kitchin <jkitchin@andrew.cmu.edu> 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!
[-- Attachment #2: Type: text/html, Size: 8515 bytes --]
prev parent reply other threads:[~2019-08-30 19:13 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-01-06 14:27 org-ref: citation types (insert full citation); bib style; bib scope Matt Price
2017-01-06 15:26 ` John Kitchin
2017-01-06 16:05 ` Matt Price
2017-01-06 16:10 ` John Kitchin
2017-01-06 20:42 ` John Kitchin
2017-01-07 3:13 ` Matt Price
2017-01-07 13:23 ` John Kitchin
2019-08-30 19:12 ` Matt Price [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAN_Dec80CU8_0xSddu8e=Ms4=SmWfsmSHHV-HF7Wiy34tumC-w@mail.gmail.com' \
--to=moptop99@gmail.com \
--cc=emacs-orgmode@gnu.org \
--cc=jkitchin@andrew.cmu.edu \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.