Lädt die bibtex-Datei in die org-mode-Datei


15

Ich versuche org-modefast alles zu machen. In meiner wissenschaftlichen Schreibtätigkeit möchte ich eine ganze Arbeit in einer .orgDatei skizzieren und dann in LaTeX exportieren. Ich möchte die .bibbibtex-Datei nicht in die laden, init.elda ich mehrere haben könnte. Im Moment habe ich dies am Anfang meiner .orgDatei hinzugefügt :

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

Aber ich muss es jedes Mal manuell ausführen. Gibt es eine Möglichkeit, es automatisch zu machen? Das Optimum wäre eine Direktive am Anfang jeder .orgDatei, die emacs sagt: "ok, jetzt solltest du diese .bib Datei laden ". Irgendein Hinweis? Vielen Dank.


Würde nicht eine lokale Variable der Datei den Trick tun? ZBM-x add-file-local-variable
olaf b

Danke für die Antwort. Leider ist es nicht das, wonach ich suche. Auf diese Weise muss ich jedes Mal, wenn ich die Datei lade, den Befehl eingeben. Etwas Kleines #+STARTUP: do this.
Petrux

Welcher Befehl? Sie müssen die lokale Variable der Datei nur einmal festlegen.
olaf b

Du hattest Recht! Mit der add-file-local-variable-prop-linekönnte ich die # -*- reftex-default-bibliography: ("./references.bib"); -*-Zeile am Anfang der Datei erzeugen .
Petrux

Antworten:


19

Das Hinzufügen einer Zeile wie der folgenden reicht aus, um anzugeben, org-modewelche .bibDatei abgerufen werden soll:

#+BIBLIOGRAPHY: refs plain

refsist der Name der BibTeX-Datei ( .bibErweiterung weggelassen), und plainist die bibliographystyle.

