Memuat file bibtex dalam file mode-org

15

Saya mencoba menggunakannya org-modeuntuk melakukan hampir semua hal. Dalam kegiatan penulisan ilmiah saya, saya ingin membuat sketsa seluruh kertas dalam .orgfile dan kemudian ekspor di LaTeX. Saya tidak ingin memuat .bibfile bibtex di init.elkarena saya bisa memiliki beberapa. Untuk saat ini, saya telah menambahkan ini di kepala .orgfile saya :

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

Tetapi saya harus menjalankannya secara manual setiap waktu. Apakah ada cara untuk membuatnya otomatis? Yang optimal adalah memiliki arahan di awal setiap .orgfile yang mengatakan emacs: "ok, sekarang Anda harus memuat file ini .bib ". Ada petunjuk? Terima kasih.

petrux
sumber
Bukankah variabel file lokal melakukan trik? MisalnyaM-x add-file-local-variable
olaf b
Terima kasih atas balasannya Sayangnya, bukan itu yang saya cari. Dengan cara ini, setiap kali saya memuat file saya harus mengetikkan perintah. Sesuatu yang lile #+STARTUP: do this.
petrux
Perintah yang mana? Anda hanya perlu mengatur variabel file lokal sekali.
olaf b
Kamu benar! Menggunakan add-file-local-variable-prop-lineI bisa menghasilkan # -*- reftex-default-bibliography: ("./references.bib"); -*-baris di awal file.
petrux

Jawaban:

19

Menambahkan baris seperti berikut ini sudah cukup untuk memberi tahu file org-modemana yang .bibakan dikonsultasikan:

#+BIBLIOGRAPHY: refs plain

refsadalah nama file BibTeX ( .bibekstensi dihilangkan), dan plainadalah bibliographystyle.

