การโหลดไฟล์ bibtex ในไฟล์โหมดองค์กร


16

ฉันพยายามใช้org-modeเพื่อทำเกือบทุกอย่าง ในกิจกรรมการเขียนทางวิทยาศาสตร์ของฉันฉันต้องการร่างกระดาษทั้งหมดใน.orgไฟล์แล้วส่งออกใน LaTeX ฉันไม่ต้องการโหลด.bibไฟล์ bibtex init.elเพราะฉันสามารถมีหลายไฟล์ได้ สำหรับตอนนี้ฉันได้เพิ่มสิ่งนี้ไว้ที่ส่วนหัวของ.orgไฟล์ของฉัน:

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

แต่ฉันต้องดำเนินการด้วยตนเองทุกครั้ง มีวิธีใดบ้างที่จะทำให้เป็นอัตโนมัติ? ที่ดีที่สุดคือการมีคำสั่งที่จุดเริ่มต้นของแต่ละ.orgไฟล์ว่า emacs: "ตกลงตอนนี้คุณควรโหลดไฟล์นี้ .bib " คำใบ้ใด ๆ ขอบคุณ


ตัวแปรโลคอลไฟล์จะไม่ทำเคล็ดลับหรือไม่ เช่นM-x add-file-local-variable
olaf b

ขอบคุณสำหรับการตอบ. น่าเสียดายไม่ใช่สิ่งที่ฉันกำลังมองหา ด้วยวิธีนี้ทุกครั้งที่ฉันโหลดไฟล์ฉันต้องพิมพ์คำสั่ง #+STARTUP: do thisLile บางสิ่งบางอย่าง
petrux

คำสั่งใด คุณต้องตั้งค่าตัวแปรโลคอลไฟล์เพียงครั้งเดียว
olaf b

คุณพูดถูก! ใช้add-file-local-variable-prop-lineฉันสามารถสร้าง# -*- reftex-default-bibliography: ("./references.bib"); -*-บรรทัดที่จุดเริ่มต้นของไฟล์
petrux

คำตอบ:


19

เพิ่มบรรทัดเช่นต่อไปนี้ก็พอจะบอกได้org-modeซึ่ง.bibไฟล์เพื่อให้คำปรึกษา:

#+BIBLIOGRAPHY: refs plain

refsคือชื่อของแฟ้ม BibTeX นี้ ( .bibส่วนขยายละเว้น) และเป็นplainbibliographystyle

