Caricamento del file bibtex nel file in modalità org


15

Sto cercando di usare org-modeper fare quasi tutto. Nella mia attività di scrittura scientifica, vorrei disegnare un intero documento in un .orgfile e quindi esportarlo in LaTeX. Non voglio caricare il .bibfile bibtex in init.elquanto potrei averne di più. Per ora, l'ho aggiunto all'inizio del mio .orgfile:

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

Ma devo eseguirlo manualmente ogni volta. C'è un modo per renderlo automatico? L'ottimale sarebbe avere una direttiva all'inizio di ogni .orgfile che dice emacs: "ok, ora dovresti caricare questo .bib file". Qualche suggerimento? Grazie.


Una variabile locale di file non farebbe il trucco? Ad esempioM-x add-file-local-variable
olaf b

Grazie per la risposta. Sfortunatamente, non è quello che sto cercando. In questo modo, ogni volta che carico il file devo digitare il comando. Qualcosa di lile #+STARTUP: do this.
petrux,

Quale comando? Devi solo impostare la variabile locale del file una volta.
olaf b,

Avevi ragione! Usando add-file-local-variable-prop-lineI potrei generare la # -*- reftex-default-bibliography: ("./references.bib"); -*-riga all'inizio del file.
petrux,

Risposte:


19

L'aggiunta di una riga come la seguente è sufficiente per dire org-modequale .bibfile consultare:

#+BIBLIOGRAPHY: refs plain

refsè il nome del file BibTeX ( .bibestensione omessa), ed plainè il file bibliographystyle.

