Загрузка файла 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 файл». Любой намек? Благодарю.

petrux
источник
Разве файловая локальная переменная не поможет? НапримерM-x add-file-local-variable
Олаф б
Спасибо за ответ. К сожалению, это не то, что я ищу. Таким образом, каждый раз, когда я загружаю файл, мне нужно ввести команду. Что-то лил #+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)

в ваш файл инициализации, чтобы убедиться, что ссылки экспортируются в 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)
itsjeyd
источник
Спасибо за ответ. Я не помечаю это как правильное только потому, что вижу использование # -*- reftex-default-bibliography: ("./references.bib"); -*-эквивалента, с тем преимуществом, что я могу использовать обычную привязку ключа RefTeX для добавления новой ссылки. Я что-то пропустил? Должны ли мы отредактировать ответ, чтобы сделать его более полным для любого будущего читателя? Благодарю.
Petrux
@petrux Вы можете просто привязать org-reftex-citationк той же последовательности клавиш, которую reftex-citationобычно использует ... Смотрите обновления моего ответа.
itjeyd
Я так понимаю, нет возможности использовать несколько библиографических файлов с org-reftex-citation? Если добавить второй #+BIBLIOGRAPHY, затем первый , кажется, игнорируются.
Брайан З
@BrianZ Я не думаю, что описанный вами вариант использования поддерживается прямо из коробки. Но, может быть, у кого-то здесь есть решение, раскрученное вручную? На вашем месте я бы задал новый вопрос (указывая на эту ветку для справки); это определенно звучит как то, что может заинтересовать других.
itsjeyd
1
Оценка (setq reftex-default-bibliography '("./a.bib" "./b.bib"))кажется, сделать трюк. Так и есть # -*- reftex-default-bibliography: ("./refs1.bib" "./refs2.bib"); -*-, хотя и выдает предупреждение, что эта переменная не должна определяться локально.
Брайан З,
4

Похоже, что ox-bibtex не входит в последнюю версию org (8.2.10-34-gc41bbc-elpa). Поэтому я искал его в Интернете и поместил в каталог / org / lisp / после загрузки. Но я столкнулся со следующей ошибкой при попытке выполнить экспорт с использованием некоторого bibtex.

Определение функции символа void: org-element-insert-before

Затем я проверяю файл 'org-element.el', конечно же, нет такой предопределенной функции. Но почему там нет? Онлайновый документ API org-element упомянул об этом один раз .

Поэтому я думаю, что в настоящее время невозможно использовать 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, перейдите в каталог bibtex2html и введите « ./configureждать окончания», затем введите « makeждать окончания». Теперь в этой директории, вы получите bib2bib.exe, bibtex2html.exeи aux2bib. Скопируйте их в какой-нибудь каталог в вашей среде var PATH. Проверьте это, набрав bibtex2htmlв cmd.

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

  1. Чтобы заставить часть экспорта PDF работать правильно, используйте следующий код для инициализации вашего режима org:

    (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», которая делает работу. Я использую команду оболочки escape для отчеканенного пакета латекса.

empenguin
источник
Мне кажется, что ваш ответ имеет отношение только к вопросу в том смысле, что он также касается org-mode и ox-bibtex. Поскольку у вас другая проблема, лучше всего, если вы откроете отдельный вопрос, где другие могут дать целевые ответы.
паприка
1
Я просто хочу дополнить ответ своей мечтой. itjeyd предлагает следовать документу org-reftex-citation. Я сделал, и получил вышеупомянутую проблему. На случай, если другие люди столкнутся с такой же ситуацией, я поделился своим расследованием здесь.
empenguin
IIRC Пакет ELPA org-mode не включает файлы contrib/lisp, в которые входит ox-bibtex. Таким образом , вы должны установить орг-режим из источника , включая contrib/lisp или просто скопировать ox-bibtex.elна свой путь нагрузки.
паприка
1
Да. Я клонирую бета-версию организации. Теперь работает нормально.
empenguin
6
@paprika Нет необходимости устанавливать org-modeиз исходного кода, чтобы получить contribкаталог. Как объясняется здесь , Org имеет свой собственный архив ELPA. Все, что вам нужно сделать, это добавить этот архив в package-archives; затем вы можете установить (и обновить), org-plus-contribиспользуя менеджер пакетов. Конечно, это не значит, что предлагаемый вами подход не работает; Я просто хотел упомянуть (для всех, кто сталкивается с этим обсуждением), что есть другой подход, который не включает в себя накладные расходы на обновление по org-modeотдельности git.
itjeyd