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>
...
Ответы
Ответ 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