Завантаження файлу bibtex у файл режиму org


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 this.
petrux

Яка команда? Вам потрібно лише один раз встановити локальну змінну файлу.
olaf b

Ви були праві! Використовуючи add-file-local-variable-prop-lineI, я міг генерувати # -*- reftex-default-bibliography: ("./references.bib"); -*-рядок на початку файлу.
petrux

Відповіді:


19

Додавання рядка, як описано нижче, достатньо, щоб сказати, з org-modeяким .bibфайлом потрібно звернутися:

#+BIBLIOGRAPHY: refs plain

refs- це ім'я файлу BibTeX ( .bibрозширення опущено), і plainє bibliographystyle.

Потім ви можете зателефонувати 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, то перший, здається, ігнорується.
Брайан Z

@BrianZ Я не думаю, що описаний вами випадок використання не підтримується. Але, можливо, хтось тут має ручне рішення? Якби я був ти, я поставив би нове запитання (вказуючи на цю тему для довідок); це безумовно звучить як щось, що може зацікавити й інших.
itjeyd

1
Оцінювання, (setq reftex-default-bibliography '("./a.bib" "./b.bib"))здається, виконає трюк. Так і є # -*- reftex-default-bibliography: ("./refs1.bib" "./refs2.bib"); -*-, хоча він загрожує тим, що цю змінну не слід визначати локально.
Брайан Z

4

Схоже, що ox-bibtex не включений до останнього пакету org (8.2.10-34-gc41bbc-elpa). Тож я шукав його в Інтернеті і колись завантажував у каталог / org / lisp /. Але я зіткнувся з наступною помилкою при спробі зробити експорт, пов’язаний з деяким bibtex.

Визначення функції символу недійсне: org-element-insert-before

Потім я перевіряю файл 'org-element.el', звичайно, немає такої функції, що була визначена раніше. Але чому його немає? Документ орг-елемента в Інтернеті згадав про це відразу .

Тому я думаю, що в даний час неможливо використовувати 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 з усіма пакетами розробки. Використовуючи Cygwin64, CD в режимі редагування bibtex2html та введіть ./configure, почекайте закінчення, а потім введіть make, почекайте закінчення. Тепер в цій директорії, ви отримаєте bib2bib.exe, bibtex2html.exeі aux2bib. Скопіюйте їх у якийсь режим у вашому оточенні PATH. Перевірте це, ввівши bibtex2htmlcmd.

Я повинен виконати вищезазначену роботу, оскільки використовую texlive2014. Якщо ви користувач miktek, bibtex2html 1.95 може просто добре працювати, що легко встановити за допомогою інсталятора Windows.

  1. Щоб частина експорту в PDF працювала правильно, використовуйте наступний код для ініціалізації вашого OR-режиму:

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

Саме робота "бібтекс" виконує цю роботу. Я використовую команду escape shell для карбування пакету з латексу.


Мені здається, що ваша відповідь пов'язана лише з питанням у тому сенсі, що мова йде також про org-mode і ox-bibtex. Оскільки ваше питання інше, найкраще, якщо ви відкриєте окреме запитання, де інші можуть надати цільові відповіді.
паприка

1
Я просто хочу доповнити відповідь itsjeyd. itjeyd пропонують слідувати документу org-reftex-цитування. Я і отримав вищезазначену проблему. Якщо інші люди стикаються з такою ж ситуацією, я поділився тут своїм розслідуванням.
empenguin

IIRC пакет ELPA в org-режимі не включає файли в розділі contrib/lisp, що включає ox-bibtex. Тож вам доведеться встановити org-режим з джерела, включаючи contrib/lisp або просто скопіювати його ox-bibtex.elна шлях завантаження.
паприка

1
Так. Я клоную бета-версію org. Зараз це прекрасно працює.
empenguin

6
@paprika Для org-modeотримання contribкаталогу не потрібно встановлювати з джерела . Як пояснено тут , Org має власний архів ELPA. Все, що вам потрібно зробити, - це додати цей архів package-archives; потім можна встановити (і оновити) org-plus-contribза допомогою менеджера пакунків. Звичайно, це не означає, що запропонований вами підхід не працює; Я просто хотів зазначити (для всіх, хто стикається з цією дискусією), що існує ще один підхід, який не передбачає накладних витрат на необхідність оновлення org-modeокремо git.
itjeyd
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.