Подтвердить что ты не робот

Emacs: объединение ссылок между html и латексом в org-mode

Как настроить org-mode, чтобы он мог включать результат команды \cite LaTeX в экспорт HTML?

Пример:

Gulliver Travels

My father had a small estate in Nottinghamshire: I was
the third of five sons.\cite{swift1726}

\printbibliography

#+LaTeX_HEADER: \usepackage{biblatex}
#+LaTeX_HEADER: \bibliography{classics}

Экспорт LaTeX абсолютно велик. Но HTML выжидательно производит все цитаты, поскольку они находятся в источнике. Но как добиться результата следующим образом:

...
<title>Gulliver Travels</title>
...
<p>My father had a small estate in Nottinghamshire: I was
the third of five sons.[<a href="#swift1726">1</a>]</p>
...
<p id="swift1726">[1] J. Swift. <i>Gulliver Travels</i>. 1726.</p>
...
4b9b3361

Ответ 1

предоставленный пакет org-mode org-exp-bibtex.el выдает HTML-библиографию с использованием bibtex2html, а затем приводит цитаты команд в ссылки на элементы библиографии при экспорте в HTML. Существует некоторая документация в org-exp-bibtex.el.

Я расскажу о дополнительной информации, которая помогла мне заставить эту функцию работать в моей системе. Файл org-exp-bibtex.el, похоже, имеет последние версии org-режима. Таким образом, экспорт может работать, если вы оцениваете (require 'org-exp-bibtex), например, помещая его в свой ~/.emacs, а затем помещаете что-то вроде #+BIBLIOGRAPHY: classics plain в исходный файл вместо ваших команд LaTeX \bibliographystyle и \bibliography. Я обнаружил, что для моей системы был необходим следующий патч org-exp-bibtex.el.

--- /usr/share/emacs/site-lisp/org_contrib/lisp/org-exp-bibtex.el   2011-08-09  7:39:35.000000000 -0500
+++ /home/who/.emacs.d/site-lisp/org-exp-bibtex.el  2011-09-06 20:34:55.000000000 -0500
@@ -56,6 +56,7 @@
 ;; 2) creates a foo.html and foo_bib.html
 ;; 3) includes the contents of foo.html in the exported html file

+(require 'cl)
 (require 'org)
 (require 'org-exp)

@@ -90,11 +91,13 @@
        (setq tmp-files   (cons tmp tmp-files))
        (setq extra-args (append extra-args `("-citefile" ,tmp)))))

-       (when (not (eq 0 (apply 'call-process  (append '("bibtex2html" nil nil nil)
+            (let ((process-environment (copy-alist process-environment)))
+              (setenv "TMPDIR" ".")
+             (when (not (eq 0 (apply 'call-process  (append '("bibtex2html" nil nil nil)
                               `("-a" "--nodoc"  "--style" ,style "--no-header")
                               extra-args
                               (list (concat file ".bib"))))))
-         (error "Executing bibtex2html failed"))
+         (error "Executing bibtex2html failed")))

            (dolist (f tmp-files) (delete-file f)))

Первое изменение помогает, если вы получите сообщение об ошибке "Определение функции символа void: flet", я узнал здесь. Второе изменение просто вызывает bibtex2html с TMPDIR, установленным в текущий каталог. домашняя страница bibtex2html предлагает такой обходной путь для проблемы, с которой bibtex2html имеет некоторые установки TeX.

Ответ 2

e3bo ответ превосходный и охватывает все то, что задает первоначальный вопрос. Я, однако, не смог получить желаемые результаты из опубликованного патча. Я получаю ошибку Args out of range, отмеченную Антоном в комментариях к ответу e3bo. Ниже приведена другая реализация патча e3bo, полученная из одного из ответов на отдельный, не связанный с ним вопрос о SO. Я не могу сказать, что знаю, почему этот патч работает для меня, а e3bo - нет; они не отличаются друг от друга. Во всяком случае, я опубликовал патч в надежде, что он может решить проблемы, которые испытывают пользователи, которые не могут правильно получить bibtex2html с помощью других средств.

--- org-exp-bibtex.el.orig      2013-01-05 15:00:53.000000000 -0600
+++ org-exp-bibtex.el   2013-01-05 16:34:54.000000000 -0600
@@ -89,12 +89,13 @@
                (with-temp-file tmp (dolist (i cite-list) (insert (concat i "\n"))))
                (setq tmp-files   (cons tmp tmp-files))
                (setq extra-args (append extra-args `("-citefile" ,tmp)))))
-
-           (when (not (eq 0 (apply 'call-process  (append '("bibtex2html" nil nil nil)
+           
+           (let ((process-environment (cons "TMPDIR=." process-environment)))
+             (when (not (eq 0 (apply 'call-process  (append '("bibtex2html" nil nil nil)
                                                           `("-a" "--nodoc"  "--style" ,style "--no-header")
                                                           extra-args
                                                           (list (concat file ".bib"))))))
-             (error "Executing bibtex2html failed"))
+             (error "Executing bibtex2html failed")))

            (dolist (f tmp-files) (delete-file f)))

Ответ 3

Предоставленный пакет, упомянутый в ответе e3bo, изменил свое имя на ox-bibtex.el (см. также его запись в список предоставленных пакетов режима Org). Использование остается прежним. Однако теперь строка, вставленная в ~/.emacs, должна быть (require 'ox-bibtex).

Ответ 4

Недавно появилась поддержка ebib в org-mode, которая работает, по крайней мере, с ее версией разработки на момент написания ответа.

Шаги:

  • убедитесь, что файлы ebib-preload-bib правильно установлены в вашем документе, чтобы ваш .bib файл загружался ebib при запуске ebib

  • добавьте следующее в ваш .emacs: (org-add-link-type "ebib" 'ebib)

  • Вставьте ссылки ebib в свои документы следующим образом: [ebib:Jones1998][some paper title]

Ответ 5

Если у вас есть проблемы с bibtex2html. Проверьте документ ox.bibtex.el. В частности,

#+BIBLIOGRAPHY: bibfilename stylename optional-options

Как и в ответе e3bo, я ожидаю, что classic не находится в bibfilename большинства людей

#+BIBLIOGRAPHY: classics plain