emacsorphanage / ox-pandoc

Another org-mode exporter via pandoc.
GNU General Public License v2.0
47 stars 13 forks source link

Org-ref citation links are not supported #9

Open lazzalazza opened 2 years ago

lazzalazza commented 2 years ago

In Spacemacs, using Org 9.5 I'm experiencing problems exporting via pandoc and csl to the docx format. Given this MWE (test.org):

`

+title: Sample

+bibliography: test.bib

[fn:1] [[cite:&deroberto1898a]] ` and this bibliography (test.bib):

@Book{deroberto1898a, author = {{De Roberto}, Federico}, title = {Leopardi}, date = 1898, publisher = {Treves}, location = {Milano},

I get this result:

prova.docx

As you see, the cite: link is treated as a simple link and not processed as it should.

I work with Spacemacs, this is the part of my .spacemacs file where set the bibliography and the cite-export-processors.

(setq bibtex-completion-bibliography '("~/Dropbox/Standard/Bibliografia/bibliografia_generale.bib") org-cite-global-bibliography '("~/Dropbox/Standard/Bibliografia/bibliografia_generale.bib") reftex-default-bibliography '("~/Dropbox/Standard/Bibliografia/bibliografia_generale.bib")) (require 'oc-csl) (require 'oc-biblatex) (setenv "LC_ALL" "it_IT") (setq org-cite-export-processors '((beamer biblatex) (latex biblatex) (t csl "~/Dropbox/Standard/Modelli/andrea.csl"))) Maybe I should somehow specify in the file that I want to export using csl? Thank in advance for any help.

a-fent commented 2 years ago

Thank you. Without testing, one thing jumps out at me: your citation syntax looks wrong. Org Mode (9.5) citations have only single square brackets [cite:@foo_1999] whereas your document has double, which is indeed a standard Org Mode link.

Are you perhaps using org-ref? If so you should be using it for resolving citations, not #+CITE_EXPORT etc. They are separate systems for handling citations.

Also, if you want citations in footnotes, I would suggest using a style that formats in-text citations as footnotes, rather than creating the footnotes yourself.

lazzalazza commented 2 years ago

Hi! I have simply used the org-ref-insert-cite-link standard output, which seems to insert by default two square brackets and not a single one… Anyhow, if I use a single bracket the citation is not exported either. As you see, I haven’t been using #+cite_export in the example, but I have configured the org-cite-export-processors variable. If I remember correctly, the old org-ref-default-bibliography has recently been changed into org-cite-global-bibliography, so I think I am using org-ref to handle the citation: but of course I am no expert and I could be wrong!

a-fent commented 2 years ago

OK, that is where the problem has arisen. org-cite (built in in Org 9.5) is different from org-ref (a separate Emacs package that until recently was the main option for citations in Org), with different citation syntax and different processing. It is confusing and unfortunate but @jkitchin , the author of org-ref has reasonable reasons for maintaining his separate system for citations (and more).

The solution: use either org-cite or org-ref, but don't mix them. If you're working with CSL and .docx and don't need advanced support for cross-references, org-cite should be fine.

For org-cite, the command to insert a citation is org-cite-insert on C-c C-x @ or you can use (as I do) something like bibtex-completion to search for references to cite.

Org-ref won't work with ox-pandoc without some further configuration to resolve cite: links into a form Pandoc can understand. This could be something for the ox-pandoc documentation but it's not something I have a high priority for.

jkitchin commented 2 years ago

@a-fent is correct, you should not mix org-ref and org-cite. They are separate and independent systems.

If you choose to use org-ref, you can find an example file to make a docx here https://github.com/jkitchin/org-ref/blob/master/examples/basic-csl.org#ms-word-docx-via-pandoc. You do have to use a pre-processing hook function to convert the citations via citeproc before the pandoc export.

It would likely be straightforward to have the preprocessor transform each link to a pandoc format if it was desirable to have pandoc do the citation processing instead of citeproc. It would still be a preprocessing step, but it would allow pandoc to do its work.

lazzalazza commented 2 years ago

@a-fent @jkitchin Thank you so much! Due to some personal issues I haven't been able to work much in the last months: I am now exploring the solution that @jkitchin has suggested. I would like to keep on using his exellent org-ref package, also because I need cross-referencing to work. As I have told you, I'm a Spacemacs user and I have inserted these lines in the user-config section of my dotfile:

(require 'org-ref-refproc)
(let ((org-export-before-parsing-hook '(org-ref-cite-natmove ;; do this first
                    org-ref-csl-preprocess-buffer
                    org-ref-refproc)))
  (org-open-file (plist-get (org-pandoc-export-to-docx) 'output-file) 'system))

Unfortunately this doesn't seem to work. I get this error at startup:

(Spacemacs) Error in dotspacemacs/user-config: This command must be run on an org-mode buffer`

When I then try to export, org-ref-refproc is still not active. I wouldn't like this conversation to become Spacemacs-specific, but any advice would be crucial!

jkitchin commented 2 years ago

that code should not go in your init file. It should go in a src block in the org file you are trying to export. That code will try to export your init file, which is not what you want.

lazzalazza commented 2 years ago

@jkitchin Ooops! I see... This is what I have done now:

#+title: Sample

* First paragraph
 Text text text.
 [[cite:&deroberto1898a]] 

#+begin_src emacs-lisp :exports none
  (require 'org-ref-refproc)
  (let ((org-export-before-parsing-hook '(org-ref-cite-natmove
                                                    org-ref-csl-preprocess-buffer
                                                    org-ref-refproc)))
     (org-open-file (plist-get (org-pandoc-export-to-docx) 'output-file) 'system))
#+end_src

This actually produces a preprocessed output. Doing this every time one wants to export a file might seem a little overcomplicated, though... Would a once-for-all solution be thinkable?

PS. This is not directly related to the issue, but if I specify the location of my csl custom style (or that of any other style) like so:

#+csl-style: /Users/test/Dropbox/Standard/Modelli/andrea.csl

I get an error: "Wrong type argument: listp, "[NO BIBLIOGRAPHY LAYOUT IN CSL STYLE]". If you think it's the case, I might open a new issue... Thanks a lot!

jkitchin commented 2 years ago

The only once-for-all solutions are to wrap that in your function you can call, e.g. M-x my-export that runs those, or define your own exporter in your init file so you can do C-c C-e zz or something. See org-ref-export.el for details on how that is done.

I am not sure about the error you mention, it might be a csl error. org-ref wouldn't report that by itself.

mgcyung commented 2 years ago

Maybe you can try `

+PANDOC_OPTIONS: bibliography:test.bib

`