È quindi possibile chiamare org-reftex-citation(associato per C-c C-x [impostazione predefinita) per inserire riferimenti.

Dalla documentazione:

(org-reftex-citation)

Utilizzare reftex-citationper inserire una citazione nel buffer. Questo cerca una linea come

#+BIBLIOGRAPHY: foo plain option:-d

e ne deriva che foo.bibè il file bibliografico rilevante per questo documento. Quindi installa l'ambiente necessario affinché RefTeX funzioni in questo buffer e chiama reftex-citationper inserire una citazione nel buffer.

L'esportazione di tali citazioni su LaTeX e HTML è gestita dal pacchetto fornito ox-bibtexda Taru Karttunen.

Come suggerisce l'ultima frase, dovrai aggiungere

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

nel file init per assicurarsi che i riferimenti vengano esportati correttamente in LaTeX. Quando ho impostato questo per me stesso, ho scoperto che dovevo anche personalizzare org-latex-pdf-processper far funzionare le esportazioni PDF:

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

appendice

Se non si desidera utilizzare l'associazione predefinita per org-reftex-citation, è possibile impostare un'associazione chiave personalizzata per essa. Ad esempio, quanto segue si lega all'associazione org-reftex-citationpredefinita per reftex-citation:

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

Grazie per la risposta. Non lo sto contrassegnando come corretto solo perché vedo l'uso # -*- reftex-default-bibliography: ("./references.bib"); -*-dell'equivalente, con il vantaggio di poter usare la solita associazione di tasti RefTeX per aggiungere un nuovo riferimento. Mi sto perdendo qualcosa? Modificheremo la risposta per renderla più completa per ogni futuro lettore? Grazie.
petrux,

@petrux Puoi semplicemente associarti org-reftex-citationalla stessa sequenza di tasti reftex-citationnormalmente utilizzata ... Vedi gli aggiornamenti alla mia risposta.
È il

Presumo che non ci sia modo di usare più file bibliografici con org-reftex-citation? Se aggiungo un secondo #+BIBLIOGRAPHY, il primo sembra essere ignorato.
Brian Z

@BrianZ Non credo che il caso d'uso che descrivi sia supportato e pronto all'uso. Ma forse qualcuno qui ha una soluzione fatta a mano? Se fossi in te, farei una nuova domanda (indicando questa discussione come riferimento); sembra sicuramente qualcosa che potrebbe interessare anche ad altri.
itsjeyd

1
La valutazione (setq reftex-default-bibliography '("./a.bib" "./b.bib"))sembra fare il trucco. Lo stesso # -*- reftex-default-bibliography: ("./refs1.bib" "./refs2.bib"); -*-vale, sebbene generi un avvertimento che questa variabile non dovrebbe essere definita localmente.
Brian Z,

4

Sembra che ox-bibtex non sia incluso nell'ultimo pacchetto organizzativo (8.2.10-34-gc41bbc-elpa). Quindi l'ho cercato online e messo nella directory / org / lisp / una volta scaricato. Ma ho riscontrato il seguente errore quando ho provato a fare un'esportazione con bibtex.

La definizione della funzione del simbolo è nulla: org-element-insert-before

Quindi controllo il file 'org-element.el', ovviamente non esiste una tale funzione predefinita. Ma perché non c'è? Il documento API online di org-element lo menzionava una volta .

Quindi suppongo che al momento sia impossibile usare RefTeX come descrive il documento a meno che tu non sia disposto a passare alla versione beta o a una precedente. Vedere

Qui condivido il mio modo di utilizzare la versione beta

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

  2. Spostare la cartella in ~/.emacs.d/e denominarla comeorg-beta

  3. Modifica load-path, lascia che la versione beta offra un'altra versione e includi la directory di contribuzione dell'utente

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

(facoltativo) puoi usare il comando make per compilare il file sorgente e creare il documento

  1. Adesso puoi (require 'ox-bibtex). Preferisco scrivere così:(eval-after-load 'org (require 'ox-bibtex))

  2. Per generare l'elenco di riferimento nel posto giusto, metti qualcosa di simile #+BIBLIOGRAPHY: your_bib_lib_name plain option:-dalla fine del file org. Altre opzioni si prega di fare riferimento al documento di aiuto inox-bibtex.el

  3. Per far funzionare correttamente la parte di esportazione HTML, potrebbe essere necessario l'ultimo bibtex2html, ovvero 1,98. Per crearlo dal sorgente, scaricalo da github e segui le istruzioni nel documento di aiuto "README".

Se stai usando Windows come me, usa Cygwin64 con tutti i pacchetti di sviluppo. Usando Cygwin64, cd nella directory di bibtex2html e digitare ./configure, attendere finish, quindi digitare make, wait finish. Ora in questa directory, otterrai bib2bib.exe, bibtex2html.exee aux2bib. Copiali in qualche directory nel tuo ambiente var PATH. Provalo digitando bibtex2htmlil cmd.

Devo fare il lavoro sopra perché uso texlive2014. Se sei un utente miktek, bibtex2html 1.95 potrebbe funzionare bene, che può essere facilmente installato con un programma di installazione di Windows.

  1. Per far funzionare correttamente la parte di esportazione PDF, utilizzare il codice seguente per inizializzare la modalità organizzazione:

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

È la parte 'bibtex' che fa il lavoro. Uso il comando shell escape per il pacchetto coniato di lattice.


Mi sembra che la tua risposta sia collegata solo alla domanda, nel senso che riguarda anche la modalità org e ox-bibtex. Poiché il problema è diverso, è consigliabile aprire una domanda separata in cui altri possano fornire risposte mirate.
paprika,

1
Voglio solo fare un complemento alla risposta di itsjeyd. itsjeyd suggerisce di seguire il documento di citazione di org-reftex. L'ho fatto e ho avuto il problema sopra. Nel caso in cui altre persone si imbattano nella stessa situazione, ho condiviso la mia indagine qui.
Empenguin

IIRC il pacchetto ELPA di org-mode non include i file sotto contrib/lisp, che include ox-bibtex. Quindi dovresti installare la modalità org dal sorgente incluso contrib/lisp o semplicemente copiarlo ox-bibtex.elsul tuo percorso di caricamento.
paprika,

1
Sì. Clono la versione beta di org. Ora funziona benissimo.
empenguin,

5
@paprika Non è necessario installare org-modedal sorgente per ottenere la contribdirectory. Come spiegato qui , Org ha il suo archivio ELPA. Tutto quello che devi fare è aggiungere quell'archivio a package-archives; è quindi possibile installare (e aggiornare) org-plus-contributilizzando il gestore pacchetti. Naturalmente, questo non vuol dire che l'approccio che suggerisci non funziona; Volevo solo menzionare (per chiunque si imbatta in questa discussione) che esiste un altro approccio che non comporta il sovraccarico di dover aggiornare org-modeseparatamente git.
giovedì
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.