Sie können dann anrufen org-reftex-citation( C-c C-x [standardmäßig gebunden ), um Referenzen einzufügen.

Aus der Dokumentation:

(org-reftex-citation)

Verwenden Sie reftex-citation, um ein Zitat in den Puffer einzufügen. Das sieht nach einer Zeile aus wie

#+BIBLIOGRAPHY: foo plain option:-d

und leitet daraus ab, dass foo.bibes sich um die für dieses Dokument relevante Bibliographiedatei handelt. Anschließend wird die erforderliche Umgebung installiert, damit RefTeX in diesem Puffer funktioniert, und reftex-citationes wird aufgerufen, ein Zitat in den Puffer einzufügen.

Der Export solcher Zitate nach LaTeX und HTML wird durch das ox-bibtexvon Taru Karttunen bereitgestellte Paket abgewickelt .

Wie der letzte Satz andeutet, müssen Sie hinzufügen

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

in Ihre Init-Datei, um sicherzustellen, dass die Referenzen ordnungsgemäß nach LaTeX exportiert werden. Als ich dies für mich selbst einrichtete, stellte ich fest, dass ich auch Anpassungen org-latex-pdf-processvornehmen musste, damit PDF-Exporte funktionieren:

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

Nachtrag

Wenn Sie die Standardbindung für nicht verwenden möchten org-reftex-citation, können Sie eine benutzerdefinierte Schlüsselbindung dafür einrichten. Beispiel: Folgendes wird an org-reftex-citationdie Standardbindung für gebunden reftex-citation:

(define-key org-mode-map (kbd "C-c [") 'org-reftex-citation)

Danke für die Antwort. Ich markiere es nicht als korrekt, nur weil ich die Verwendung von # -*- reftex-default-bibliography: ("./references.bib"); -*-Äquivalent sehe , mit dem Vorteil, dass ich die übliche RefTeX-Schlüsselbindung verwenden kann, um eine neue Referenz hinzuzufügen. Vermisse ich etwas? Sollen wir die Antwort bearbeiten, um sie für zukünftige Leser vollständiger zu machen? Vielen Dank.
Petrux

@petrux Sie können sich einfach an org-reftex-citationdieselbe Tastenfolge binden , die reftex-citationnormalerweise verwendet wird ... Siehe die Aktualisierungen zu meiner Antwort.
Es ist der

Ich nehme an, es gibt keine Möglichkeit, mehrere Bibliografie-Dateien mit zu verwenden org-reftex-citation. Wenn ich eine Sekunde hinzufüge #+BIBLIOGRAPHY, scheint die erste ignoriert zu werden.
Brian Z

@ BrianZ Ich glaube nicht, dass der von Ihnen beschriebene Anwendungsfall sofort unterstützt wird. Aber vielleicht hat hier jemand eine handgerollte Lösung? Wenn ich Sie wäre, würde ich eine neue Frage stellen (auf diesen Thread als Referenz verweisen); Es klingt definitiv nach etwas, das auch andere interessieren könnte.
Es ist der

1
Auswertung (setq reftex-default-bibliography '("./a.bib" "./b.bib"))scheint den Trick zu tun. # -*- reftex-default-bibliography: ("./refs1.bib" "./refs2.bib"); -*-Dies gilt auch , obwohl eine Warnung ausgegeben wird, dass diese Variable nicht lokal definiert werden sollte.
Brian Z

4

Es scheint, dass ox-bibtex nicht im neuesten org-Paket enthalten ist (8.2.10-34-gc41bbc-elpa). Also suchte ich es online und legte es in das Verzeichnis / org / lisp /, sobald es heruntergeladen war. Aber ich bin auf folgenden Fehler gestoßen, als ich versucht habe, einen Export mit Bibtex durchzuführen.

Die Funktionsdefinition des Symbols ist ungültig: org-element-insert-before

Dann überprüfe ich die Datei 'org-element.el', natürlich ist keine solche Funktion vordefiniert. Aber warum ist es nicht da? Das Online-API-Dokument von org-element hat es einmal erwähnt .

Ich vermute, dass es derzeit unmöglich ist, RefTeX so zu verwenden, wie es im Dokument beschrieben wird, es sei denn, Sie sind bereit, auf die Betaversion oder eine ältere Version zu wechseln. Sehen

Hier teile ich meinen Weg, um die Beta-Version zu nutzen

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

  2. Verschieben Sie den Ordner in ~/.emacs.d/und benennen Sie ihn alsorg-beta

  3. Ändern Sie load-path, lassen Sie die Betaversion eine andere Version spiegeln und fügen Sie das Verzeichnis hinzu, in das der Benutzer Beiträge eingibt

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

(Optional) Mit dem Befehl make können Sie die Quelldatei kompilieren und das Dokument erstellen

  1. Jetzt kannst du (require 'ox-bibtex). Ich schreibe lieber so:(eval-after-load 'org (require 'ox-bibtex))

  2. Um eine Referenzliste an der richtigen Stelle zu #+BIBLIOGRAPHY: your_bib_lib_name plain option:-derstellen , setzen Sie etwas an das Ende der Organisationsdatei. Weitere Optionen finden Sie im Hilfedokument inox-bibtex.el

  3. Damit der HTML-Export richtig funktioniert, benötigen Sie möglicherweise das neueste bibtex2html, also 1,98. Um es aus dem Quellcode zu erstellen, laden Sie es von github herunter und folgen Sie den Anweisungen im Hilfedokument 'README'.

Wenn Sie Windows wie ich verwenden, verwenden Sie Cygwin64 mit allen Entwicklungspaketen. Wechseln Sie mit Cygwin64 in das Verzeichnis von bibtex2html und geben Sie ./configure, wait finish und dann make, wait finish ein. Jetzt in dieser Richtung werden Sie bekommen bib2bib.exe, bibtex2html.exeund aux2bib. Kopieren Sie sie in ein Verzeichnis in Ihrer Umgebung PATH. Testen Sie es, indem Sie bibtex2htmlden Befehl "cmd" eingeben .

Ich muss den obigen Job machen, weil ich texlive2014 benutze. Wenn Sie ein Miktek-Benutzer sind, funktioniert bibtex2html 1.95 möglicherweise nur gut, was mit einem Windows-Installationsprogramm einfach installiert werden kann.

  1. Verwenden Sie den folgenden Code zum Initialisieren Ihres Organisationsmodus, damit der PDF-Exportteil ordnungsgemäß funktioniert:

    (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"))
    

Es ist der 'bibtex'-Teil, der die Arbeit erledigt. Ich benutze den Shell-Escape-Befehl für eine geprägte Latexpackung.


Mir scheint, dass Ihre Antwort nur in dem Sinne mit der Frage zusammenhängt, dass es sich auch um org-mode und ox-bibtex handelt. Da Ihr Problem anders ist, ist es am besten, wenn Sie eine separate Frage öffnen, auf die andere gezielt antworten können.
Paprika

1
Ich möchte nur die Antwort von itsjeyd ergänzen. Es wird empfohlen, das Dokument der org-reftex-Zitierung zu befolgen. Ich habe es getan und das obige Problem bekommen. Für den Fall, dass andere Menschen in die gleiche Situation geraten, habe ich meine Ermittlungen hier geteilt.
Empenguin

IIRC Das ELPA-Paket von org-mode enthält nicht die Dateien, unter contrib/lispdenen ox-bibtex enthalten ist. So würden Sie org-Modus von der Quelle installieren müssen einschließlich contrib/lisp oder kopieren Sie einfach ox-bibtex.elauf Ihren Last-Pfad.
Paprika

1
Ja. Ich habe die Beta-Version von org geklont. Jetzt funktioniert es gut.
Empenguin

5
@paprika Es ist nicht erforderlich, org-modevon der Quelle zu installieren , um das contribVerzeichnis abzurufen . Wie hier erklärt , hat Org ein eigenes ELPA-Archiv. Alles, was Sie tun müssen, ist das Archiv hinzuzufügen package-archives; Sie können dann org-plus-contribmithilfe des Paketmanagers installieren (und aktualisieren) . Dies bedeutet natürlich nicht, dass der von Ihnen vorgeschlagene Ansatz nicht funktioniert. Ich wollte nur erwähnen (für jeden anderen, der auf diese Diskussion stößt), dass es einen anderen Ansatz gibt, der nicht den Overhead mit sich bringt, org-modeseparat aktualisiert zu werden git.
itsjeyd
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.