Chargement du fichier bibtex dans un fichier en mode org

16

J'essaye d'utiliser org-modepour faire presque tout. Dans mon activité d'écriture scientifique, je souhaite esquisser un document entier dans un .orgfichier puis exporter dans LaTeX. Je ne veux pas charger le .bibfichier bibtex dans le init.elcar je pourrais en avoir plusieurs. Pour l'instant, j'ai ajouté ceci en tête de mon .orgdossier:

#+BEGIN_SRC elisp
(setq reftex-default-bibliography '("./references.bib"))
#+END_SRC

Mais je dois l'exécuter manuellement à chaque fois. Existe-t-il un moyen de le rendre automatique? L'optimal serait d'avoir une directive au début de chaque .orgfichier disant emacs: "ok, maintenant vous devez charger ce .bib fichier". Un indice? Merci.

Petrux
la source
Une variable locale de fichier ne ferait-elle pas l'affaire? Par exempleM-x add-file-local-variable
olaf b
Merci pour votre réponse. Malheureusement, ce n'est pas ce que je recherche. De cette façon, chaque fois que je charge le fichier, je dois taper la commande. Quelque chose de léger #+STARTUP: do this.
petrux
Quelle commande? Vous ne devez définir la variable locale du fichier qu'une seule fois.
olaf b
Tu avais raison! En utilisant le add-file-local-variable-prop-lineI, je pouvais générer la # -*- reftex-default-bibliography: ("./references.bib"); -*-ligne au début du fichier.
petrux

Réponses:

19

L'ajout d'une ligne comme celle-ci suffit pour dire org-modequel .bibfichier consulter:

#+BIBLIOGRAPHY: refs plain

refsest le nom du fichier BibTeX ( .bibextension omise), et plainest le bibliographystyle.

Vous pouvez ensuite appeler org-reftex-citation(lié C-c C-x [par défaut) pour insérer des références.

De la documentation:

(org-reftex-citation)

Utilisez reftex-citationpour insérer une citation dans le tampon. Cela cherche une ligne comme

#+BIBLIOGRAPHY: foo plain option:-d

et en dérive c'est foo.bible fichier bibliographique pertinent pour ce document. Il installe ensuite l'environnement nécessaire pour que RefTeX fonctionne dans ce tampon et appelle reftex-citationpour insérer une citation dans le tampon.

L'exportation de ces citations vers LaTeX et HTML est gérée par le package fourni ox-bibtexpar Taru Karttunen.

Comme le suggère la dernière phrase, vous devrez ajouter

(require 'org)
(require 'ox-bibtex)

dans votre fichier init pour vous assurer que les références sont correctement exportées vers LaTeX. Lorsque j'ai configuré cela pour moi-même, j'ai constaté que je devais également personnaliser org-latex-pdf-processpour que les exportations PDF fonctionnent:

(setq org-latex-pdf-process '("texi2dvi -p -b -V %f"))

Addenda

Si vous ne souhaitez pas utiliser la liaison par défaut pour org-reftex-citation, vous pouvez configurer une liaison de clé personnalisée pour celle-ci. Par exemple, ce qui suit se lie org-reftex-citationà la liaison par défaut pour reftex-citation:

(define-key org-mode-map (kbd "C-c [") 'org-reftex-citation)
itsjeyd
la source
Merci d'avoir répondu. Je ne le marque pas comme correct juste parce que je vois l'utilisation d'un # -*- reftex-default-bibliography: ("./references.bib"); -*-équivalent, avec l'avantage que je peux utiliser la liaison de clé RefTeX habituelle pour ajouter une nouvelle référence. Suis-je en train de manquer quelque chose? Faut-il éditer la réponse afin de la rendre plus complète pour tout futur lecteur? Merci.
petrux
@petrux Vous pouvez simplement vous lier org-reftex-citationà la même séquence de touches reftex-citationnormalement utilisée ... Voir les mises à jour de ma réponse.
itsjeyd
Je suppose qu'il n'y a aucun moyen d'utiliser plusieurs fichiers de bibliographie avec org-reftex-citation? Si j'ajoute une seconde #+BIBLIOGRAPHY, alors la première semble être ignorée.
Brian Z
@BrianZ Je ne pense pas que le cas d'utilisation que vous décrivez soit pris en charge immédiatement. Mais peut-être que quelqu'un ici a une solution roulée à la main? Si j'étais vous, je poserais une nouvelle question (en indiquant ce fil pour référence); cela ressemble définitivement à quelque chose qui pourrait intéresser d'autres personnes.
itsjeyd
1
L'évaluation (setq reftex-default-bibliography '("./a.bib" "./b.bib"))semble faire l'affaire. Il en va de # -*- reftex-default-bibliography: ("./refs1.bib" "./refs2.bib"); -*-même, bien qu'il lance un avertissement que cette variable ne doit pas être définie localement.
Brian Z
4

Il semble que ox-bibtex ne soit pas inclus dans le dernier package org (8.2.10-34-gc41bbc-elpa). Je l'ai donc cherché en ligne et mis dans le répertoire / org / lisp / une fois téléchargé. Mais j'ai rencontré l'erreur suivante en essayant de faire une exportation impliquant du bibtex.

La définition de la fonction du symbole est vide: org-element-insert-before

Ensuite, je vérifie le fichier 'org-element.el', bien sûr il n'y a pas une telle fonction prédéfinie. Mais pourquoi n'y en a-t-il pas? Le document API en ligne de org-element l'a mentionné une fois .

Donc, je suppose qu'il est actuellement impossible d'utiliser RefTeX comme le décrit le document, sauf si vous êtes prêt à passer à la version bêta ou à une version plus ancienne. Voir

Ici, je partage ma façon d'utiliser la version bêta

  1. git clone git://orgmode.org/org-mode.git

  2. Déplacez le dossier vers ~/.emacs.d/et nommez-leorg-beta

  3. Modifiez load-path, laissez la version bêta masquer une autre version et incluez le répertoire de contribution de l'utilisateur

    (add-to-list 'load-path (expand-file-name "org-beta\\lisp" user-emacs-directory))

    (add-to-list 'load-path (expand-file-name "org-beta\\org-contrib\\lisp" user-emacs-directory))

(facultatif) vous pouvez utiliser la commande make pour compiler le fichier source et créer le document

  1. Maintenant c'est possible (require 'ox-bibtex). Je préfère écrire comme ceci:(eval-after-load 'org (require 'ox-bibtex))

  2. Afin de générer la liste de référence au bon endroit, mettez quelque chose comme #+BIBLIOGRAPHY: your_bib_lib_name plain option:-dà la fin du fichier org. Pour plus d'options, reportez-vous au document d'aide dansox-bibtex.el

  3. Pour que la partie d'exportation HTML fonctionne correctement, vous pouvez avoir besoin de la dernière version de bibtex2html, c'est-à-dire 1.98. Pour le construire à partir de la source, téléchargez-le depuis github et suivez les instructions du document d'aide 'README'.

Si vous utilisez des fenêtres comme moi, utilisez Cygwin64 avec tous les packages devel. En utilisant Cygwin64, cd dans le répertoire de bibtex2html, et tapez ./configure, attendez la fin, puis tapez make, attendez la fin. Maintenant, dans ce répertoire, vous obtiendrez bib2bib.exe, bibtex2html.exeet aux2bib. Copiez-les dans un répertoire de votre environnement var PATH. Testez-le en tapant bibtex2htmlle cmd.

Je dois faire le travail ci-dessus car j'utilise texlive2014. Si vous êtes un utilisateur de miktek, bibtex2html 1.95 peut bien fonctionner, ce qui peut être facilement installé avec un programme d'installation Windows.

  1. Pour que la partie d'exportation PDF fonctionne correctement, utilisez le code suivant pour initialiser votre mode d'organisation:

    (setq org-latex-pdf-process
          '("xelatex -shell-escape -interaction nonstopmode -output-directory %o %f"
            "bibtex %b"
            "xelatex -shell-escape -interaction nonstopmode -output-directory %o %f"
            "xelatex -shell-escape -interaction nonstopmode -output-directory %o %f"))
    

C'est la partie «bibtex» qui fait le travail. J'utilise la commande shell escape pour le paquet fabriqué de latex.

empenguin
la source
Il me semble que votre réponse n'est liée qu'à la question en ce sens qu'elle concerne également le mode org et le bibtex. Étant donné que votre problème est différent, il est préférable d'ouvrir une question distincte où d'autres personnes peuvent fournir des réponses ciblées.
paprika
1
Je veux juste compléter la réponse de itsjeyd. itsjeyd suggère de suivre le document org-reftex-citation. Je l'ai fait et j'ai eu le problème ci-dessus. Au cas où d'autres personnes se retrouveraient dans la même situation, j'ai partagé mon enquête ici.
empenguin
IIRC le package ELPA de mode org ne comprend pas les fichiers sous contrib/lisp, qui comprend ox-bibtex. Vous devez donc installer le mode organisation à partir de la source, y compris contrib/lisp ou simplement copier ox-bibtex.elsur votre chemin de chargement.
paprika
1
Oui. Je clone la version bêta d'org. Maintenant ça marche bien.
empenguin
6
@paprika Il n'est pas nécessaire d'installer à org-modepartir des sources pour obtenir le contribrépertoire. Comme expliqué ici , Org possède ses propres archives ELPA. Tout ce que vous devez faire est d'ajouter cette archive à package-archives; vous pouvez ensuite installer (et mettre à jour) org-plus-contribà l'aide du gestionnaire de packages. Bien sûr, cela ne veut pas dire que l'approche que vous proposez ne fonctionne pas; Je voulais juste mentionner (pour tous ceux qui rencontrent cette discussion) qu'il existe une autre approche qui n'implique pas la surcharge d'avoir à mettre à jour org-modeséparément via git.
itsjeyd