emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: tsd@tsdye.com (Thomas S. Dye)
To: Nicolas Goaziou <n.goaziou@gmail.com>
Cc: nicholas.dokos@hp.com, emacs-orgmode@gnu.org
Subject: Re: biblatex citation
Date: Sat, 27 Aug 2011 11:12:48 -1000	[thread overview]
Message-ID: <m1aaau4kz3.fsf@tsdye.com> (raw)
In-Reply-To: <87ei07mbx9.fsf@gmail.com> (Nicolas Goaziou's message of "Sat, 27 Aug 2011 11:38:42 +0200")

Nicolas Goaziou <n.goaziou@gmail.com> writes:

> Hello,
>
> Nick Dokos <nicholas.dokos@hp.com> writes:
>
>> Nick Dokos <nicholas.dokos@hp.com> wrote:
>>
>>> Thomas S. Dye <tsd@tsdye.com> wrote:
>>> 
>>> > Aloha all,
>>> > 
>>> > This biblatex construct:
>>> > \parencites[234]{kirch85}[185]{kirch84}
>>> > 
>>> > is output like this:
>>> > \parencites[234]{kirch85}[185]\{kirch84\}
>>> > 
>>> > The biblatex syntax is unusual (to me) in LaTeX.  I wonder if it is
>>> > possible to support it in Org-mode?
>>> > 
>>> 
>>> So is the syntax \parencites followed by an arbitrary number of pairs
>>> [page#]{ref}? 
>>> 
>>> latex export knows to do the right thing for a command with optional and
>>> mandatory arguments: \command[opt]{mand} is properly protected, but the
>>> above case stretches it to beyond its breaking point.
>>> 
>>> After a quick look, all I could come up with as a possibility was yet
>>> another special case in org-export-latex-preprocess - and one more scan
>>> of the whole file to add to the many (roughly 20!) that this function
>>> does.
>>> 
>>
>> Well, maybe another scan is not necessary: the existing command handler
>> could perhaps be extended to deal with this case. But the regexp in
>> that case is horrendous enough as it is - if it gets any hairier, it
>> will become Medusa: mortals looking at it will drop dead.
>> However it might be that a loop that eats multiple pairs of [...]{...}
>> occurrences would be simple enough to implement.
>
> Note that Org core already recognizes such latex commands, as confirmed
> by using `org-inside-latex-macro-p' anywhere inside it.
>
> In this case, it's just an exporter failure.
>
> Regards,

Aloha Nick and Nicolas,

Thanks for analyzing this problem.  

Yes, the syntax of \parencites (and various other "multicite" commands
in biblatex) allows an arbitrary number of [<pre>][<post>]{<key>}
triplets.  I haven't seen this before in LaTeX.  The biblatex author,
Philipp Lehman, came up with this to solve a long-standing problem in
BibTeX citations where it was possible to cite multiple works in one
citation, but impossible then to indicate page numbers, etc., for
individual works.

The solutions you've pointed out, a pre-process hook or correcting an
exporter failure, both seem beyond me to implement and/or maintain.  In
the meantime, I came up with a workaround that seems to work.  It looks
like this in the Org-mode buffer:

\parencites[[multicite:<key>][<post>;<pre>]][[multicite:<key>][<post>;<pre>]]

It is based on this custom link, which integrates with ebib:

#+source: define-biblatex-multicite-link
#+begin_src emacs-lisp :results silent :exports none
  (org-add-link-type 
   "multicite" 'ebib
   (lambda (path desc format)
     (cond
      ((eq format 'html)
       (format "(<cite>%s</cite>)" path))
      ((eq format 'latex)
       (if (or (not desc) (equal 0 (search "multicite:" desc)))
           (format "{%s}" path)
         (format "[%s][%s]{%s}"
                 (cadr (split-string desc ";"))
                 (car (split-string desc ";"))  path))))))
  
#+end_src

All the best,
Tom

-- 
Thomas S. Dye
http://www.tsdye.com

      reply	other threads:[~2011-08-27 21:12 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-27  7:10 biblatex citation Thomas S. Dye
2011-08-27  8:16 ` Nick Dokos
2011-08-27  8:52   ` Nick Dokos
2011-08-27  9:38     ` Nicolas Goaziou
2011-08-27 21:12       ` Thomas S. Dye [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=m1aaau4kz3.fsf@tsdye.com \
    --to=tsd@tsdye.com \
    --cc=emacs-orgmode@gnu.org \
    --cc=n.goaziou@gmail.com \
    --cc=nicholas.dokos@hp.com \
    /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).