emacs-orgmode
[Top][All Lists]
Advanced

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

Re: [O] biblatex citation


From: Thomas S. Dye
Subject: Re: [O] biblatex citation
Date: Sat, 27 Aug 2011 11:12:48 -1000

Nicolas Goaziou <address@hidden> writes:

> Hello,
>
> Nick Dokos <address@hidden> writes:
>
>> Nick Dokos <address@hidden> wrote:
>>
>>> Thomas S. Dye <address@hidden> 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 via email to

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