Đang tải tệp bibtex trong tệp chế độ org


15

Tôi đang cố gắng sử dụng org-modeđể làm hầu hết mọi thứ. Trong hoạt động viết khoa học của mình, tôi muốn phác thảo toàn bộ một bài báo trong một .orgtệp và sau đó xuất ra LaTeX. Tôi không muốn tải .bibtệp bibtex init.elvì tôi có thể có nhiều tệp . Hiện tại, tôi đã thêm phần này vào phần đầu của .orgtệp:

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

Nhưng tôi phải thực hiện nó bằng tay mỗi lần. Có cách nào để làm cho nó tự động? Tối ưu sẽ là có một lệnh ở đầu mỗi .orgtệp nói emacs: "ok, bây giờ bạn nên tải tệp này .bib ". Có gợi ý nào không? Cảm ơn.


Sẽ không một biến cục bộ tập tin thực hiện các mẹo? Ví dụ:M-x add-file-local-variable
Olaf b

Cảm ơn đã trả lời. Thật không may, đó không phải là những gì tôi đang tìm kiếm. Theo cách này, mỗi khi tôi tải tập tin, tôi cần gõ lệnh. Một cái gì đó lile #+STARTUP: do this.
petrux

Lệnh nào? Bạn chỉ phải đặt biến cục bộ tệp một lần.
olaf b

Bạn đa đung! Sử dụng add-file-local-variable-prop-linetôi có thể tạo # -*- reftex-default-bibliography: ("./references.bib"); -*-dòng ở đầu tập tin.
petrux

Câu trả lời:


19

Thêm một dòng như sau là đủ để nói org-mode.bibtập tin để tham khảo:

#+BIBLIOGRAPHY: refs plain

refslà tên của tệp BibTeX ( .bibphần mở rộng bị bỏ qua) và plainbibliographystyle.

