emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* biblatex citation
@ 2011-08-27  7:10 Thomas S. Dye
  2011-08-27  8:16 ` Nick Dokos
  0 siblings, 1 reply; 5+ messages in thread
From: Thomas S. Dye @ 2011-08-27  7:10 UTC (permalink / raw)
  To: Org-mode

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?

All the best,
Tom
-- 
Thomas S. Dye
http://www.tsdye.com

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: biblatex citation
  2011-08-27  7:10 biblatex citation Thomas S. Dye
@ 2011-08-27  8:16 ` Nick Dokos
  2011-08-27  8:52   ` Nick Dokos
  0 siblings, 1 reply; 5+ messages in thread
From: Nick Dokos @ 2011-08-27  8:16 UTC (permalink / raw)
  To: Thomas S. Dye; +Cc: nicholas.dokos, Org-mode

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.

Nick

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: biblatex citation
  2011-08-27  8:16 ` Nick Dokos
@ 2011-08-27  8:52   ` Nick Dokos
  2011-08-27  9:38     ` Nicolas Goaziou
  0 siblings, 1 reply; 5+ messages in thread
From: Nick Dokos @ 2011-08-27  8:52 UTC (permalink / raw)
  To: Thomas S. Dye; +Cc: nicholas.dokos, emacs-orgmode

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.

My preferred solution would be for \parencites to change its syntax :-)
If it were implemented like this e.g.

\parencites{234|kirch85|185|kirch84}

it would be easier to type *and* org would be able to handle it
out of the box: a win-win for everybody except for the parencites
author.

Nick

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: biblatex citation
  2011-08-27  8:52   ` Nick Dokos
@ 2011-08-27  9:38     ` Nicolas Goaziou
  2011-08-27 21:12       ` Thomas S. Dye
  0 siblings, 1 reply; 5+ messages in thread
From: Nicolas Goaziou @ 2011-08-27  9:38 UTC (permalink / raw)
  To: nicholas.dokos; +Cc: emacs-orgmode

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,

-- 
Nicolas Goaziou

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: biblatex citation
  2011-08-27  9:38     ` Nicolas Goaziou
@ 2011-08-27 21:12       ` Thomas S. Dye
  0 siblings, 0 replies; 5+ messages in thread
From: Thomas S. Dye @ 2011-08-27 21:12 UTC (permalink / raw)
  To: Nicolas Goaziou; +Cc: nicholas.dokos, emacs-orgmode

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

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2011-08-27 21:12 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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

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).