Anda kemudian dapat memanggil org-reftex-citation(terikat C-c C-x [secara default) untuk memasukkan referensi.

Dari dokumentasi:

(org-reftex-citation)

Gunakan reftex-citationuntuk memasukkan kutipan ke buffer. Ini terlihat seperti garis

#+BIBLIOGRAPHY: foo plain option:-d

dan berasal darinya yang foo.bibmerupakan file bibliografi yang relevan untuk dokumen ini. Kemudian menginstal lingkungan yang diperlukan untuk RefTeX untuk bekerja di buffer ini dan panggilan reftex-citationuntuk memasukkan kutipan ke buffer.

Ekspor kutipan seperti itu ke LaTeX dan HTML ditangani oleh paket kontribusi ox-bibtexoleh Taru Karttunen.

Seperti yang disarankan kalimat terakhir, Anda harus menambahkan

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

ke init-file Anda untuk memastikan referensi diekspor ke LaTeX dengan benar. Ketika saya mengatur ini untuk diri saya sendiri, saya menemukan bahwa saya juga perlu menyesuaikan org-latex-pdf-processuntuk membuat ekspor PDF berfungsi:

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

Tambahan

Jika Anda tidak ingin menggunakan pengikatan default untuk org-reftex-citation, Anda dapat mengatur pengikatan kunci khusus untuk pengikatan tersebut. Misalnya, yang berikut ini mengikat org-reftex-citationpengikatan default untuk reftex-citation:

(define-key org-mode-map (kbd "C-c [") 'org-reftex-citation)
itu hanya
sumber
Terima kasih atas jawabannya. Saya tidak menandainya sebagai benar hanya karena saya melihat penggunaan yang # -*- reftex-default-bibliography: ("./references.bib"); -*-setara, dengan keuntungan bahwa saya dapat menggunakan pengikatan kunci RefTeX yang biasa untuk menambah referensi baru. Apakah saya melewatkan sesuatu? Haruskah kita mengedit jawaban untuk membuatnya lebih lengkap untuk pembaca masa depan? Terima kasih.
petrux
@petrux Anda hanya dapat mengikat org-reftex-citationke urutan kunci yang sama reftex-citationbiasanya menggunakan ... Lihat pembaruan untuk jawaban saya.
itsjeyd
Saya mengerti tidak ada cara untuk menggunakan beberapa file bibliografi org-reftex-citation? Jika saya menambahkan yang kedua #+BIBLIOGRAPHY, maka yang pertama tampaknya diabaikan.
Brian Z
@BrianZ Saya tidak berpikir use case yang Anda gambarkan didukung di luar kotak. Tetapi mungkin seseorang di sini memiliki solusi linting tangan? Jika saya jadi Anda, saya akan mengajukan pertanyaan baru (menunjuk ke utas ini untuk referensi); itu pasti terdengar seperti sesuatu yang orang lain mungkin tertarik juga.
itsjeyd
1
Mengevaluasi (setq reftex-default-bibliography '("./a.bib" "./b.bib"))tampaknya melakukan triknya. Begitu juga # -*- reftex-default-bibliography: ("./refs1.bib" "./refs2.bib"); -*-, meskipun memunculkan peringatan bahwa variabel ini tidak boleh didefinisikan secara lokal.
Brian Z
4

Tampaknya ox-bibtex tidak termasuk dalam paket org terbaru (8.2.10-34-gc41bbc-elpa). Jadi saya mencari secara online dan memasukkannya ke direktori / org / lisp / setelah diunduh. Tapi saya mengalami kesalahan berikut ketika mencoba melakukan ekspor yang melibatkan beberapa bibtex.

Definisi fungsi simbol tidak berlaku: org-element-insert-before

Lalu saya periksa file 'org-element.el', tentu saja tidak ada fungsi yang sudah ditentukan sebelumnya. Tetapi mengapa tidak ada? Dokumen API online dari elemen-org menyebutkannya sekaligus .

Jadi saya kira saat ini tidak mungkin untuk menggunakan RefTeX seperti yang dijelaskan dokumen kecuali Anda bersedia untuk beralih ke versi beta atau yang lebih lama. Lihat

Di sini saya membagikan cara saya untuk menggunakan versi beta

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

  2. Pindahkan folder ke ~/.emacs.d/dan beri nama sebagaiorg-beta

  3. Ubah load-path, biarkan versi beta membayangi versi lain, dan sertakan direktori kontribusi pengguna

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

(opsional) Anda dapat menggunakan perintah make untuk mengompilasi file sumber dan membangun dokumen

  1. Sekarang kamu bisa (require 'ox-bibtex). Saya lebih suka menulis seperti ini:(eval-after-load 'org (require 'ox-bibtex))

  2. Untuk menghasilkan daftar referensi di tempat yang tepat, letakkan sesuatu seperti #+BIBLIOGRAPHY: your_bib_lib_name plain option:-ddi akhir file org. Opsi lainnya silakan merujuk ke dokumen bantuan diox-bibtex.el

  3. Untuk membuat bagian ekspor HTML berfungsi dengan baik, Anda mungkin memerlukan bibtex2html terbaru, yaitu 1,98. Untuk membuatnya dari sumber, unduh dari github, dan ikuti instruksi di dokumen bantuan 'README'.

Jika Anda menggunakan windows seperti saya, gunakan Cygwin64 dengan semua paket devel. Menggunakan Cygwin64, cd ke dir bibtex2html, dan ketik ./configure, tunggu selesai, lalu ketik make, tunggu selesai. Sekarang di dir ini, Anda akan dapatkan bib2bib.exe, bibtex2html.exedan aux2bib. Salin mereka ke beberapa dir di var lingkungan Anda PATH. Uji dengan mengetikkan bibtex2htmlcmd.

Saya harus melakukan pekerjaan di atas karena saya menggunakan texlive2014. Jika Anda adalah pengguna miktek, bibtex2html 1.95 mungkin berfungsi dengan baik, yang dapat dengan mudah diinstal dengan installer windows.

  1. Untuk membuat bagian ekspor PDF berfungsi dengan benar, gunakan kode berikut untuk menginisialisasi mode-org Anda:

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

Ini adalah bagian 'bibtex' yang melakukan pekerjaan. Saya menggunakan perintah shell escape untuk paket lateks.

empenguin
sumber
Sepertinya saya bahwa jawaban Anda hanya terkait dengan pertanyaan dalam arti bahwa itu juga tentang mode-org dan ox-bibtex. Karena masalah Anda berbeda, lebih baik jika Anda membuka pertanyaan terpisah di mana orang lain dapat memberikan jawaban yang ditargetkan.
paprika
1
Saya hanya ingin melengkapi jawaban dengan itsjeyd. itsjeyd menyarankan mengikuti dokumen org-reftex-citation. Saya lakukan, dan mendapat masalah di atas. Seandainya orang lain mengalami situasi yang sama, saya membagikan penyelidikan saya di sini.
empenguin
IIRC paket ELPA dari mode-org tidak termasuk file-file di bawah contrib/lisp, yang termasuk ox-bibtex. Jadi Anda harus menginstal mode-org dari sumber termasuk contrib/lisp atau hanya menyalin ox-bibtex.elke path-load Anda.
paprika
1
Iya. Saya mengkloning versi beta dari org. Sekarang berfungsi dengan baik.
empenguin
5
@ paprika Tidak perlu menginstal org-modedari sumber untuk mendapatkan contribdirektori. Seperti yang dijelaskan di sini , Org memiliki arsip ELPA sendiri. Yang perlu Anda lakukan adalah menambahkan arsip itu ke package-archives; Anda kemudian dapat menginstal (dan memperbarui) org-plus-contribmenggunakan manajer paket. Tentu saja, ini bukan untuk mengatakan bahwa pendekatan yang Anda sarankan tidak berhasil; Saya hanya ingin menyebutkan (untuk orang lain yang menemukan diskusi ini) bahwa ada pendekatan lain yang tidak melibatkan biaya tambahan karena harus memperbarui org-modesecara terpisah git.
itsjeyd