Sau đó, bạn có thể gọi org-reftex-citation(ràng buộc C-c C-x [theo mặc định) để chèn tài liệu tham khảo.

Từ tài liệu:

(org-reftex-citation)

Sử dụng reftex-citationđể chèn một trích dẫn vào bộ đệm. Điều này tìm kiếm một dòng như

#+BIBLIOGRAPHY: foo plain option:-d

và xuất phát từ đó foo.biblà tệp thư mục có liên quan đến tài liệu này. Sau đó, nó cài đặt môi trường cần thiết để RefTeX hoạt động trong bộ đệm này và gọi reftex-citationđể chèn một trích dẫn vào bộ đệm.

Việc xuất các trích dẫn như vậy sang cả LaTeX và HTML được xử lý bởi gói đóng góp ox-bibtexcủa Taru Karttunen.

Như câu cuối cùng cho thấy, bạn sẽ cần thêm

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

vào tệp init của bạn để đảm bảo các tham chiếu được xuất sang LaTeX đúng cách. Khi tôi thiết lập điều này cho chính mình, tôi thấy rằng tôi cũng cần phải tùy chỉnh org-latex-pdf-processđể làm cho xuất PDF.

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

Phụ lục

Nếu bạn không muốn sử dụng ràng buộc mặc định cho org-reftex-citation, bạn có thể thiết lập ràng buộc khóa tùy chỉnh cho nó. Ví dụ: các liên kết sau với liên kết org-reftex-citationmặc định cho reftex-citation:

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

Cảm ơn câu trả lời. Tôi không đánh dấu nó là chính xác chỉ vì tôi thấy cách sử dụng # -*- reftex-default-bibliography: ("./references.bib"); -*-tương đương, với lợi thế là tôi có thể sử dụng ràng buộc khóa RefTeX thông thường để thêm một tham chiếu mới. Tui bỏ lỡ điều gì vậy? Chúng ta có nên chỉnh sửa câu trả lời để làm cho nó hoàn chỉnh hơn cho bất kỳ độc giả nào trong tương lai không? Cảm ơn.
petrux

@petrux Bạn chỉ có thể liên kết org-reftex-citationvới cùng một chuỗi khóa reftex-citationthường sử dụng ... Xem các cập nhật cho câu trả lời của tôi.
itjeyd

Tôi mang nó không có cách nào để sử dụng nhiều tập tin thư mục với org-reftex-citation? Nếu tôi thêm một giây #+BIBLIOGRAPHY, thì cái đầu tiên dường như bị bỏ qua.
Brian Z

@BrianZ Tôi không nghĩ trường hợp sử dụng mà bạn mô tả được hỗ trợ ngoài hộp. Nhưng có lẽ ai đó ở đây có một giải pháp lăn tay? Nếu tôi là bạn, tôi sẽ hỏi một câu hỏi mới (chỉ vào chủ đề này để tham khảo); nó chắc chắn nghe giống như một cái gì đó mà người khác có thể quan tâm là tốt.
itjeyd 3/03/2015

1
Đánh giá (setq reftex-default-bibliography '("./a.bib" "./b.bib"))dường như để làm các mẹo. Vì vậy # -*- reftex-default-bibliography: ("./refs1.bib" "./refs2.bib"); -*-, mặc dù nó đưa ra một cảnh báo rằng biến này không nên được xác định cục bộ.
Brian Z

4

Có vẻ như ox-bibtex không được bao gồm trong gói org mới nhất (8.2.10-34-gc41bbc-elpa). Vì vậy, tôi đã tìm kiếm nó trực tuyến và đưa vào thư mục / org / lisp / sau khi tải xuống. Nhưng tôi đã gặp phải lỗi sau khi cố gắng thực hiện xuất khẩu liên quan đến một số bibtex.

Định nghĩa hàm của biểu tượng là void: org-Element-insert-before

Sau đó, tôi kiểm tra tệp 'org-Element.el', tất nhiên không có chức năng nào như vậy được xác định trước. Nhưng tại sao không có ở đó? Tài liệu API trực tuyến của phần tử org đã đề cập đến nó ngay lập tức .

Vì vậy, tôi đoán hiện tại không thể sử dụng RefTeX như cách tài liệu mô tả trừ khi bạn sẵn sàng chuyển sang phiên bản beta hoặc một số phiên bản cũ hơn. Xem

Ở đây tôi chia sẻ cách sử dụng phiên bản beta

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

  2. Di chuyển thư mục đến ~/.emacs.d/và đặt tên làorg-beta

  3. Sửa đổi load-path, để phiên bản beta phủ bóng phiên bản khác và bao gồm thư mục đóng góp của người dùng

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

(tùy chọn) bạn có thể sử dụng lệnh make để biên dịch tệp nguồn và xây dựng tài liệu

  1. Bây giờ bạn có thể (require 'ox-bibtex). Tôi thích viết như thế này:(eval-after-load 'org (require 'ox-bibtex))

  2. Để tạo danh sách tham chiếu ở đúng nơi, hãy đặt một cái gì đó giống như #+BIBLIOGRAPHY: your_bib_lib_name plain option:-dvào cuối tệp org. Nhiều lựa chọn hơn xin vui lòng tham khảo tài liệu trợ giúp trongox-bibtex.el

  3. Để làm cho phần xuất HTML hoạt động chính xác, bạn có thể cần bibtex2html mới nhất, tức là 1,98. Để xây dựng nó từ nguồn, tải xuống từ github và làm theo hướng dẫn trong tài liệu trợ giúp 'README'.

Nếu bạn đang sử dụng các cửa sổ như tôi, hãy sử dụng Cygwin64 với tất cả các gói phát. Sử dụng Cygwin64, cd vào thư mục của bibtex2html và gõ ./configure, đợi kết thúc, sau đó gõ make, chờ kết thúc. Bây giờ trong thư mục này, bạn sẽ nhận được bib2bib.exe, bibtex2html.exeaux2bib. Sao chép chúng vào một số dir trong môi trường của bạn var PATH. Kiểm tra nó bằng cách gõ bibtex2htmlvào cmd.

Tôi phải làm công việc trên vì tôi sử dụng texlive2014. Nếu bạn là người dùng miktek, bibtex2html 1.95 có thể hoạt động tốt, có thể dễ dàng cài đặt với trình cài đặt windows.

  1. Để làm cho phần xuất PDF hoạt động đúng, hãy sử dụng đoạn mã sau để khởi tạo chế độ tổ chức của bạn:

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

Đây là phần 'bibtex' thực hiện công việc. Tôi sử dụng lệnh thoát vỏ cho gói minted của latex.


Dường như với tôi rằng câu trả lời của bạn chỉ liên quan đến câu hỏi theo nghĩa đó cũng là về chế độ org và ox-bibtex. Vì vấn đề của bạn là khác nhau nên tốt nhất nếu bạn mở một câu hỏi riêng biệt nơi người khác có thể cung cấp câu trả lời được nhắm mục tiêu.
paprika

1
Tôi chỉ muốn làm cho một bổ sung cho câu trả lời của itjeyd. Itsjeyd đề nghị theo tài liệu trích dẫn org-reftex-trích dẫn. Tôi đã làm, và có vấn đề trên. Trong trường hợp những người khác gặp phải tình huống tương tự, tôi đã chia sẻ điều tra của mình ở đây.
empenguin 17/03/2015

IIRC gói ELPA của chế độ org không bao gồm các tệp bên dưới contrib/lisp, bao gồm ox-bibtex. Vì vậy, bạn phải cài đặt chế độ org từ nguồn bao gồm contrib/lisp hoặc chỉ sao chép ox-bibtex.elvào đường dẫn tải của bạn.
paprika

1
Đúng. Tôi sao chép phiên bản beta của org. Bây giờ nó hoạt động tốt.
empenguin

5
@paprika Không cần cài đặt org-modetừ nguồn để lấy contribthư mục. Như đã giải thích ở đây , Org có kho lưu trữ ELPA của riêng mình. Tất cả bạn cần làm là thêm kho lưu trữ đó vào package-archives; sau đó bạn có thể cài đặt (và cập nhật) org-plus-contribbằng trình quản lý gói. Tất nhiên, điều này không có nghĩa là cách tiếp cận mà bạn đề xuất không hiệu quả; Tôi chỉ muốn đề cập (cho bất kỳ ai khác đi qua cuộc thảo luận này) rằng có một cách tiếp cận khác không liên quan đến chi phí phải cập nhật org-moderiêng git.
itjeyd
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.