emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
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 --]

      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

  List information: https://www.orgmode.org/

* 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 public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).