จากนั้นคุณสามารถโทรorg-reftex-citation(ผูกไว้กับC-c C-x [ค่าเริ่มต้น) เพื่อแทรกการอ้างอิง

จากเอกสารประกอบ:

(org-reftex-citation)

ใช้reftex-citationเพื่อแทรกการอ้างอิงลงในบัฟเฟอร์ ดูเหมือนว่าจะเป็นเส้นตรง

#+BIBLIOGRAPHY: foo plain option:-d

และมาจากfoo.bibไฟล์บรรณานุกรมที่เกี่ยวข้องกับเอกสารนี้ จากนั้นจะติดตั้งสภาพแวดล้อมที่จำเป็นสำหรับ RefTeX เพื่อทำงานในบัฟเฟอร์นี้และการโทรreftex-citationเพื่อแทรกการอ้างอิงลงในบัฟเฟอร์

การส่งออกการอ้างอิงดังกล่าวไปยังทั้ง LaTeX และ HTML นั้นจัดการโดยแพ็คเกจที่สนับสนุนox-bibtexโดย Taru Karttunen

ตามประโยคสุดท้ายที่แนะนำคุณจะต้องเพิ่ม

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

ไปที่ไฟล์ init ของคุณเพื่อให้แน่ใจว่าข้อมูลอ้างอิงจะถูกส่งออกไปยัง LaTeX อย่างถูกต้อง เมื่อฉันตั้งค่านี้สำหรับตัวเองฉันพบว่าฉันยังต้องกำหนดเองorg-latex-pdf-processเพื่อให้การส่งออก PDF ทำงานได้:

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

ภาคผนวก

หากคุณไม่ต้องการใช้การเชื่อมโยงเริ่มต้นorg-reftex-citationคุณสามารถตั้งค่าการเชื่อมโยงคีย์แบบกำหนดเองได้ ตัวอย่างเช่นการผูกดังต่อไปนี้เป็นการผูกorg-reftex-citationค่าเริ่มต้นสำหรับreftex-citation:

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

ขอบคุณสำหรับคำตอบ. ฉันไม่ได้ทำเครื่องหมายว่าถูกต้องเพียงเพราะฉันเห็นการใช้งานที่# -*- reftex-default-bibliography: ("./references.bib"); -*-เทียบเท่าโดยมีข้อดีที่ฉันสามารถใช้การเชื่อมโยงคีย์ RefTeX ตามปกติเพื่อเพิ่มการอ้างอิงใหม่ ฉันพลาดอะไรไปรึเปล่า? เราจะแก้ไขคำตอบเพื่อให้สมบูรณ์ยิ่งขึ้นสำหรับผู้อ่านในอนาคตหรือไม่ ขอบคุณ
petrux

@petrux คุณสามารถผูกorg-reftex-citationกับลำดับของคีย์เดียวกันreftex-citationโดยปกติแล้วใช้ ... ดูการอัปเดตสำหรับคำตอบของฉัน
itsjeyd

ฉันใช้มันไม่มีวิธีใช้หลายไฟล์บรรณานุกรมด้วยorg-reftex-citationหรือไม่ หากฉันเพิ่มวินาที#+BIBLIOGRAPHYหนึ่งอันแรกก็ดูเหมือนจะถูกละเว้น
Brian Z

@BrianZ ฉันไม่คิดว่ากรณีการใช้งานที่คุณอธิบายได้รับการสนับสนุนนอกกรอบ แต่อาจมีบางคนที่นี่มีทางออกที่รีดด้วยมือ? ถ้าฉันเป็นคุณฉันจะถามคำถามใหม่ (ชี้ไปที่หัวข้อนี้เพื่อการอ้างอิง); มันฟังดูเหมือนสิ่งที่คนอื่น ๆ อาจสนใจเช่นกัน
itsjeyd

1
การประเมิน(setq reftex-default-bibliography '("./a.bib" "./b.bib"))ดูเหมือนจะทำเคล็ดลับ ดังนั้น# -*- reftex-default-bibliography: ("./refs1.bib" "./refs2.bib"); -*-แม้ว่ามันจะส่งสัญญาณเตือนว่าตัวแปรนี้ไม่ควรถูกกำหนดไว้ในเครื่อง
Brian Z

4

ดูเหมือนว่า ox-bibtex ไม่รวมอยู่ในแพ็คเกจองค์กรล่าสุด (8.2.10-34-gc41bbc-elpa) ดังนั้นฉันค้นหามันออนไลน์และใส่ลงในไดเรกทอรี / org / lisp / ดาวน์โหลดครั้งเดียว แต่ฉันพบข้อผิดพลาดต่อไปนี้เมื่อพยายามทำการส่งออกที่เกี่ยวข้องกับ bibtex

นิยามของฟังก์ชันสัญลักษณ์เป็นโมฆะ: org-element-insert-before

จากนั้นฉันจะตรวจสอบไฟล์ 'org-element.el' แน่นอนว่าไม่มีฟังก์ชั่นที่กำหนดไว้ล่วงหน้า แต่ทำไมถึงไม่มี เอกสาร API ออนไลน์ขององค์กรองค์ประกอบที่กล่าวถึงในครั้งเดียว

ดังนั้นฉันเดาว่าในปัจจุบันมันเป็นไปไม่ได้ที่จะใช้ RefTeX เนื่องจากวิธีที่เอกสารอธิบายเว้นแต่คุณยินดีเปลี่ยนเป็นรุ่นเบต้าหรือรุ่นเก่ากว่า ดู

ที่นี่ฉันแบ่งปันวิธีการใช้รุ่นเบต้า

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

  2. ย้ายโฟลเดอร์ไปที่~/.emacs.d/และตั้งชื่อเป็นorg-beta

  3. ปรับเปลี่ยนload-pathให้รุ่นเบต้าเงาอื่น ๆ และรวมไดเรกทอรีผู้ใช้มีส่วนร่วม

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

(ไม่บังคับ) คุณสามารถใช้คำสั่ง make เพื่อรวบรวมไฟล์ต้นฉบับและสร้างเอกสาร

  1. (require 'ox-bibtex)ตอนนี้คุณสามารถ ฉันชอบเขียนแบบนี้:(eval-after-load 'org (require 'ox-bibtex))

  2. หากต้องการสร้างรายการอ้างอิงในตำแหน่งที่ถูกต้องให้วางบางสิ่งที่ชอบ#+BIBLIOGRAPHY: your_bib_lib_name plain option:-dไปยังจุดสิ้นสุดของไฟล์ org ตัวเลือกเพิ่มเติมโปรดดูเอกสารความช่วยเหลือในox-bibtex.el

  3. ในการทำให้ส่วนส่งออก HTML ทำงานได้คุณอาจต้อง bibtex2html ล่าสุดเช่น 1.98 หากต้องการสร้างจากแหล่งที่มาให้ดาวน์โหลดจาก github และทำตามคำแนะนำในเอกสารช่วยเหลือ 'README'

ถ้าคุณใช้ windows อย่างฉันใช้ Cygwin64 กับแพ็คเกจ devel ทั้งหมด ใช้ Cygwin64, cd ไปยัง dir ของ bibtex2html และพิมพ์./configureรอให้เสร็จสิ้นจากนั้นพิมพ์makeรอให้เสร็จสิ้น ตอนนี้ใน dir นี้คุณจะได้รับbib2bib.exe, และbibtex2html.exe aux2bibคัดลอกไปยัง dir บางอย่างใน PATHvar ทดสอบด้วยการพิมพ์bibtex2htmlคำสั่ง

ฉันต้องทำงานดังกล่าวข้างต้นเพราะฉันใช้ texlive2014 หากคุณเป็นผู้ใช้ miktek bibtex2html 1.95 อาจใช้งานได้ดีซึ่งสามารถติดตั้งได้อย่างง่ายดายด้วยตัวติดตั้ง windows

  1. ในการทำให้ส่วนการส่งออก PDF ทำงานได้ถูกต้องให้ใช้รหัสต่อไปนี้เพื่อเริ่มต้นโหมดองค์กรของคุณ:

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

มันเป็นส่วน 'bibtex' ที่ทำงานได้ ฉันใช้คำสั่ง shell escape สำหรับแพ็กเกจ minted ของ latex


ฉันคิดว่าคำตอบของคุณเกี่ยวข้องกับคำถามในแง่ที่เกี่ยวกับโหมด org และ ox-bibtex เท่านั้น เนื่องจากปัญหาของคุณแตกต่างกันจะดีที่สุดถ้าคุณเปิดคำถามแยกต่างหากที่คนอื่นสามารถให้คำตอบเป้าหมายได้
paprika

1
ฉันแค่อยากจะเติมเต็มให้กับคำตอบโดย itsjeyd แนะนำให้ติดตามเอกสารของ org-reftex-citation ฉันทำและได้รับปัญหาข้างต้น ในกรณีที่คนอื่นพบสถานการณ์แบบเดียวกันฉันแบ่งปันการสอบสวนของฉันที่นี่
empenguin

IIRC แพ็คเกจ ELPA ของโหมด org ไม่รวมไฟล์ภายใต้contrib/lispซึ่งรวมถึง ox-bibtex ดังนั้นคุณต้องติดตั้งโหมด org จากแหล่งรวมถึง contrib/lispหรือเพียงแค่คัดลอกox-bibtex.elไปยังโหลดพา ธ ของคุณ
paprika

1
ใช่. ฉันโคลน org รุ่นเบต้า ตอนนี้มันใช้งานได้ดี
empenguin

6
@paprika ไม่จำเป็นต้องติดตั้งorg-modeจากแหล่งที่มาเพื่อรับcontribไดเรกทอรี ตามที่อธิบายไว้ที่นี่องค์กรมีหน่วยเก็บ ELPA ของตนเอง สิ่งที่คุณต้องทำคือการเพิ่มที่เก็บถาวรpackage-archives; จากนั้นคุณสามารถติดตั้ง (และอัปเดต) org-plus-contribโดยใช้ตัวจัดการแพ็คเกจ แน่นอนว่านี่ไม่ใช่การบอกว่าวิธีการที่คุณแนะนำนั้นไม่ได้ผล ฉันแค่อยากจะพูดถึง (สำหรับคนอื่นที่มาในการสนทนานี้) ว่ามีวิธีการที่ไม่เกี่ยวข้องกับค่าใช้จ่ายของการมีการอัปเดตอีกแยกผ่านorg-mode git
itsjeyd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.